<rss version="2.0">
  <channel>
    <title>.NET User Group Bern Community Feed</title>
    <link>http://www.dnug-bern.ch/rss.aspx</link>
    <description>Die letzten Meldungen der .NET User Group Bern Community</description>
    <copyright>(c) 2010-2011, .NET User Group Bern</copyright>
    <item p3:etag="W/&quot;AkQDSHs6cSp7ImA9WhBbGEs.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-2263048860631390733</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/OF35LudVEQs/myco-my-first-ios-app-is-in-appstore.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">ios</category>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <title>Myco: My first iOS App is in the iTunes Store</title>
      <description>&lt;p&gt;My colleague &lt;a href="http://blog.candescent.ch/"&gt;Stefan&lt;/a&gt; created &lt;a href="http://www.windowsphone.com/en-us/store/app/myco-pro/17bf8999-e40b-4c13-a08b-aea906794cbc"&gt;Myco / Pilzkenner for Windows Phone&lt;/a&gt;.&lt;br /&gt;The App won the &lt;a href="http://www.microsoft.com/de-ch/events/shape/appaward/default.aspx"&gt;"Best Windows Phone Apps" award in&lt;/a&gt;&lt;a href="http://www.microsoft.com/de-ch/events/shape/appaward/default.aspx"&gt; the Microsoft Switzerland App Award 2013.&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;We &lt;a href="http://www.ivorycode.com/"&gt;partnered up&lt;/a&gt; and I ported the app to iOS. &lt;a href="https://itunes.apple.com/us/app/myco-pro/id646736059"&gt;Myco is now available in the iTunes Store&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are three editions of Myco: &lt;/p&gt;
&lt;p&gt;&lt;a href="https://itunes.apple.com/us/app/myco-pro/id646736059?mt=8"&gt;&lt;img style="float: left; padding: 10px;" title="Myco Pro in the iTunes Store" src="http://lh3.ggpht.com/-ptD_1dCbZ2o/UZaRF5VVpbI/AAAAAAAABVc/w39WcYa-nc8/StoreIcon114x114_pro.png?imgmax=800" alt="StoreIcon114x114 pro" width="114" height="114" border="0" /&gt;&lt;/a&gt;&lt;a href="https://itunes.apple.com/us/app/myco/id646717423?mt=8"&gt;&lt;img style="float: left; padding: 10px;" title="Myco in the iTunes Store" src="http://lh6.ggpht.com/-Y49jLRdsFi4/UZaREnGBQ8I/AAAAAAAABVQ/Ak-IuOlVtVo/StoreIcon114x114.png?imgmax=800" alt="StoreIcon114x114" width="114" height="114" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://itunes.apple.com/us/app/myco-free/id642217304?mt=8"&gt;&lt;img style="float: left; padding: 10px;" title="Myco Free in the iTunes Store" src="http://lh3.ggpht.com/-qhnJo0szfCs/UZaRDENEZnI/AAAAAAAABVM/eZ_ebnfUBA4/StoreIcon114x114_free.png?imgmax=800" alt="StoreIcon114x114 free" width="114" height="114" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="clear: left;"&gt;  For more information please &lt;a href="http://myco.ivorycode.com/#editions_summary"&gt;visit the Myco product page&lt;/a&gt;.&lt;/div&gt;
&lt;p&gt;If you like the app, please consider submitting a review to the iTunes Store.&lt;/p&gt;
&lt;p&gt;PS: In the Free edition 1.0.1 there is a bug that crashes the App when searching in the mushroom library while an iAd banner is displayed. I fixed the bug and submitted version 1.0.2 to the iTunes Store, but it will take some days until it will be available.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/OF35LudVEQs" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 17 May 2013 22:20:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/2263048860631390733/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=2263048860631390733" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/2263048860631390733?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/2263048860631390733?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2013-05-18T11:12:59+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;My colleague &lt;a href="http://blog.candescent.ch/"&gt;Stefan&lt;/a&gt; created &lt;a href="http://www.windowsphone.com/en-us/store/app/myco-pro/17bf8999-e40b-4c13-a08b-aea906794cbc"&gt;
Myco / Pilzkenner for Windows Phone&lt;/a&gt;.&lt;br&gt;
The App won the &lt;a href="http://www.microsoft.com/de-ch/events/shape/appaward/default.aspx"&gt;
&amp;quot;Best Windows Phone Apps&amp;quot; award in&lt;/a&gt;&lt;a href="http://www.microsoft.com/de-ch/events/shape/appaward/default.aspx"&gt;&amp;nbsp;the Microsoft Switzerland App Award 2013.&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We &lt;a href="http://www.ivorycode.com/"&gt;partnered up&lt;/a&gt; and I ported the app to iOS.
&lt;a href="https://itunes.apple.com/us/app/myco-pro/id646736059"&gt;Myco is now available in the iTunes Store&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are three editions of Myco:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://itunes.apple.com/us/app/myco-pro/id646736059?mt=8"&gt;&lt;img title="Myco Pro in the iTunes Store" src="http://lh3.ggpht.com/-ptD_1dCbZ2o/UZaRF5VVpbI/AAAAAAAABVc/w39WcYa-nc8/StoreIcon114x114_pro.png?imgmax=800" alt="StoreIcon114x114 pro" width="114" height="114" border="0" style="float:left; padding:10px"&gt;&lt;/a&gt;&lt;a href="https://itunes.apple.com/us/app/myco/id646717423?mt=8"&gt;&lt;img title="Myco in the iTunes Store" src="http://lh6.ggpht.com/-Y49jLRdsFi4/UZaREnGBQ8I/AAAAAAAABVQ/Ak-IuOlVtVo/StoreIcon114x114.png?imgmax=800" alt="StoreIcon114x114" width="114" height="114" border="0" style="float:left; padding:10px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://itunes.apple.com/us/app/myco-free/id642217304?mt=8"&gt;&lt;img title="Myco Free in the iTunes Store" src="http://lh3.ggpht.com/-qhnJo0szfCs/UZaRDENEZnI/AAAAAAAABVM/eZ_ebnfUBA4/StoreIcon114x114_free.png?imgmax=800" alt="StoreIcon114x114 free" width="114" height="114" border="0" style="float:left; padding:10px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="clear:left"&gt;&amp;nbsp; For more information please &lt;a href="http://myco.ivorycode.com/#editions_summary"&gt;
visit the Myco product page&lt;/a&gt;.&lt;/div&gt;
&lt;p&gt;If you like the app, please consider submitting a review to the iTunes Store.&lt;/p&gt;
&lt;p&gt;PS: In the Free edition 1.0.1 there is a bug that crashes the App when searching in the mushroom library while an iAd banner is displayed. I fixed the bug and submitted version 1.0.2 to the iTunes Store, but it will take some days until it will be available.&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=OF35LudVEQs:8GWVFqvkmNk:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=OF35LudVEQs:8GWVFqvkmNk:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/OF35LudVEQs" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-18T11:12:59.519+02:00</app:edited>
      <media:thumbnail url="http://lh3.ggpht.com/-ptD_1dCbZ2o/UZaRF5VVpbI/AAAAAAAABVc/w39WcYa-nc8/s72-c/StoreIcon114x114_pro.png?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2013/05/myco-my-first-ios-app-is-in-appstore.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#635041512000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#635041512000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#635041512000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Rediscovering Modularity with Chris Chedgey</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 14. Mai 2013 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Rediscovering Modularity with Chris Chedgey&lt;/h3&gt;
&lt;p&gt;Hallo Berner .NET Freund&lt;/p&gt;
&lt;p&gt;Es folgt ein weiteres grossartiges Event welches wir durch unsere Zusammenarbeit mit den Usergroups Zentralschweiz und Zürich durchführen können. Auch unsere Sponsoren spielen eine wichtige Rolle dabei. Dadurch sind wir in der Lage ein grossartiges Netzwerk
 von Speakern aus allen Ländern zu nutzen. Durch diese Zusammenarbeit wird das Organisieren und für die Speaker die Planung effizienter. Für uns sind diese Partnerschaften und Sponsoren sehr wertvoll, da sie all dies möglich machen!
&lt;/p&gt;
&lt;p&gt;Unser nächster Höhepunkt ist im Mai das Thema &amp;quot;Rediscovering Modularity&amp;quot; mit Chris Chedgey der extra von Irland einfliegt und mit uns gemeinsam in die Tiefen von strukturierten und unstrukturierten Code eintauchen wird. Sei dabei, wir freuen uns auf Dich!
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The principles of modularity have been applied to engineering projects since Gorak built the wheel, and Thag the barrow of the world’s first wheelbarrow. Thag’s barrow didn’t care that the wheel was first hewn from rock, and later upgraded to a lighter,
 wooden one, and Gorak’s wheel design was reused for the world’s first chariot. This is how humans make sense of complexity – we divide and conquer.
&lt;/p&gt;
&lt;p&gt;Analogous principles of modularity are taught in Software Engineering 101 – information hiding, interfaces, clear responsibility, high internal cohesion, low external coupling, etc., and we apply these routinely as we develop, and continuously refactor the
 code encapsulated within classes. &lt;/p&gt;
&lt;p&gt;However when the number of classes reaches some threshold, higher level abstractions are needed in order to manage the complexity of the growing codebase. This limit is usually overshot and the team is soon drowning in an ocean of classes. At this point
 it is time to restructure the code-base into a hierarchy of modules above the class level, or watch the team’s frustration continue to rise, and productivity plummet.
&lt;/p&gt;
&lt;p&gt;This talk proposes a measurement framework for assessing the quality of a modular structure, identifying regions of poor modularity, and for assessing the impact of restructuring or refactoring actions. Based on this framework, the talk introduces strategies
 for retro-fitting modularity to an existing codebase, with minimum impact on the code logic itself.
&lt;/p&gt;
&lt;p&gt;This material is based on experience gained while helping many development teams through the restructuring process. The concepts will be illustrated by examples.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About Chris&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Chris has a Masters in Software Engineering from Trinity College Dublin, with over 25 years software engineering experience gained in Ireland, Canada and the United States.
&lt;/p&gt;
&lt;p&gt;Chris joined the International Space Station Project in 1990 where he was a member of the team that defined the software development processes and tools for the program, and then technical lead on the Remote Manipulator System control software. In 1994 he
 moved to the $1.5bn Iris program which replaced the entire communications systems for the Canadian armed forces, first on the process/toolsmithing side, and then the product development side. In 2000 he founded Headway Software to address the lack of large-scale
 modularity that he saw as pervasive in software industry. &lt;/p&gt;
&lt;p&gt;He lives on the south coast of Ireland, where he likes to sail when it’s windy, and walk the dog when it’s not.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/rediscovering-modularity-with-chris-chedgey-1232984" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser &lt;a href="http://dnug-bern.ch/contact.aspx"&gt;
Kontaktformular&lt;/a&gt; nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbemod&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Tue, 14 May 2013 18:00:00 +0200</pubDate>
    </item>
    <item p3:etag="W/&quot;Ak4EQ3o7fSp7ImA9WhBbEkw.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-4677764022760748016</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/hCPqedZ1RKE/tidbit-how-programmers-spend-their-time.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <title>Tidbit: How programmers spend their time</title>
      <description>&lt;p&gt;From the great &lt;a href="http://www.youtube.com/watch?v=t9YLtDJZtPY#!"&gt;talk of Douglas Crockford about Quality&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=t9YLtDJZtPY#!"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" title="" src="http://lh4.ggpht.com/-fNqNfWRN3zE/UY1ctzAb9vI/AAAAAAAABTw/fkWl05zsTJg/Screen%252520Shot%2525202013-04-28%252520at%25252010.18.02%252520PM.png?imgmax=800" alt="Screen Shot 2013 04 28 at 10 18 02 PM" width="600" height="416" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is so true in my experience... that is why I don't get why people are argueing over and over again that  typing is one of the most important skills of a programmer (the &lt;a href="http://hanselminutes.com/362/ios-and-android-apps-with-xamarin-studio-20-and-miguel-de-icaza"&gt;latest is example from Miguel de Icaza and Scott Hanselman&lt;/a&gt;). &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/hCPqedZ1RKE" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 10 May 2013 22:46:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/4677764022760748016/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=4677764022760748016" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/4677764022760748016?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/4677764022760748016?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2013-05-10T22:48:22+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;From the great &lt;a href="http://www.youtube.com/watch?v=t9YLtDJZtPY#!"&gt;talk of Douglas Crockford about Quality&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=t9YLtDJZtPY#!"&gt;&lt;img title="" src="http://lh4.ggpht.com/-fNqNfWRN3zE/UY1ctzAb9vI/AAAAAAAABTw/fkWl05zsTJg/Screen%252520Shot%2525202013-04-28%252520at%25252010.18.02%252520PM.png?imgmax=800" alt="Screen Shot 2013 04 28 at 10 18 02 PM" width="600" height="416" border="0" style="display:block; margin-left:auto; margin-right:auto"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is so true in my experience... that is why I don't get why people are argueing over and over again that &amp;nbsp;typing is one of the most important skills of a programmer (the
&lt;a href="http://hanselminutes.com/362/ios-and-android-apps-with-xamarin-studio-20-and-miguel-de-icaza"&gt;
latest is example from Miguel de Icaza and Scott Hanselman&lt;/a&gt;).&amp;nbsp;&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=hCPqedZ1RKE:SMt8i41HkzY:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=hCPqedZ1RKE:SMt8i41HkzY:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/hCPqedZ1RKE" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-10T22:48:22.405+02:00</app:edited>
      <media:thumbnail url="http://lh4.ggpht.com/-fNqNfWRN3zE/UY1ctzAb9vI/AAAAAAAABTw/fkWl05zsTJg/s72-c/Screen%252520Shot%2525202013-04-28%252520at%25252010.18.02%252520PM.png?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2013/05/tidbit-how-programmers-spend-their-time.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;C0YGSH08eip7ImA9WhBUEUU.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-7001006200749451616</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/nUGfcrF0SYs/quotes-of-week-bugs.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">quote</category>
      <title>Quotes of the Week: Bugs</title>
      <description>&lt;div style="max-width: 560px;"&gt;&lt;img style="margin: 0px 0px 10px 10px;" src="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/quotes2.jpg?imgmax=800" alt="quotes2.jpg" width="120" align="right" border="0" /&gt;
&lt;div style="max-width: 340px;"&gt;
&lt;blockquote&gt;Software teams have to move away from the idea that bugs are a useful way to measure quality.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://impact-newsletter.s3.amazonaws.com/february2013.html"&gt;Impact! Newsletter February 2013&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt; &lt;br /&gt;
&lt;blockquote&gt;Software does not have enough self awareness to be afraid of bugs. That's why it works as well as it does.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.youtube.com/watch?v=t9YLtDJZtPY#!"&gt;Douglas Crockford, Quality&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt; &lt;br /&gt;
&lt;blockquote&gt;Testing shows the presence, not the absence of bugs.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://en.wikiquote.org/wiki/Edsger_W._Dijkstra"&gt;Edsger Dijkstra&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt; &lt;br /&gt;
&lt;blockquote&gt;Bugs are like over-parented kids. They get a lot of attention. They might be born in the relative quiet of a developer's IDE, but the moment they are exposed to the rest of the world, they live their lives amidst a great deal of fanfare.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt; &lt;br /&gt;
&lt;blockquote&gt;Maybe there’s no such thing as a bug. Maybe there are just things that work well and things that don’t work well.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://businesscraftsmanship.tumblr.com/post/37779031804/the-bug-myth"&gt;Tobias Mayer, The Bug Myth&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt; &lt;br /&gt;
&lt;blockquote&gt;Unfortunately, in the celebration of testing artifacts (such as counting the number of bugs) we forget about the software. All testing artifacts have value to the extent that they impact the source code and therefore the product.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt; &lt;br /&gt;
&lt;blockquote&gt;Comprehensive statistics of past bugs are no more useful for software quality than financial accounts of a chophouse are useful for a steak sandwich.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://gojko.net/2011/05/17/bug-statistics-are-a-waste-of-time/"&gt;Gojko Adzic, Bug statistics are a waste of time&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/nUGfcrF0SYs" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 28 Apr 2013 22:27:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/7001006200749451616/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=7001006200749451616" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/7001006200749451616?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/7001006200749451616?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2013-04-28T22:32:09+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;div style="max-width:560px"&gt;&lt;img src="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/quotes2.jpg?imgmax=800" alt="quotes2.jpg" width="120" align="right" border="0" style="margin:0px 0px 10px 10px"&gt;
&lt;div style="max-width:340px"&gt;
&lt;blockquote&gt;Software teams have to move away from the idea that bugs are a useful way to measure quality.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://impact-newsletter.s3.amazonaws.com/february2013.html"&gt;Impact! Newsletter February 2013&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Software does not have enough self awareness to be afraid of bugs. That's why it works as well as it does.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://www.youtube.com/watch?v=t9YLtDJZtPY#!"&gt;Douglas Crockford, Quality&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Testing shows the presence, not the absence of bugs.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://en.wikiquote.org/wiki/Edsger_W._Dijkstra"&gt;Edsger Dijkstra&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Bugs are like over-parented kids. They get a lot of attention. They might be born in the relative quiet of a developer's IDE, but the moment they are exposed to the rest of the world, they live their lives amidst a great deal of fanfare.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Maybe there’s no such thing as a bug. Maybe there are just things that work well and things that don’t work well.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://businesscraftsmanship.tumblr.com/post/37779031804/the-bug-myth"&gt;Tobias Mayer, The Bug Myth&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Unfortunately, in the celebration of testing artifacts (such as counting the number of bugs) we forget about the software. All testing artifacts have value to the extent that they impact the source code and therefore the product.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Comprehensive statistics of past bugs are no more useful for software quality than financial accounts of a chophouse are useful for a steak sandwich.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://gojko.net/2011/05/17/bug-statistics-are-a-waste-of-time/"&gt;Gojko Adzic, Bug statistics are a waste of time&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nUGfcrF0SYs:4P0GrJ3n7sI:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nUGfcrF0SYs:4P0GrJ3n7sI:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/nUGfcrF0SYs" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-28T22:32:09.372+02:00</app:edited>
      <media:thumbnail url="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/s72-c/quotes2.jpg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2013/04/quotes-of-week-bugs.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="false">http://graberj.wordpress.com/?p=2875</guid>
      <link>http://graberj.wordpress.com/2013/04/26/unterlagen-zu-ruby-und-rails-fur-net-entwickler-luzern/</link>
      <category>Ruby</category>
      <category>webDotNet</category>
      <category>webRuby</category>
      <category>.Net</category>
      <title>Unterlagen zu “Ruby und Rails für .Net Entwickler” (Luzern)</title>
      <description>Die .Net User Group Zentralschweiz gab mir Anfangs Woche die Gelegenheit meinen Ruby und Rails Vortrag für .Net Entwickler zu präsentieren. Gut 6 Monate nach der ersten Präsentation bei der .Net User Group Bern konnte ich so nochmals rund 30 .Net Entwicklern
 zeigen das es neben C# noch andere interessante Programmiersprachen gibt. In den letzten […]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;amp;blog=9035432&amp;amp;post=2875&amp;amp;subd=graberj&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Fri, 26 Apr 2013 04:30:07 Z</pubDate>
      <comments>http://graberj.wordpress.com/2013/04/26/unterlagen-zu-ruby-und-rails-fur-net-entwickler-luzern/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Johnny Graber</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Die &lt;a href="http://www.dotnet-zentral.ch/"&gt;.Net User Group Zentralschweiz&lt;/a&gt; gab mir Anfangs Woche die Gelegenheit meinen Ruby und Rails Vortrag für .Net Entwickler zu präsentieren. Gut 6 Monate nach der ersten Präsentation bei der &lt;a href="http://graberj.wordpress.com/2012/11/04/unterlagen-zu-ruby-und-rails-fur-net-entwickler/"&gt;.Net User Group Bern&lt;/a&gt; konnte ich so nochmals rund 30 .Net Entwicklern zeigen das es neben C# noch andere interessante Programmiersprachen gibt.&lt;/p&gt;
&lt;p&gt;In den letzten Monaten gab es bei Ruby und Rails einige entscheidende Neuerungen. Ruby ist zum 20. Geburtstag in der Version 2 erschienen und Rails 4 liegt nun als Beta vor. Für mich Grund genug neben dem Vortrag auch die Beispiele anzupassen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Unterlagen&lt;/h2&gt;
&lt;p&gt;Die Präsentation findet sich auf &lt;a href="https://speakerdeck.com/jgraber/ruby-and-rails-fur-net-entwickler-luzern"&gt;Speakerdeck&lt;/a&gt; und kann dort auch als PDF heruntergeladen werden. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://speakerdeck.com/jgraber/ruby-and-rails-fur-net-entwickler-luzern"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/04/rr_dotnet_luzern.png?w=595" alt="Präsentation auf Speakerdeck"   class="aligncenter size-full wp-image-2877" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Beispiele&lt;/h2&gt;
&lt;p&gt;Die grössere &lt;a href="https://github.com/jgraber/Zentral_RailsDemo"&gt;Beispielanwendung&lt;/a&gt; zu den Alltagsszenarien habe ich in Rails 4 Beta 1 neu erstellt. Die Aufgabenstellung ist noch dieselbe, die Entwicklungswerkzeuge sind aber um die &lt;a href="http://graberj.wordpress.com/2013/01/20/bessere-fehlermeldungen-in-rails/"&gt;hilfreichen Tools&lt;/a&gt; rund um die Fehlerbehandlung erweitert worden.&lt;br /&gt;
Vergleicht man die neue Beispielanwendung mit der &lt;a href="https://github.com/jgraber/DNUGBE_RailsDemo"&gt;für Rails 3.2&lt;/a&gt; kann man so auch die Unterschiede (wie Strong Parameters) zwischen den Rails-Versionen sehen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Weiterführende Informationen&lt;/h2&gt;
&lt;p&gt;Damit man sich die Links nicht aus den Folien zusammensuchen muss:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Webseiten &amp;amp; Tools&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ruby-lang.org"&gt;Offizielle Seite zu Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rubyonrails.org/"&gt;Offizielle Seite zu Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rubygems.org/"&gt;RubyGems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ruby-toolbox.com/"&gt;Ruby Toolbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tools für Windows&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://rubyinstaller.org"&gt;Ruby Installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://railsinstaller.org"&gt;Rails Installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://windows.github.com"&gt;GitHub for Windows&lt;/a&gt; (&lt;a href="http://graberj.wordpress.com/2012/10/23/github-for-windows/"&gt;Anleitung&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Podcasts &amp;amp; Videos&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ruby5.envylabs.com/"&gt;Ruby 5&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://rubyshow.com/"&gt;The Ruby Show&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rubyrogues.com/"&gt;Ruby Rogues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://railscasts.com/"&gt;Railscasts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.confreaks.com/"&gt;Confreaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tekpub.com/"&gt;TekPub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bücher&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://pragprog.com/book/btlang/seven-languages-in-seven-weeks"&gt;Seven Languages in Seven Weeks&lt;/a&gt; (&lt;a href="http://graberj.wordpress.com/2011/09/21/buch-rezension-7-wochen-7-sprachen/"&gt;Rezension&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pragprog.com/book/ruby3/programming-ruby-1-9"&gt;Programming Ruby 1.9&lt;/a&gt;  (&lt;a href="http://graberj.wordpress.com/2011/10/28/buch-rezension-zu-programming-ruby-1-9-3th-edition/"&gt;Rezension&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.poodr.info/"&gt;Practical Object-Oriented Design in Ruby&lt;/a&gt; (&lt;a href="http://graberj.wordpress.com/2013/03/24/buch-rezension-zu-poodr/"&gt;Rezension&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.manning.com/bigg2/"&gt;Rails 4 in Action&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://pragprog.com/book/warv/the-rails-view"&gt;The Rails View&lt;/a&gt;  (&lt;a href="http://graberj.wordpress.com/2012/10/14/buch-rezension-zu-the-rails-view/"&gt;Rezension&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pragprog.com/book/rcctr/continuous-testing"&gt;Continuous Testing&lt;/a&gt;  (&lt;a href="http://graberj.wordpress.com/2011/10/17/buch-rezension-zu-continuous-testing/"&gt;Rezension&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In meinem Blog sind alle Beiträge zu Ruby &amp;amp; Rails mit dem Tag &lt;strong&gt;&amp;#8220;&lt;a href="http://graberj.wordpress.com/tag/ruby/"&gt;Ruby&lt;/a&gt;&amp;#8220;&lt;/strong&gt; versehen. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Danke&lt;/h2&gt;
&lt;p&gt;Als Abschluss möchte ich mich nochmals bei der .Net User Group Zentralschweiz und den Teilnehmern bedanken. Neben der grossen Teilnehmerzahl freuten mich besonders die guten Gespräche in der Pause und nach dem Vortrag. Ich finde es toll dass es auch in Luzern eine so vielfältige .Net User Group gibt.&lt;/p&gt;
&lt;br /&gt;Einsortiert unter:&lt;a href='http://graberj.wordpress.com/category/ruby/'&gt;Ruby&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webdotnet/'&gt;webDotNet&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webruby/'&gt;webRuby&lt;/a&gt; Tagged: &lt;a href='http://graberj.wordpress.com/tag/net/'&gt;.Net&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/tag/ruby/'&gt;Ruby&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/graberj.wordpress.com/2875/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/graberj.wordpress.com/2875/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/graberj.wordpress.com/2875/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/graberj.wordpress.com/2875/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/graberj.wordpress.com/2875/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/graberj.wordpress.com/2875/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/graberj.wordpress.com/2875/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/graberj.wordpress.com/2875/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/graberj.wordpress.com/2875/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/graberj.wordpress.com/2875/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/graberj.wordpress.com/2875/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/graberj.wordpress.com/2875/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/graberj.wordpress.com/2875/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/graberj.wordpress.com/2875/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;#038;blog=9035432&amp;#038;post=2875&amp;#038;subd=graberj&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://graberj.wordpress.com/2013/04/26/unterlagen-zu-ruby-und-rails-fur-net-entwickler-luzern/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <media:content url="http://0.gravatar.com/avatar/fd2bd6ebacb744ce20c57a9e4cbb252d?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">graberj</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/04/rr_dotnet_luzern.png" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Präsentation auf Speakerdeck</media:title>
      </media:content>
    </item>
    <item p3:etag="W/&quot;DEUAQ3Y9fCp7ImA9WhBVGE4.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-8398271276564974110</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/64MbOXQbLhI/tidbit-readings-from-book-of-geek.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">humor</category>
      <title>Tidbit: Readings from the Book of Geek</title>
      <description>&lt;p&gt;Highly recommended: the first 5 minutes of Dan North reading from the Book of Geek. Its funny and poignant:&lt;/p&gt;
&lt;blockquote&gt;In the beginning the software was without form, and void.&lt;br /&gt; The Architects said "Let there be light" and they separated the light from the darkness.&lt;br /&gt; And they called the light Architecture and the darkness Hacking.&lt;/blockquote&gt;
&lt;blockquote&gt;And Maven brought forth a Plague of Apache Commons, and there was a flood of all the Libraries of the Internet as a judgement upon the people.&lt;/blockquote&gt;
&lt;p style="text-align: center;"&gt;&lt;iframe src="http://www.youtube.com/embed/X2F2uIKCeRs" width="420" height="315" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt; &lt;a href="hhttp://www.youtube.com/watch?v=X2F2uIKCeRs"&gt;Hard Things Made Easy (Part 1.2) - Dan North&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/64MbOXQbLhI" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 24 Apr 2013 22:41:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/8398271276564974110/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=8398271276564974110" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8398271276564974110?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8398271276564974110?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2013-04-24T22:44:02+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;Highly recommended: the first 5 minutes of Dan North reading from the Book of Geek. Its funny and poignant:&lt;/p&gt;
&lt;blockquote&gt;In the beginning the software was without form, and void.&lt;br&gt;
The Architects said &amp;quot;Let there be light&amp;quot; and they separated the light from the darkness.&lt;br&gt;
And they called the light Architecture and the darkness Hacking.&lt;/blockquote&gt;
&lt;blockquote&gt;And Maven brought forth a Plague of Apache Commons, and there was a flood of all the Libraries of the Internet as a judgement upon the people.&lt;/blockquote&gt;
&lt;p style="text-align:center"&gt;&lt;br&gt;
&lt;a href=""&gt;Hard Things Made Easy (Part 1.2) - Dan North&lt;/a&gt;&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=64MbOXQbLhI:hiNMCPSJsFA:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=64MbOXQbLhI:hiNMCPSJsFA:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/64MbOXQbLhI" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-24T22:44:02.864+02:00</app:edited>
      <media:thumbnail url="http://img.youtube.com/vi/X2F2uIKCeRs/default.jpg" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2013/04/tidbit-readings-from-book-of-geek.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;D0EASX87fip7ImA9WhBWGEQ.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-175563817571875624</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/ssTxczyniCg/tidbit-cake-mix-analogies.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">craftmanship</category>
      <category domain="http://www.blogger.com/atom/ns#">tidbit</category>
      <title>Tidbit: Cake Mix Analogies</title>
      <description>&lt;p&gt;It's funny how cake mix analogies pop up in interesting speeches lately. &lt;br /&gt; &lt;/p&gt;
&lt;p&gt;Dan Ariely speaks about the &lt;a href="http://danariely.com/tag/ikea-effect/"&gt;IKEA effect&lt;/a&gt; that gives meaning to our work, which was essential for the success of cake mixes:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;iframe src="http://embed.ted.com/talks/dan_ariely_what_makes_us_feel_good_about_our_work.html" width="400" height="235" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt; &lt;br /&gt; &lt;a href="http://www.ted.com/talks/dan_ariely_what_makes_us_feel_good_about_our_work.html"&gt;Dan Ariely: What makes us feel good about our work?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In her hilarious talk Christin Gorman shows how cake mixes are stupid and make us not enjoy our work any more, like many generic frameworks we use as programmers:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;iframe src="http://player.vimeo.com/video/28885655" width="420" frameborder="0"&gt; &lt;/iframe&gt; &lt;br /&gt; &lt;a href="https://vimeo.com/28885655"&gt;Hibernate should be to programmers what cake mixes are to bakers: beneath their dignity.&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/ssTxczyniCg" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 14 Apr 2013 01:18:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/175563817571875624/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=175563817571875624" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/175563817571875624?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/175563817571875624?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2013-04-14T01:27:28+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;It's funny how cake mix analogies pop up in interesting speeches lately. &lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Dan Ariely speaks about the &lt;a href="http://danariely.com/tag/ikea-effect/"&gt;IKEA effect&lt;/a&gt; that gives meaning to our work, which was essential for the success of cake mixes:&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;br&gt;
&lt;a href="http://www.ted.com/talks/dan_ariely_what_makes_us_feel_good_about_our_work.html"&gt;Dan Ariely: What makes us feel good about our work?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In her hilarious talk Christin Gorman shows how cake mixes are stupid and make us not enjoy our work any more, like many generic frameworks we use as programmers:&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;br&gt;
&lt;a href="https://vimeo.com/28885655"&gt;Hibernate should be to programmers what cake mixes are to bakers: beneath their dignity.&lt;/a&gt;&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ssTxczyniCg:vtmq1qkI1GE:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ssTxczyniCg:vtmq1qkI1GE:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/ssTxczyniCg" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-14T01:27:28.106+02:00</app:edited>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2013/04/tidbit-cake-mix-analogies.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#635006088000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#635006088000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#635006088000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Windows Azure - Platform for Big Data, NoSQL and Relational Data. What makes sense for me?</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Mittwoch, 3.&amp;nbsp;April 2013 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Windows Azure - Platform for Big Data, NoSQL and Relational Data. What makes sense for me? with Michael Epprecht alias Big Mike&lt;/h3&gt;
&lt;p&gt;Ostern ist vorbei und wir finden, dass es an der Zeit ist, sich wieder ein wenig mit dem Unternehmenswert Daten zu beschäftigen. Sei dabei wenn Big Mike seine Erfahrungen an uns weiter gibt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Buzzword of 2012 was &amp;quot;Big Data&amp;quot;. What does it mean for me? At the same time, NoSQL is able to drive storage costs down for applications, but we still need Relational Data for its simplicity of use, especially when transactions and relationships need
 to be well enforced. &lt;/p&gt;
&lt;p&gt;Where does this all fit together? I will dive into the architecture and implementation behind some of our Big Data customers, large and small customers who are using NoSQL instead of Relational Databases, and where relational databases still have a place
 to exist. &lt;/p&gt;
&lt;p&gt;What can I use on premise, and what can only be used on Windows Azure? These questions will be covered and the typical design patterns that have been proven to work.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About Michael Epprecht&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Michael has been administrating and developing for databases since 1993, with extensive experience on high performance, high volume and mission critical systems.
&lt;/p&gt;
&lt;p&gt;Over the years, Michael has been involved in Architecture, Security, Development (RDMS and .NET), Performance Tuning, Operations and Deployment of on Premise and Cloud applications.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/windows-azure-platform-for-big-data-nosql-and-relational-data-what-makes-sense-for-me-with-michael-epprecht-1221211" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser &lt;a href="http://dnug-bern.ch/contact.aspx"&gt;
Kontaktformular&lt;/a&gt; nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbebd&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Wed, 03 Apr 2013 18:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="false">http://graberj.wordpress.com/?p=2860</guid>
      <link>http://graberj.wordpress.com/2013/03/24/buch-rezension-zu-poodr/</link>
      <category>Bücher</category>
      <category>dnugBern</category>
      <category>webRead</category>
      <category>webRuby</category>
      <category>.Net</category>
      <category>Ruby</category>
      <title>Buch-Rezension zu “Practical Object-Oriented Design in Ruby”</title>
      <description>Ein gutes Buch über objektorientiertes Design (OOD) zu finden ist nicht einfach. Obwohl sich viele Bücher diesem Thema widmen fehlt doch immer wieder etwas: Entweder ist das Buch so theoretisch das es keinen Bezug zur Praxis hat oder die notwendige Theorie
 fehlt. “Practical Object-Oriented Design in Ruby” (kurz POODR) von Sandy Metz findet den Mittelweg […]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;amp;blog=9035432&amp;amp;post=2860&amp;amp;subd=graberj&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Sun, 24 Mar 2013 20:25:33 Z</pubDate>
      <comments>http://graberj.wordpress.com/2013/03/24/buch-rezension-zu-poodr/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Johnny Graber</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;a href="http://graberj.files.wordpress.com/2013/03/poodr.png"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/03/poodr.png?w=595" alt="POODR"   class="alignleft size-full wp-image-2866" /&gt;&lt;/a&gt; Ein gutes Buch über objektorientiertes Design (OOD) zu finden ist nicht einfach. Obwohl sich viele Bücher diesem Thema widmen fehlt doch immer wieder etwas: Entweder ist das Buch so theoretisch das es keinen Bezug zur Praxis hat oder die notwendige Theorie fehlt. &lt;/p&gt;
&lt;p&gt;&amp;#8220;&lt;a href="http://www.poodr.info/"&gt;Practical Object-Oriented Design in Ruby&lt;/a&gt;&amp;#8221; (kurz POODR) von Sandy Metz findet den Mittelweg zwischen Theorie und Praxis. In einer direkten Sprache wird man Schritt für Schritt an die Thematik OOD herangeführt.&lt;br /&gt;
Auch wenn die Beispiele in Ruby sind so ist dieses Buch auch für andere Sprachen sehr zu empfehlen – das benötigte Wissen über Ruby ist minimal und schnell erklärt.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Wozu OOD?&lt;/h2&gt;
&lt;p&gt;Sandy Metz definiert OOD als die Art und Weise wie man Code in einem Programm anordnet. OOD ist somit nicht nur etwas für Experten sondern betrifft jeden Programmierer. Denn jeder der Code schreibt beeinflusst dessen Design.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Design is more the art of preserving changeability than it is the act of achieving perfection.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Ob eine Erweiterung später einfach einzubauen ist hängt von den heute getroffenen Entscheidungen ab. Oft fehlt aber die Erfahrung und das Wissen wie sich Entscheidungen auswirken. Dieses Buch zeigt einem wie kleine Veränderungen die Erweiterbarkeit beeinflussen und was für Vor- und Nachteile die einzelnen Ansätze von OOD mitbringen. Dies ersetzt zwar nicht das Sammeln von eigenen Erfahrungen, bietet einem aber eine gute Ausgangslage um nicht alle Fehler selber machen zu müssen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Einfache Beispiele&lt;/h2&gt;
&lt;p&gt;Nach all den Banken und Blogs kommen hier Fahrräder für die Beispiele zum Einsatz. Durch die Optimierung für E-Reader sind die Beispiele recht kurz. So lässt sich der Code übersichtlich darstellen und ist als Nebeneffekt einfach zu verstehen. Im Gegensatz zu anderen Büchern kann man sich so auf die Beispiele konzentrieren und muss nicht ständig hin und her blättern.&lt;/p&gt;
&lt;p&gt;Das entscheidende bei den Beispielen ist der Weg zum Ziel. Daher gibt es entsprechend viele kleine Schritte die ausführlich erläutert werden. Allerdings führen nicht alle Schritte in die richtige Richtung. Umwege und falsche Ansätze werden in diesem Buch ebenfalls thematisiert und erklärt.&lt;br /&gt;
So kann man auf wenigen Seiten Erfahrungen sammeln die bei einem richtigen Projekt Monate an Arbeit verursachen. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;p&gt;Dem Thema Tests widmet sich das letzte Kapitel. Die in den vorherigen Kapiteln erarbeiteten Beispiele werden hier nun getestet. Man sieht so rasch wie die verschiedenen Ansätze von OOD sich auf die Testbarkeit von Code auswirken.&lt;/p&gt;
&lt;p&gt;Sehr gelungen finde ich wie die Stolperfallen präsentiert werden. Der Mock für die Tests mag noch so gut sein. Wenn sich die Klasse ändert und der Mock dies nicht mitbekommt ist zwar der Test grün aber die Software läuft nicht. Die gezeigten Lösungen sind zwar auf dynamisch typisierte Programmiersprachen ausgerichtet, können aber auch bei C# beim Erkennen von Veränderungen helfen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Was fehlt&lt;/h2&gt;
&lt;p&gt;Die gewählten Beispiele sind alle recht Kurz und meist weniger als 100 Zeilen lang. Auch wenn kurze Klassen und Methoden anzustreben sind so ist die Realität doch oft anderes. Ein längeres Beispiel bei dem man mittels OOD Ordnung hinein bringt hätte ich sehr begrüsst. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Weitere Informationen&lt;/h2&gt;
&lt;p&gt;Wer sich für OOD interessiert aber nicht gleich ein Buch dazu lesen will wird auf &lt;a href="http://confreaks.com/presenters/211-sandi-metz"&gt;Confreaks&lt;/a&gt; fündig. Dort gibt es als Video abrufbare Präsentationen von Sani Metz die einzelne Konzepte aus dem Buch aufgegriffen.&lt;/p&gt;
&lt;p&gt;Wer lieber Podcasts hört findet in &lt;a href="http://rubyrogues.com/087-rr-book-clubpractical-object-oriented-design-in-ruby-with-sandi-metz/"&gt;Episode 87&lt;/a&gt; von Ruby Rogues eine ausführliche Buchbesprechung mit zahlreichen Tipps rund um OOD die im Buch keinen Platz gefunden haben.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Fazit&lt;/h2&gt;
&lt;p&gt;POODR ist ein angenehm zu lesendes Buch das sehr viel Wissen vermittelt. Obwohl ich mich schon länger mit OOD beschäftige konnte ich hier ganz neue Aspekte kennen lernen. Die Beispiele sind so einfach das man davon nicht abgelenkt wird und doch komplex genug um all die verschiedenen Möglichkeiten zu erklären.&lt;/p&gt;
&lt;p&gt;Für mich ist dieses Buch definitiv ein „Must Read“ für alle die sich mit Software-Entwicklung beschäftigen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Zum Buch&lt;/h2&gt;
&lt;p&gt;&amp;#8220;&lt;a href="http://www.poodr.info/"&gt;Practical Object-Oriented Design in Ruby&lt;/a&gt;&amp;#8221; von Sandy Metz, 2012 Addison-Wesley Professional, ISBN: 978-0-3217-2133-4, 272 Seiten, Englisch&lt;/p&gt;
&lt;br /&gt;Einsortiert unter:&lt;a href='http://graberj.wordpress.com/category/bucher/'&gt;Bücher&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/dnugbern/'&gt;dnugBern&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webread/'&gt;webRead&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webruby/'&gt;webRuby&lt;/a&gt; Tagged: &lt;a href='http://graberj.wordpress.com/tag/net/'&gt;.Net&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/tag/bucher/'&gt;Bücher&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/tag/ruby/'&gt;Ruby&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/graberj.wordpress.com/2860/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/graberj.wordpress.com/2860/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/graberj.wordpress.com/2860/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/graberj.wordpress.com/2860/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/graberj.wordpress.com/2860/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/graberj.wordpress.com/2860/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/graberj.wordpress.com/2860/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/graberj.wordpress.com/2860/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/graberj.wordpress.com/2860/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/graberj.wordpress.com/2860/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/graberj.wordpress.com/2860/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/graberj.wordpress.com/2860/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/graberj.wordpress.com/2860/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/graberj.wordpress.com/2860/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;#038;blog=9035432&amp;#038;post=2860&amp;#038;subd=graberj&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://graberj.wordpress.com/2013/03/24/buch-rezension-zu-poodr/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <media:content url="http://0.gravatar.com/avatar/fd2bd6ebacb744ce20c57a9e4cbb252d?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">graberj</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/03/poodr.png" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">POODR</media:title>
      </media:content>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634993128000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634993128000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634993128000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Von Domain Driven Design (DDD) zu Command Query Responsibility Segregation (CQRS)</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 19.&amp;nbsp;März 2013 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Von Domain Driven Design (DDD) zu Command Query Responsibility Segregation (CQRS) mit Dennis Traub&lt;/h3&gt;
&lt;p&gt;In Zusammenarbei mit der .NET User Group Zentralschweiz veranstalten wir wieder ein Treffen mit einem besonderen Thema. Wir werden uns damit auseinander setzen wie die Ideen hinter dem Strategischen Anwedungsentwurf mit DDD auf CQRS angewandt werden können.&lt;/p&gt;
&lt;p&gt;Wenn&amp;nbsp;Du&amp;nbsp;die Gelegenheit nutzen willst,&amp;nbsp;Dein Hirn mit Wissen vollzupumpen ;-), dann&amp;nbsp;musst Du am
&lt;a title="Strategischer Anwendungsentwurf mit DDD" href="http://www.dotnet-zentral.ch/2013/02/05/18-03-2013-strategischer-anwendungsentwurf-mit-ddd-mit-dennis-traub/" target="_blank"&gt;
18.03.2013 unbedingt den initalien Vortrag zu DDD bei der .NET User Group Zentralschweiz
&lt;/a&gt;besuchen.&amp;nbsp;Anschliessend geht es bei uns wie folgt weiter:&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mit der etwas sperrig benannten Command-Query Responsibility Segregation, kurz CQRS, werden einerseits eine Reihe von Prinzipien der modernen Softwareentwicklung (SOLID, Separation of Concerns, etc.) auf Architekturebene angewandt. Andererseits ist es eine
 konsequente Weiterentwicklung der Ideen hinter Domain-Driven Design, insbesondere in Hinblick auf verteilte Anwendungen und sogenannte &amp;quot;Occasionally Connected Systems&amp;quot;, wie sie z.B. häufig im mobilen Umfeld zur Anwendung kommen.
&lt;/p&gt;
&lt;p&gt;Gleichzeitig wird CQRS fälschlicherweise oft als eine überladene, theoretische und sehr komplizierte Sammlung von Mustern und Technologien wahrgenommen. In Wirklichkeit ist CQRS sehr einfach.
&lt;/p&gt;
&lt;p&gt;Nach einer kurzen Wiederholung der wichtigsten Aspekte des Domain-Driven Design (DDD) werden in diesem Vortrag die Grundzüge einer CQRS-Anwendung aufgezeigt, und wie man die zu Grunde liegenden Ideen ganz einfach auch in eigenen Projekten einsetzen kann.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Über Dennis Traub&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dennis Traub ist Softwareentwickler und Berater mit einem besonderen Interesse für Software Craftmanship, Agile Entwicklungsmethoden und Domain-Driven Design. Mit 20 Jahren Erfahrung in der Softwareentwicklung liegt sein derzeitiger Schwerpunkt auf Web-
 und Cloud-basierten Geschäftsanwendungen sowie Systemen für Qualitätsmanagement, Risikoanalyse und Sicherheit im Luftverkehr. Er ist regelmäßiger Sprecher auf Konferenzen und Entwicklerevents, Autor und Trainer.
&lt;/p&gt;
&lt;p&gt;In seiner Freizeit steht Dennis seinen Entwickler-Kolleginnen und -Kollegen bei Stack Overflow und in Usergroups mit Rat und Tat zur Seite. Er ist Moderator der .Net Online Usergroup und Mitglied der .Net-UG Paderborn.
&lt;/p&gt;
&lt;p&gt;Er lebt mit seiner Familie in der Nähe von Paderborn. Bei Twitter findet man ihn unter @DTraub .
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/domain-driven-design-ddd-command-query-responsibility-segregation-cqrs-dennis-traub-1202586" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser &lt;a href="http://dnug-bern.ch/contact.aspx"&gt;
Kontaktformular&lt;/a&gt; nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbedc&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Tue, 19 Mar 2013 18:00:00 +0100</pubDate>
    </item>
    <item>
      <guid isPermaLink="false">http://graberj.wordpress.com/?p=2842</guid>
      <link>http://graberj.wordpress.com/2013/03/17/ef-5-modelle-ubersichtlicher-gestalten/</link>
      <category>.Net</category>
      <category>dnugBern</category>
      <category>webDotNet</category>
      <category>Persistenz</category>
      <title>EF 5: Modelle übersichtlicher gestalten</title>
      <description>Ob man nun “Model-First” oder “DB-First” folgt, bei Entity Framework steht man schnell einmal vor einem Problem: Das Datenmodell verliert an Übersichtlichkeit. Die oft verwendeten Beispiele mit wenigen Tabellen und Verbindungen sehen im Designer von Visual
 Studio prima aus. Hat man aber ein komplexeres Modell steht man bald einmal vor so einer Ansicht: Auch wenn […]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;amp;blog=9035432&amp;amp;post=2842&amp;amp;subd=graberj&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Sun, 17 Mar 2013 15:04:20 Z</pubDate>
      <comments>http://graberj.wordpress.com/2013/03/17/ef-5-modelle-ubersichtlicher-gestalten/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Johnny Graber</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Ob man nun &amp;#8220;Model-First&amp;#8221; oder &amp;#8220;DB-First&amp;#8221; folgt, bei Entity Framework steht man schnell einmal vor einem Problem: Das Datenmodell verliert an Übersichtlichkeit. &lt;/p&gt;
&lt;p&gt;Die oft verwendeten Beispiele mit wenigen Tabellen und Verbindungen sehen im Designer von Visual Studio prima aus. Hat man aber ein komplexeres Modell steht man bald einmal vor so einer Ansicht:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://graberj.files.wordpress.com/2013/03/edm_big.png"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/03/edm_big.png?w=595&amp;#038;h=407" alt="Unübersichtliches Modell" width="595" height="407" class="aligncenter size-large wp-image-2843" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Auch wenn man sehr viel Zeit aufwendet um die Entitäten hin und her zu ziehen, so bleibt das Modell doch unübersichtlich. Verwendet man Entity Framework 5 und Visual Studio 2012 gibt es aber 2 Hilfsmittel die einem bei der Organisation helfen können.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Farben&lt;/h2&gt;
&lt;p&gt;Mit Hilfe von Farben kann man thematisch zusammenhängende Bereiche hervorheben. Dazu klickt man im Designer die gewünschte Tabelle (oder mittels der Hilfe von CTRL mehrere) an und wählt in den Properties die entsprechende Füllfarbe (Fill Color):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://graberj.files.wordpress.com/2013/03/ef5_fillcolor.png"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/03/ef5_fillcolor.png?w=355&amp;#038;h=427" alt="Farbe auswählen" width="355" height="427" class="aligncenter size-large wp-image-2844" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Die Farben haben einzig im Designer eine Bedeutung und beeinflussen das Modell nicht. Mit wenig Aufwand sieht das Diagramm dann so aus: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://graberj.files.wordpress.com/2013/03/edm_bigcolor.png"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/03/edm_bigcolor.png?w=595&amp;#038;h=439" alt="Farbiges Modell" width="595" height="439" class="aligncenter size-large wp-image-2847" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Diagramme&lt;/h2&gt;
&lt;p&gt;Für grosse Modelle sind die Farben zwar ein Anfang, doch ist man damit noch nicht am Ziel. Neu kann man das Modell aber in verschiedene Diagramme aufteilen. Die entsprechende Funktion findet sich im Model Browser unter Diagramme:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://graberj.files.wordpress.com/2013/03/ef_adddiagram.png"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/03/ef_adddiagram.png?w=392&amp;#038;h=335" alt="Diagramm hinzufügen" width="392" height="335" class="aligncenter size-large wp-image-2846" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Die gewünschten Entitäten können nun auf dieses neue Diagramm gezogen werden. Man muss dies aber nicht für jede Entität einzeln machen. Über das Kontextmenü auf einer Entität kann man mit &amp;#8220;&lt;code&gt;Include Related&lt;/code&gt;&amp;#8221; alle verbundenen Entitäten auf einmal einfügen lassen.&lt;/p&gt;
&lt;p&gt;Die so erzeugten Diagramme behandeln nur noch den Ausschnitt aus dem Modell den man genauer betrachten möchte:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://graberj.files.wordpress.com/2013/03/ef_newdiagram.png"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/03/ef_newdiagram.png?w=370&amp;#038;h=385" alt="Zusätzliches Diagramm" width="370" height="385" class="aligncenter size-large wp-image-2845" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Beim Löschen von Entitäten aus dem Diagramm muss man aufpassen. Mittels &amp;#8220;&lt;code&gt;Delete from Model&lt;/code&gt;&amp;#8221; wird die Entität aus dem Modell gelöscht und ist danach über den DB-Kontext nicht mehr abrufbar. In der Regel will man stattdessen die Funktion &amp;#8220;&lt;code&gt;Remove from Diagram&lt;/code&gt;&amp;#8221; nutzen. So wird nur das Diagramm angepasst und das Modell bleibt unverändert.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Fazit&lt;/h2&gt;
&lt;p&gt;Mit Hilfe von Farben und zusätzlichen Diagrammen kann man Ordnung in sein DB-Modell bekommen. So kann man auch grössere Datenbanken in Entity Framework benutzen ohne die Übersicht zu verlieren.&lt;/p&gt;
&lt;br /&gt;Einsortiert unter:&lt;a href='http://graberj.wordpress.com/category/net/'&gt;.Net&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/dnugbern/'&gt;dnugBern&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webdotnet/'&gt;webDotNet&lt;/a&gt; Tagged: &lt;a href='http://graberj.wordpress.com/tag/net/'&gt;.Net&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/tag/persistenz/'&gt;Persistenz&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/graberj.wordpress.com/2842/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/graberj.wordpress.com/2842/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/graberj.wordpress.com/2842/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/graberj.wordpress.com/2842/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/graberj.wordpress.com/2842/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/graberj.wordpress.com/2842/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/graberj.wordpress.com/2842/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/graberj.wordpress.com/2842/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/graberj.wordpress.com/2842/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/graberj.wordpress.com/2842/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/graberj.wordpress.com/2842/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/graberj.wordpress.com/2842/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/graberj.wordpress.com/2842/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/graberj.wordpress.com/2842/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;#038;blog=9035432&amp;#038;post=2842&amp;#038;subd=graberj&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://graberj.wordpress.com/2013/03/17/ef-5-modelle-ubersichtlicher-gestalten/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <media:content url="http://0.gravatar.com/avatar/fd2bd6ebacb744ce20c57a9e4cbb252d?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">graberj</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/03/edm_big.png?w=595" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Unübersichtliches Modell</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/03/ef5_fillcolor.png?w=355" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Farbe auswählen</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/03/edm_bigcolor.png?w=595" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Farbiges Modell</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/03/ef_adddiagram.png?w=392" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Diagramm hinzufügen</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/03/ef_newdiagram.png?w=370" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Zusätzliches Diagramm</media:title>
      </media:content>
    </item>
    <item>
      <guid isPermaLink="false">http://graberj.wordpress.com/?p=2811</guid>
      <link>http://graberj.wordpress.com/2013/03/10/die-testpyramide/</link>
      <category>dnugBern</category>
      <category>Software Entwicklung</category>
      <category>webDotNet</category>
      <category>webRuby</category>
      <category>.Net</category>
      <category>Testing</category>
      <title>Die Testpyramide</title>
      <description>Seit einigen Monaten stosse ich immer wieder auf das Konzept der Testpyramide. Ich finde dieses Bild sehr passen, da es die wesentlichen Aspekte auf den Punkt bringt. Um ein System wirklich zu testen gilt es mehrere Ebenen anzuschauen. Die Testpyramide
 zeigt diese auf und vermittelt auf eine leicht verständliche Weise wie sich die Anzahl der […]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;amp;blog=9035432&amp;amp;post=2811&amp;amp;subd=graberj&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Sun, 10 Mar 2013 13:04:36 Z</pubDate>
      <comments>http://graberj.wordpress.com/2013/03/10/die-testpyramide/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Johnny Graber</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Seit einigen Monaten stosse ich immer wieder auf das Konzept der Testpyramide. Ich finde dieses Bild sehr passen, da es die wesentlichen Aspekte auf den Punkt bringt. Um ein System wirklich zu testen gilt es mehrere Ebenen anzuschauen. Die Testpyramide zeigt diese auf und vermittelt auf eine leicht verständliche Weise wie sich die Anzahl der Testfälle staffeln soll:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://graberj.files.wordpress.com/2013/02/testpyramide.png"&gt;&lt;img src="http://graberj.files.wordpress.com/2013/02/testpyramide.png?w=595" alt="Die Testpyramide"   class="aligncenter size-full wp-image-2837" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Unit-Tests als Grundlage&lt;/h2&gt;
&lt;p&gt;Unit-Tests bilden die Basis der Testpyramide. Die kleinstmöglichen Tests sollten sicherstellen dass das System im Kern funktioniert. Eine wichtige Eigenschaft von Unit-Tests: Sie sind Schnell. In wenigen Sekunden sollte man wissen ob es überhaupt Sinn macht die länger laufenden Tests zu starten. Diese Sekunden sind wohlgemerkt nicht für einen einzigen Tests gedacht, sondern für alle Unit-Tests zusammen – womit ein Unit-Test der länger als 1/100 Sekunde dauert schon als langsam gelten muss.&lt;/p&gt;
&lt;p&gt;Damit Tests so schnell sind dürfen sie nur wenig testen. Weder eine Verbindung zur Datenbank noch ein Zugriff aufs Dateisystem oder Aufruf eines Webservices ist erlaubt. All diese Abhängigkeiten müssen entfernt werden. Ob dies mittels Konfiguration oder mit Mocks gemacht wird spielt dabei keine Rolle.&lt;/p&gt;
&lt;p&gt;Die Geschwindigkeit alleine kann aber nicht das einzige Kriterium für einen Unit-Test sein. Sonst besteht die Testsuite am Ende nur aus leeren Methoden. Das was man testet soll auch noch Sinn machen. Und einem in die richtige Richtung weisen wenn einmal ein Test fehlschlägt. So ist man schnell einmal bei mehreren Kriterien die von Ben Rady und Rod Coffin in &amp;#8220;&lt;a href="http://graberj.wordpress.com/2011/10/17/buch-rezension-zu-continuous-testing/"&gt;Continuous Testing&lt;/a&gt;&amp;#8221; mit dieser Abkürzung zusammengefasst werden:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;FIRE: Fast, Informative, Reliable and Exhaustive &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Integrationstests&lt;/h2&gt;
&lt;p&gt;Zu wissen dass der eigene Code für sich alleine funktioniert ist ein Anfang. Damit weiss man aber noch nicht ob der Code auch mit anderen Teilen funktioniert. Hier kommen die Integrationstests ins Spiel. &lt;/p&gt;
&lt;p&gt;Auf dieser Ebene werden all die Abhängigkeiten angeschaut die man bei den Unit-Tests entfernt hat. Was zuerst nach vermeidbarem Zusatzaufwand aussieht hat sehr wohl seine Berechtigung. Es genügt wenn man das Erzeugen, Speichern, Aktualisieren und Löschen eines Objekts in der Datenbank ein Mal pro Klasse testet. Dies hat die gleiche Aussagekraft (ist aber deutlich schneller) wie wenn man in allen Unit-Tests immer mit den Objekten aus der Datenbank arbeiten würde.&lt;/p&gt;
&lt;p&gt;Da weniger Tests mit den Umsystemen nötig sind wirkt sich deren Ausführungsdauer nicht so stark auf die Länge des gesamten Testlaufs aus. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Akzeptanztests&lt;/h2&gt;
&lt;p&gt;Die Akzeptanztests bilden die Spitze der Testpyramide. Hier gilt es die Anwendung aus Sicht des Benutzers zu testen. Vom GUI durch die Geschäftslogik hin zur Datenbank und den externen Webservices soll hier alles geprüft werden. &lt;/p&gt;
&lt;p&gt;Da man bereits weis das sowohl der Kern der Anwendung funktioniert und der auch mit den Umsystemen korrekt zusammenarbeitet benötigt man nur noch wenige Akzeptanztests. Diese dürfen noch einmal langsamer sein als die Integrationstests und sollen als letzte Stufe die Korrektheit der gesamten Anwendung belegen.&lt;/p&gt;
&lt;p&gt;Und da es so wenige Tests sind kann man diese auch mit dem Kunden/Endbenutzer besprechen. Müssen wirklich nur die wichtigsten Tests angeschaut werden hat man gute Chancen dass dies auch wirklich gemacht wird.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Reihenfolge &amp;amp; Einschränkungen&lt;/h2&gt;
&lt;p&gt;Die Testpyramide gibt keine Reihenfolge für die Erstellung der Testfälle vor. Wenn es bei der Ausführung auch am meisten Sinn macht mit den Unit Tests zu beginnen so ist man beim Erstellen frei. &lt;/p&gt;
&lt;p&gt;Hat man Glück und der Kunde will an Akzeptanztests mitarbeiten kann man einen Top-Down Ansatz wählen. Man beginnt mit einem fehlgeschlagenen Akzeptanztest und schreibt so lange Integrations- und Unit-Tests bis dieser erfüllt wird. Alternativ kann man aber auch mit den Unit-Tests beginnen und sich nach oben arbeiten. &lt;/p&gt;
&lt;p&gt;Die Testpyramide ist aber nicht perfekt. Es gibt etliche Testarten die darin keinen Platz finden. Wo platziert man beispielsweise die Explorationstests? Oder die Performancetests? Trotz dieser Einschränkungen finde ich das Bild der Testpyramide sehr gelungen.&lt;/p&gt;
&lt;br /&gt;Einsortiert unter:&lt;a href='http://graberj.wordpress.com/category/dnugbern/'&gt;dnugBern&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/software-entwicklung/'&gt;Software Entwicklung&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webdotnet/'&gt;webDotNet&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webruby/'&gt;webRuby&lt;/a&gt; Tagged: &lt;a href='http://graberj.wordpress.com/tag/net/'&gt;.Net&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/tag/testing/'&gt;Testing&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/graberj.wordpress.com/2811/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/graberj.wordpress.com/2811/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/graberj.wordpress.com/2811/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/graberj.wordpress.com/2811/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/graberj.wordpress.com/2811/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/graberj.wordpress.com/2811/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/graberj.wordpress.com/2811/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/graberj.wordpress.com/2811/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/graberj.wordpress.com/2811/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/graberj.wordpress.com/2811/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/graberj.wordpress.com/2811/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/graberj.wordpress.com/2811/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/graberj.wordpress.com/2811/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/graberj.wordpress.com/2811/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;#038;blog=9035432&amp;#038;post=2811&amp;#038;subd=graberj&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://graberj.wordpress.com/2013/03/10/die-testpyramide/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <media:content url="http://0.gravatar.com/avatar/fd2bd6ebacb744ce20c57a9e4cbb252d?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">graberj</media:title>
      </media:content>
      <media:content url="http://graberj.files.wordpress.com/2013/02/testpyramide.png" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Die Testpyramide</media:title>
      </media:content>
    </item>
    <item p3:etag="W/&quot;D0cGR346eCp7ImA9WhBREEo.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-4682390618605384005</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/BY3tTFa2F9U/soa-vs-dry.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <title>SOA vs. DRY</title>
      <description>&lt;p&gt;In his presentation &lt;a href="https://vimeo.com/53154358"&gt;"Designing For Rapid Release"&lt;/a&gt; (&lt;a href="http://www.slideshare.net/spnewman/designing-for-rapid-release"&gt;slides&lt;/a&gt;) Sam Newman points out an ugly fact that we often try to ignore: &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;DRY&lt;/a&gt; are to a large extent opposed forces.&lt;/p&gt;
&lt;p&gt;Of course this is not a new break-through discovery and I guess it is also nothing new for most battle-proven enterprise developers. But I also have the experience that in most SOA projects this topic is treated like the crazy uncle in the attic: You don't talk about it and you certainly don't plan for it.&lt;/p&gt;
&lt;p&gt;The result is usually a schizophrenic feeling: The architecture postulates nice decoupling, but in reality we end up with the feeling that we are not doing it right: either we are using shared logic in several services which negates idea of decoupling or we have a lot of code duplication.&lt;/p&gt;
&lt;p&gt;In the presentation Sam illustrated this conflict with two services that share a common domain model:&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" title="Screen Shot 2013-02-17 at 4.53.06 PM.png" src="http://lh6.ggpht.com/-AH2GoLwqFcs/US-V4lUMEOI/AAAAAAAABTE/0J0iD6pb3FM/Screen%252520Shot%2525202013-02-17%252520at%2525204.53.06%252520PM.png?imgmax=800" alt="Screen Shot 2013 02 17 at 4 53 06 PM" width="300" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;In the above picture, since service A and service B are both using a common model from a shared library, they get tightly coupled. On the other hand managing the development and releases of the shared library all of a sudden gets much more complicated under the premise that service A and service B should be decoupled.&lt;/p&gt;
&lt;p&gt;He further brings the incompatibility of SOA and DRY to the point with the following quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ending up with tightly bound services because of code-reuse is significantly worse than to copy &amp;amp; paste that code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I like that Sam makes the conflict between SOA and DRY explicit. Not ignoring this fact is the first step to objectively balance the tradeoffs and to honestly plan how to deal with the drawbacks of either approach.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/BY3tTFa2F9U" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 28 Feb 2013 18:37:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/4682390618605384005/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="6 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=4682390618605384005" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/4682390618605384005?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/4682390618605384005?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2013-02-28T19:10:26+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;In his presentation &lt;a href="https://vimeo.com/53154358"&gt;&amp;quot;Designing For Rapid Release&amp;quot;&lt;/a&gt;&amp;nbsp;(&lt;a href="http://www.slideshare.net/spnewman/designing-for-rapid-release"&gt;slides&lt;/a&gt;)&amp;nbsp;Sam Newman points out an ugly fact that we often try to ignore:
&lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;
DRY&lt;/a&gt; are to a large extent opposed forces.&lt;/p&gt;
&lt;p&gt;Of course this is not a new break-through discovery and I guess it is also nothing new for most battle-proven enterprise developers. But I also have the experience that in most SOA projects this topic is treated like the crazy uncle in the attic: You don't
 talk about it and you certainly don't plan for it.&lt;/p&gt;
&lt;p&gt;The result is usually a schizophrenic feeling: The architecture postulates nice decoupling, but in reality we end up with the feeling that we are not doing it right: either we are using shared logic in several services which negates idea of decoupling or
 we have a lot of code duplication.&lt;/p&gt;
&lt;p&gt;In the presentation Sam illustrated this conflict with two services that share a common domain model:&lt;/p&gt;
&lt;p&gt;&lt;img title="Screen Shot 2013-02-17 at 4.53.06 PM.png" src="http://lh6.ggpht.com/-AH2GoLwqFcs/US-V4lUMEOI/AAAAAAAABTE/0J0iD6pb3FM/Screen%252520Shot%2525202013-02-17%252520at%2525204.53.06%252520PM.png?imgmax=800" alt="Screen Shot 2013 02 17 at 4 53 06 PM" width="300" border="0" style="display:block; margin-left:auto; margin-right:auto"&gt;&lt;/p&gt;
&lt;p&gt;In the above picture, since service A and service B are both using a common model from a shared library, they get tightly coupled. On the other hand managing the development and releases of the shared library all of a sudden gets much more complicated under
 the premise that service A and service B should be decoupled.&lt;/p&gt;
&lt;p&gt;He further brings the incompatibility of SOA and DRY to the point with the following quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ending up with tightly bound services because of code-reuse is significantly worse than to copy &amp;amp; paste that code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I like that Sam makes the conflict between SOA and DRY explicit. Not ignoring this fact is the first step to objectively balance the tradeoffs and to honestly plan how to deal with the drawbacks of either approach.&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BY3tTFa2F9U:4V8OQaTSsTM:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BY3tTFa2F9U:4V8OQaTSsTM:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/BY3tTFa2F9U" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-28T19:10:26.010+01:00</app:edited>
      <media:thumbnail url="http://lh6.ggpht.com/-AH2GoLwqFcs/US-V4lUMEOI/AAAAAAAABTE/0J0iD6pb3FM/s72-c/Screen%252520Shot%2525202013-02-17%252520at%2525204.53.06%252520PM.png?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2013/02/soa-vs-dry.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="false">http://graberj.wordpress.com/?p=2815</guid>
      <link>http://graberj.wordpress.com/2013/02/27/tdd-denken-erlaubt/</link>
      <category>dnugBern</category>
      <category>webDotNet</category>
      <category>webRuby</category>
      <category>.Net</category>
      <category>Testing</category>
      <title>TDD: Denken erlaubt</title>
      <description>Test-Driven Development (TDD) gibt auch heutzutage noch viel zu diskutieren. Was mir dabei immer wieder auffällt: Es scheint als ob vor lauter Red-Green-Refactor vergessen geht das man eigentlich Software entwickeln soll. Sobald man sich mit Tests beschäftigt
 vergisst man das grosse Ganze. Oder wieso schreiben gestandene Software-Entwickler einen Test nach dem anderen der ihnen nur […]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;amp;blog=9035432&amp;amp;post=2815&amp;amp;subd=graberj&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Wed, 27 Feb 2013 06:00:38 Z</pubDate>
      <comments>http://graberj.wordpress.com/2013/02/27/tdd-denken-erlaubt/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Johnny Graber</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Test-Driven Development (TDD) gibt auch heutzutage noch viel zu diskutieren. Was mir dabei immer wieder auffällt: Es scheint als ob vor lauter Red-Green-Refactor vergessen geht das man eigentlich Software entwickeln soll. Sobald man sich mit Tests beschäftigt vergisst man das grosse Ganze. Oder wieso schreiben gestandene Software-Entwickler einen Test nach dem anderen der ihnen nur bestätigt das 1 + 1 wirklich 2 ergibt?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Code Katas als Ursache?&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://codekata.pragprog.com/"&gt;Code Katas&lt;/a&gt; sollen einem dabei helfen sich bei einer Übung auf einen bestimmten Aspekt zu konzentrieren. Dieser Aspekt ist oft TDD, doch gibt es genügend andere Aspekte die man in den Vordergrund stellen kann (wie die Bedienung der IDE nur mit der Tastatur oder Patterns wie das &lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;Single Responsibility Principle&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;Will man damit TDD erproben nimmt man in der Regel ein ganz einfaches Beispiel. Man will sich ja nicht lange mit dem Problem beschäftigen sondern TDD lernen. Entsprechend schreibt man viele Tests und denkt wenig über die Lösung nach – diese ist ja durch einfache Beispiele wie &lt;a href="http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz"&gt;FizzBuzz&lt;/a&gt; gewollt. Man trainiert also ständig mit einfachen Beispielen und vielen Tests. Die Videos zu diesen Trainings zeigen entsprechend viele Tests und wenig Gedanken über die Lösung. &lt;/p&gt;
&lt;p&gt;Kurzum: Der Feedback-Loop für den Entwickler zeigt ganz klar dass er TDD erst richtig macht wenn wer viel testet und wenig denkt. Das Problem ist nur das dies komplett falsch ist.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Software-Entwicklung vor TDD&lt;/h2&gt;
&lt;p&gt;Gehen wir einen Schritt zurück. Bevor man mit TDD Software entwickeln wollte machte man in der Regel diese Schritte:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Problem analysieren&lt;/li&gt;
&lt;li&gt;Lösung erarbeiten&lt;/li&gt;
&lt;li&gt;Programmieren&lt;/li&gt;
&lt;li&gt;Testen&lt;/li&gt;
&lt;li&gt;Veröffentlichen&lt;/li&gt;
&lt;li&gt;Bugs fixen&lt;/li&gt;
&lt;li&gt;Veröffentlichen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bei der iterativen Software-Entwicklung folgt man ebenfalls dieser Schrittfolge – einzig der Umfang behandelt nicht mehr das ganze System sondern nur einen Teil.&lt;/p&gt;
&lt;p&gt;Die Idee von TDD war es ursprünglich einmal die Schritte 3 &amp;amp; 4 zu kombinieren. So hoffte man die teure Behebung von Bugs nach der Veröffentlichung zu minimieren. Nie war es das Ziel die Phase der Problemanalyse oder dem Erarbeiten der Lösung zu streichen. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Babysteps ins Chaos&lt;/h2&gt;
&lt;p&gt;Die Analyse der Problemstellung und das erarbeiten der Lösung ging irgendwo bei der Einarbeitung in TDD verloren. Irgendwann sollten Babysteps (wie 1+1 = 2) die Verständnislücken der Problemstellung füllen und die Lösung herausfallen. Nur wo passiert dies? Viel eher stehen all die minimalen Tests nur im Weg und erschweren die Weiterentwicklung der Software. Alleine mit Babysteps lösen wir das Problem nicht.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Schrittgrösse variieren&lt;/h2&gt;
&lt;p&gt;Wie aber geht man &amp;#8220;richtig&amp;#8221; vor? Kent Beck zeigt in &amp;#8220;&lt;a href="https://graberj.wordpress.com/2010/05/09/buch-rezension-zu-test-driven-development/"&gt;TDD By Example&lt;/a&gt;&amp;#8221; wie man erst das Problem analysieren soll, eine Liste mit Testfällen (und noch anzugehenden Problemen) führt und vor allem wie man die Schrittgrösse variieren kann.&lt;/p&gt;
&lt;p&gt;Das Red-Green-Refactor soll man beibehalten. Aber wenn man weiss wo hin man will und welche Lösung man verfolgt kann man grössere Schritte machen. Wie gross diese Schritte sind hängt vom konkreten Problem, der Vertrautheit mit der Technologie und dem angepeilten Lösungsweg ab. &lt;/p&gt;
&lt;p&gt;Für den Lösungsweg greife ich oft auf Flussdiagramme zurück. So altmodisch die auch sein mögen, für eine grobe Skizzierung der Abläufe finde ich diese Art der Darstellung sehr hilfreich. Auch in der objektorientierten Programmierung gibt es unzählige Teilaufgaben die mit einem Flussdiagramm ideal abgebildet werden können. &lt;/p&gt;
&lt;p&gt;Mit wenigen Worten pro Tätigkeit kann ich die einzelnen Kernaufgaben herausarbeiten. Ich sehe so auf einen Blick was alles zur Lösung dazu gehört und was es für Abhängigkeiten gibt. Passende Testfälle (und damit die Schrittgrösse) lassen sich so ebenfalls finden. Beim Programmieren tauchen dann immer noch genügend neue Testfälle auf. Diese können aber auch erst einmal nur auf eine Liste abgelegt und erst später priorisiert (oder gelöscht) werden.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Beispiele&lt;/h2&gt;
&lt;p&gt;Für das was ich bisher beschrieben habe gibt es zahlreiche gute Beispiele. Besonders empfehlen kann ich den Pluralsight-Kurs &amp;#8220;&lt;a href="http://pluralsight.com/training/Courses/TableOfContents/outside-in-tdd"&gt;Outside-In Test-Driven Development&lt;/a&gt;&amp;#8221; von Mark Seemann. Darin wird erklärt wie man mit TDD bei den Akzeptanztests beginnt und schrittweise verfeinert bis der notwendige Code geschrieben ist. Beginnt man mit den Akzeptanztests verliert man das eigentliche Ziel nicht aus den Augen. Das Mantra Red-Green-Refactor bleibt gültig ohne dass man sich in den Babysteps verliert. Und sind diese kleinen Schritte doch nötig hat man ein Rahmenwerk das einem daran erinnert wann genug ist.&lt;/p&gt;
&lt;p&gt;Wer Bücher bevorzugt findet in &amp;#8220;&lt;a href="http://www.manning.com/bigg2/"&gt;Rails 4 in Action&lt;/a&gt;&amp;#8221; von Ryan Bigg eine ausführliche Anleitung um testgetrieben eine Webanwendung zu erstellen. Hier wird noch mehr Wert auf die praktische Implementierung von TDD gelegt und gezeigt wie man mit unterschiedlichen Testebenen zu einer Lösung kommt.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Fazit&lt;/h2&gt;
&lt;p&gt;Nur weil man TDD macht muss man noch lange nicht aufhören selber zu denken. Eine Analyse der Lösung und ein grober Lösungsweg braucht es noch immer bevor man sich dem programmieren zuwendet. Verzichtet man auf diese grundlegenden Dinge schiebt man nur Code herum. Dies ist nicht nur ineffizient sondern auch teuer – sowohl beim erstmaligen schreiben wie auch bei all den kommenden Änderungen.&lt;/p&gt;
&lt;p&gt;Daher unbedingt erst einmal abklären was man eigentlich machen will. Ist das &amp;#8220;Was&amp;#8221; klar geht es ans &amp;#8220;Wie&amp;#8221;. Ob man dazu ein Flussdiagramm oder eine sonstige Skizze macht spielt keine Rolle – wichtig ist das man sich überlegt wie man vorgehen will. TDD und Red-Green-Refactor können viel besser, klarer und sinnvoller angewendet werden wenn man diese Vorarbeiten macht. &lt;/p&gt;
&lt;br /&gt;Einsortiert unter:&lt;a href='http://graberj.wordpress.com/category/dnugbern/'&gt;dnugBern&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webdotnet/'&gt;webDotNet&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/category/webruby/'&gt;webRuby&lt;/a&gt; Tagged: &lt;a href='http://graberj.wordpress.com/tag/net/'&gt;.Net&lt;/a&gt;, &lt;a href='http://graberj.wordpress.com/tag/testing/'&gt;Testing&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/graberj.wordpress.com/2815/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/graberj.wordpress.com/2815/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/graberj.wordpress.com/2815/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/graberj.wordpress.com/2815/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/graberj.wordpress.com/2815/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/graberj.wordpress.com/2815/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/graberj.wordpress.com/2815/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/graberj.wordpress.com/2815/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/graberj.wordpress.com/2815/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/graberj.wordpress.com/2815/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/graberj.wordpress.com/2815/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/graberj.wordpress.com/2815/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/graberj.wordpress.com/2815/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/graberj.wordpress.com/2815/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=graberj.wordpress.com&amp;#038;blog=9035432&amp;#038;post=2815&amp;#038;subd=graberj&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://graberj.wordpress.com/2013/02/27/tdd-denken-erlaubt/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments>
      <media:content url="http://0.gravatar.com/avatar/fd2bd6ebacb744ce20c57a9e4cbb252d?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">graberj</media:title>
      </media:content>
    </item>
    <item p3:etag="W/&quot;DkcDRHw4eCp7ImA9WhBbEk8.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-929238798493444395</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/o8y5i-wQL90/quotes-of-week-developer-testing.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">quote</category>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <title>Quotes of the Week: Developer Testing</title>
      <description>&lt;div style="max-width: 90%px;"&gt;&lt;img style="margin: 0px 0px 10px 10px;" src="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/quotes2.jpg?imgmax=800" alt="quotes2.jpg" width="120" align="right" border="0" /&gt; &lt;div style="max-width: 70%;"&gt;&lt;blockquote&gt;Nothing makes a system more flexible than a comprehensive suite of tests! Far above good architecture and good design!&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- Robert C. Martin, &lt;br /&gt;
Oredev 2008 Keynote&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="max-width: 400px;"&gt; &lt;/div&gt;&lt;div style="max-width: 90%;"&gt;&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;We have as many testers as we have developers. And testers spend all their time testing, and developers spend half their time testing. We're more of a testing, a quality software organization than we're a software organization&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.informationweek.com/qa-bill-gates-on-trustworthy-computing/6502378"&gt;Bill Gates, Trustworthy Computing&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;TDD is a discipline for programmers like double-entry bookkeeping is for accountants or sterile procedure is for surgeons..&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://blog.8thlight.com/uncle-bob/2013/03/06/ThePragmaticsOfTDD.html"&gt;Uncle Bob,  The Pragmatics of TDD&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;Tests should be made a first-class citizen and treated like any other feature.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;TDD, BDD and other high-ceremony techniques are not recommended for startups! Code is not important in the beginning!&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://blog.obiefernandez.com/content/2011/05/the-dark-side-beckons.html"&gt;Obie Fernandez, The Dark Side Beckons&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;I see TDD as a valuable and important development technique, but there are contexts in which it shines and others in which it is a hindrance.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://dannorth.net/the-art-of-misdirection/"&gt;Dan North, The Art of Misdirection&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;Insisting on unit tests won't make those unit tests valuable.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/153565#153565"&gt;Kent Beck, Stackoverflow&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;If I don’t typically make a kind of mistake, I don’t test for it.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://37signals.com/svn/posts/3159-testing-like-the-tsa"&gt;David Heinemeier Hansson, Testing like the TSA&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;Testing is overrated!&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.infoq.com/presentations/francl-testing-overrated"&gt;Luke Franci, Rail Spikes&lt;/a&gt; &lt;/div&gt;&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;A survey of all the studies on TDD has shown that the better the study done, the weaker the signals to its benefit.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="https://leanpub.com/leprechauns"&gt;The Leprechauns of Software Engineering&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;p&gt;Thinking you can improve quality by doing more testing is like thinking you can loose weight by weighing you more. […] If you want to improve your software, don't test more; develop better.&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- Steve McConnell, Code Complete&lt;br /&gt;
&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;You cannot inspect quality into a product. The quality is there or it isn't by the time it's inspected.&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://en.wikiquote.org/wiki/W._Edwards_Deming"&gt;W. Edwards Deming, Out Of The Crisis&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt; &lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Much of the essence of building a program is in fact the debugging of the specification.&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://en.wikiquote.org/wiki/Fred_Brooks"&gt;Fred Brooks, No Silver Bullet &lt;/a&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div style="clear: right; font-size: 10px;"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img style="border-style: none; margin: 0px;" src="http://www.google.com/s2/favicons?domain=twitter.com" alt="http://www.google.com/s2/favicons?domain=twitter.com" height="13px" align="left" border="0" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/o8y5i-wQL90" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 15 Feb 2013 22:35:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/929238798493444395/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="1 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=929238798493444395" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/929238798493444395?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/929238798493444395?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2013-05-11T00:14:35+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;div style=""&gt;&lt;img src="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/quotes2.jpg?imgmax=800" alt="quotes2.jpg" width="120" align="right" border="0" style="margin:0px 0px 10px 10px"&gt;
&lt;div style="max-width:70%"&gt;
&lt;blockquote&gt;Nothing makes a system more flexible than a comprehensive suite of tests! Far above good architecture and good design!&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;Robert C. Martin, &lt;br&gt;
Oredev 2008 Keynote&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="max-width:400px"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="max-width:90%"&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;We have as many testers as we have developers. And testers spend all their time testing, and developers spend half their time testing. We're more of a testing, a quality software organization than we're a software organization&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://www.informationweek.com/qa-bill-gates-on-trustworthy-computing/6502378"&gt;Bill Gates, Trustworthy Computing&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;TDD is a discipline for programmers like double-entry bookkeeping is for accountants or sterile procedure is for surgeons..&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://blog.8thlight.com/uncle-bob/2013/03/06/ThePragmaticsOfTDD.html"&gt;Uncle Bob, &amp;nbsp;The Pragmatics of TDD&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;Tests should be made a first-class citizen and treated like any other feature.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;blockquote&gt;TDD, BDD and other high-ceremony techniques are not recommended for startups! Code is not important in the beginning!&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://blog.obiefernandez.com/content/2011/05/the-dark-side-beckons.html"&gt;Obie Fernandez, The Dark Side Beckons&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;I see TDD as a valuable and important development technique, but there are contexts in which it shines and others in which it is a hindrance.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://dannorth.net/the-art-of-misdirection/"&gt;Dan North, The Art of Misdirection&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;Insisting on unit tests won't make those unit tests valuable.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027"&gt;How Google Tests Software&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/153565#153565"&gt;Kent Beck, Stackoverflow&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;If I don’t typically make a kind of mistake, I don’t test for it.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://37signals.com/svn/posts/3159-testing-like-the-tsa"&gt;David Heinemeier Hansson, Testing like the TSA&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;Testing is overrated!&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://www.infoq.com/presentations/francl-testing-overrated"&gt;Luke Franci, Rail Spikes&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;br&gt;
&lt;blockquote&gt;A survey of all the studies on TDD has shown that the better the study done, the weaker the signals to its benefit.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="https://leanpub.com/leprechauns"&gt;The Leprechauns of Software Engineering&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;
&lt;p&gt;Thinking you can improve quality by doing more testing is like thinking you can loose weight by weighing you more. […] If you want to improve your software, don't test more; develop better.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;Steve McConnell, Code Complete&lt;br&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;You cannot inspect quality into a product. The quality is there or it isn't by the time it's inspected.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://en.wikiquote.org/wiki/W._Edwards_Deming"&gt;W. Edwards Deming, Out Of The Crisis&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align:right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Much of the essence of building a program is in fact the debugging of the specification.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://en.wikiquote.org/wiki/Fred_Brooks"&gt;Fred Brooks, No Silver Bullet&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img src="http://www.google.com/s2/favicons?domain=twitter.com" alt="http://www.google.com/s2/favicons?domain=twitter.com" height="13px" align="left" border="0" style="border-style:none; margin:0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=o8y5i-wQL90:uOzGpoDGk6g:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=o8y5i-wQL90:uOzGpoDGk6g:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/o8y5i-wQL90" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-11T00:14:35.230+02:00</app:edited>
      <media:thumbnail url="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/s72-c/quotes2.jpg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2013/02/quotes-of-week-developer-testing.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634950792000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634950792000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634950792000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Einführung in NServiceBus mit Daniel Marbach</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 29.&amp;nbsp;Januar 2013 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Einführung in NServiceBus mit Daniel Marbach&lt;/h3&gt;
&lt;p&gt;Nachdem Du&amp;nbsp; gut ins neue Jahr gestartet bist und Deine Vorsätze definiert hast, wollen wir unser erstes Treffen im neuen Jahr mit dem Thema &amp;quot;Einführung in NServiceBus&amp;quot; starten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Begriffe wie Messaging, Skalierbarkeit und Cloud Computing sind in aller Munde. Wo soll man da überhaupt starten ohne den Überblick zu verlieren? Gemeinsam machen wir einen Schritt zurück und schauen uns den Open Source Service Bus NServiceBus etwas genauer
 an. &lt;/p&gt;
&lt;p&gt;Daniel wird Licht ins Dunkel bringen und Begriffe wie Service Bus, Command, Event, Publish / Subscribe, sowie Langlebende Businessworkflows (aka Sagas) klären. Daniel wird weiter in die Tiefen von NServiceBus steigen, damit Du in der Lage bist, verteilte
 Applikationen basierend auf NServiceBus zu betreiben. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Über Daniel Marbach&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Daniel Marbach ist ein enthusiastischer Senior Software Engineer bei der bbv Software Services AG in Luzern. Seine Erfahrung reicht über Mobile Applikationsentwicklung bis zu Client und Server Entwicklung mit einer starken Tendenz zu Verteilten Systemen.
 Daniel hat ein Abschluss als Dipl. Inf. Ing. FH von der Fachhochschule für Technik und Architektur in Horw.
&lt;/p&gt;
&lt;p&gt;Zudem liegen seine Stärken in Agilen Entwicklungsmethodiken wie Continuous Integration und Test Driven Development. Er ist ein regelmässiger Sprecher, Coach und passionierter Blogschreiber auf planetgeek.ch. Als Co-Gründer der .NET Usergroup Zentralschweiz
 ist Daniel auf einer immerwährenden Reise als Software Entwickler mit Überzeugung und Engagement.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/einfuhrung-nservicebus-daniel-marbach-1180518" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser &lt;a href="http://dnug-bern.ch/contact.aspx"&gt;
Kontaktformular&lt;/a&gt; nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbensb&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Tue, 29 Jan 2013 18:00:00 +0100</pubDate>
    </item>
    <item p3:etag="W/&quot;AkcBRn85fip7ImA9WhNVFUk.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-560560190912772545</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/0wY9kngs-TM/the-boundaries-are-blurring.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">technology</category>
      <category domain="http://www.blogger.com/atom/ns#">object-relational mapping</category>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <title>The boundaries are blurring</title>
      <description>&lt;p&gt;&lt;img style="float: right;" title="" src="http://lh4.ggpht.com/-IIH1PQ1PQcY/UNs_Jv_GCGI/AAAAAAAABSE/1RDExXuezTY/1981759130-caster-semenya-zwitter-leichtathletik.9.jpg?imgmax=800" alt="1981759130 caster semenya zwitter leichtathletik 9" width="200" border="0" /&gt;It's interesting to watch how the recent trend to mobile and browser applications is changing the traditional understanding of client-server separation and how the traditional territories of some technologies are blurring.&lt;/p&gt;
&lt;p&gt;Two recent examples in the field of persistence technologies illustrate this blurring of boundaries quite well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rack::CoreData&lt;br /&gt;&lt;/strong&gt;With the &lt;a href="https://github.com/mattt/rack-core-data"&gt;Rack::CoreData&lt;/a&gt; library &lt;a href="https://devcenter.heroku.com/articles/ios-core-data-buildpack-app"&gt;you define a&lt;/a&gt;&lt;a href="https://devcenter.heroku.com/articles/ios-core-data-buildpack-app"&gt; client-server interface (REST API) and server backend with a OSX/iOS CoreData Model&lt;/a&gt;.&lt;br /&gt;While &lt;a href="http://en.wikipedia.org/wiki/Core_Data"&gt;CoreData&lt;/a&gt; has its root in the enterprise space, today it is primarily a client-side technology. I guess that in its current form it was never intended for anything else than persistence on client side and the only reason for it's transition to the server side is its wide usage due to the success of iOS. &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JBoss Errai&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.jboss.org/errai"&gt;JBoss Errai&lt;/a&gt; represents the opposite trend compared to Rack::CoreData: &lt;a href="http://docs.jboss.org/errai/2.1.1.Final/errai/reference/html_single/#sid-54493688"&gt;It takes JPA into the browser&lt;/a&gt;! JPA is traditionally a server-side (or at least server-interfacing) technology. I am pretty sure that it was not intended as a browser technology. But with the rise of HTML5 and browser-side persistence there is the pressure to take that programming model to the web client.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It seems that the triumph of mobile apps and rich internet applications has quite a disruptive effect on the traditional server-side technologies and frameworks. &lt;br /&gt;
I am wondering where this will lead? Both of the above examples do not feel quite right in my opinion… but hey, maybe we will get JPA support in HTML6 or Oracle will include direct CoreData support in the future ...&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/0wY9kngs-TM" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 26 Dec 2012 19:17:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/560560190912772545/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=560560190912772545" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/560560190912772545?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/560560190912772545?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-12-26T19:54:17+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;&lt;img title="" src="http://lh4.ggpht.com/-IIH1PQ1PQcY/UNs_Jv_GCGI/AAAAAAAABSE/1RDExXuezTY/1981759130-caster-semenya-zwitter-leichtathletik.9.jpg?imgmax=800" alt="1981759130 caster semenya zwitter leichtathletik 9" width="200" border="0" style="float:right"&gt;It's
 interesting to watch how the recent trend to mobile and browser applications is changing the traditional understanding of client-server separation and how the traditional territories of some technologies are blurring.&lt;/p&gt;
&lt;p&gt;Two recent examples in the field of persistence technologies illustrate this blurring of boundaries quite well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rack::CoreData&lt;br&gt;
&lt;/strong&gt;With the &lt;a href="https://github.com/mattt/rack-core-data"&gt;Rack::CoreData&lt;/a&gt; library
&lt;a href="https://devcenter.heroku.com/articles/ios-core-data-buildpack-app"&gt;you define a&lt;/a&gt;&lt;a href="https://devcenter.heroku.com/articles/ios-core-data-buildpack-app"&gt;&amp;nbsp;client-server interface (REST API) and server backend with a OSX/iOS CoreData Model&lt;/a&gt;.&lt;br&gt;
While &lt;a href="http://en.wikipedia.org/wiki/Core_Data"&gt;CoreData&lt;/a&gt; has its root in the enterprise space, today it is primarily a client-side technology. I guess that in its current form it was never intended for anything else than persistence on client side
 and the only reason for it's transition to the server side is its wide usage due to the success of iOS.&amp;nbsp;
&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JBoss Errai&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://www.jboss.org/errai"&gt;JBoss Errai&lt;/a&gt; represents the opposite trend compared to Rack::CoreData:
&lt;a href="http://docs.jboss.org/errai/2.1.1.Final/errai/reference/html_single/#sid-54493688"&gt;
It takes JPA into the browser&lt;/a&gt;! JPA is traditionally a server-side (or at least server-interfacing) technology. I am pretty sure that it was not intended as a browser technology. But with the rise of HTML5 and browser-side persistence there is the pressure
 to take that programming model to the web client. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;It seems that the triumph of mobile apps and rich internet applications has quite a disruptive effect on the traditional server-side&amp;nbsp;technologies and frameworks.
&lt;br&gt;
I am wondering where this will lead? Both of the above examples do not feel quite right in my opinion… but hey, maybe we will get JPA support in HTML6 or Oracle will include direct CoreData support in the future ...&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=0wY9kngs-TM:vjPzcAb-IAg:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=0wY9kngs-TM:vjPzcAb-IAg:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/0wY9kngs-TM" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-26T19:54:17.126+01:00</app:edited>
      <media:thumbnail url="http://lh4.ggpht.com/-IIH1PQ1PQcY/UNs_Jv_GCGI/AAAAAAAABSE/1RDExXuezTY/s72-c/1981759130-caster-semenya-zwitter-leichtathletik.9.jpg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/12/the-boundaries-are-blurring.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;DEABR3w6cSp7ImA9WhNWFUU.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-3260654053425732298</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/ePwd5U4MW28/presentation-vertx-asynchrones-event.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">java</category>
      <category domain="http://www.blogger.com/atom/ns#">presentation</category>
      <title>Presentation: vert.x - asynchrones event-driven web-applications on the JVM</title>
      <description>&lt;p&gt;This week I was &lt;a href="http://blog.jonasbandi.net/2012/01/presentation-can-javascript-be-elegant.html"&gt;invented again&lt;/a&gt; to speak at the &lt;a href="http://www.sbb.ch/sbb-konzern.html"&gt;SBB&lt;/a&gt; Developer Day 2012.&lt;/p&gt;
&lt;p&gt;My presentation was about &lt;a href="http://vertx.io/"&gt;vert.x&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/15643181" style="border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px;" width="427" height="356" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt; &lt;/iframe&gt;&lt;/p&gt;
&lt;div style="margin-bottom: 5px;"&gt;&lt;strong&gt; &lt;a title="vert.x - asynchronous event-driven web applications on the JVM" href="http://www.slideshare.net/jbandi/vertx-asynchronous-eventdriven-web-applications-on-the-jvm" target="_blank"&gt;vert.x - asynchronous event-driven web applications on the JVM&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/jbandi" target="_blank"&gt;jbandi&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/marcbaechinger/status/278486536020955136"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" title="SBB2012.jpg" src="http://lh4.ggpht.com/-R5qcTm2vQXU/UMycr-iQQOI/AAAAAAAABRg/6tX1ku7o1dg/SBB2012.jpg?imgmax=800" alt="SBB2012" width="400" height="239" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18px;"&gt;I enjoyed the event very much, and I hope to be invited again next time.&lt;/span&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/ePwd5U4MW28" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 14 Dec 2012 22:56:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/3260654053425732298/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=3260654053425732298" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/3260654053425732298?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/3260654053425732298?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-12-15T16:52:36+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;This week I was &lt;a href="http://blog.jonasbandi.net/2012/01/presentation-can-javascript-be-elegant.html"&gt;
invented again&lt;/a&gt; to speak at the &lt;a href="http://www.sbb.ch/sbb-konzern.html"&gt;SBB&lt;/a&gt; Developer Day 2012.&lt;/p&gt;
&lt;p&gt;My presentation was about &lt;a href="http://vertx.io/"&gt;vert.x&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="margin-bottom:5px"&gt;&lt;strong&gt;&lt;a title="vert.x - asynchronous event-driven web applications on the JVM" href="http://www.slideshare.net/jbandi/vertx-asynchronous-eventdriven-web-applications-on-the-jvm" target="_blank"&gt;vert.x - asynchronous event-driven
 web applications on the JVM&lt;/a&gt; &lt;/strong&gt;from &lt;strong&gt;&lt;a href="http://www.slideshare.net/jbandi" target="_blank"&gt;jbandi&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/marcbaechinger/status/278486536020955136"&gt;&lt;img title="SBB2012.jpg" src="http://lh4.ggpht.com/-R5qcTm2vQXU/UMycr-iQQOI/AAAAAAAABRg/6tX1ku7o1dg/SBB2012.jpg?imgmax=800" alt="SBB2012" width="400" height="239" border="0" style="display:block; margin-left:auto; margin-right:auto"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:'Trebuchet MS',Trebuchet,Verdana,sans-serif; font-size:13px; line-height:18px"&gt;I enjoyed the event very much, and I hope to be invited again next time.&lt;/span&gt;&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=ePwd5U4MW28:KUsv_mFiNDw:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=ePwd5U4MW28:KUsv_mFiNDw:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/ePwd5U4MW28" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-15T16:52:36.219+01:00</app:edited>
      <media:thumbnail url="http://lh4.ggpht.com/-R5qcTm2vQXU/UMycr-iQQOI/AAAAAAAABRg/6tX1ku7o1dg/s72-c/SBB2012.jpg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/12/presentation-vertx-asynchrones-event.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634903776000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634903776000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634903776000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>.NETworking Workshop Specification By Example</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Donnerstag, 6.&amp;nbsp;Dezember 2012 (9:00 bis 15:30 Uhr)&lt;/h2&gt;
&lt;h3&gt;.NETworking Workshop Specification By Example&lt;/h3&gt;
&lt;p class="x_MsoNormal"&gt;&lt;strong&gt;&lt;span lang="DE-AT"&gt;Die .NET User Group Bern startet Ihren ersten Workshop mit den Themen Specification-By-Example und agiler Softwarearchitektur auf dem Gurten.
&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;span lang="DE-AT"&gt;Gemeinsam mit Christian Hassa und Urs Enzler möchten wir in die Themen effizientes Anforderungsmanagment und Softwarearchitekturen eintauchen. Starten wir zuerst mit der Agenda:&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;08:45 - 09:00 Uhr Begrüssung mit Kaffee und Gipfeli&lt;br&gt;
09:00 - 13:00 Uhr&amp;nbsp;&lt;/span&gt;&lt;span lang="DE-AT"&gt;Specification-By-Example: User Stories alleine sind nicht genug!&lt;br&gt;
&lt;/span&gt;10:30 - 11:00 Uhr Kaffeepause im Tapis Rouge&lt;br&gt;
&lt;span lang="DE-AT"&gt;11:00 - 13:00 Uhr&amp;nbsp;&lt;/span&gt;&lt;span lang="DE-AT"&gt;Specification-By-Example: User Stories alleine sind nicht genug!&lt;br&gt;
&lt;/span&gt;13:00 - 14:00 Uhr Business Lunch im Bel Etage&lt;br&gt;
14:00 - 15:30 Uhr Von der User Story zur Architektur &amp;nbsp;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Zu den Zielgruppen dieses Workshops gehören Business Analysten, Projektleiter, Entwickler, Tester und alle die sich für den gesamten Softwarezyklus interessieren. Der Workshop enthält interaktive Komponenten, sodass
 die Zusammenarbeit zwischen den Rollen auch geübt werden kann ;)&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;strong&gt;&lt;span lang="DE-AT"&gt;Abstract&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;strong&gt;&lt;span lang="DE-AT"&gt;Specification-By-Example: User Stories alleine sind nicht genug!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;User Stories sind ein zentraler Bestandteil &amp;nbsp;für effizientes Anforderungsmanagement in agilen Projekten. Sie dienen zur Planung, aber auch als Erinnerung an eine detaillierte Besprechung der Anforderung kurz vor der
 Umsetzung. Diese Verzögerung der Spezifikation von Details bis zum „letztmöglich verantwortlichen Moment“ hilft sowohl bei der Konsistenz als auch bei der Berücksichtigung neuer Erkenntnisse im Rahmen des Projekts.&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Doch wann und wie sollen Spezifikationsdetails letztendlich in agilen Projekten festgelegt werden, und wie bleiben diese nachvollziehbar dokumentiert?&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Specification-By-Example ist eine agile Spezifikationstechnik, bei der Akzeptanzkriterien von User&amp;nbsp; Stories durch Beispiele illustriert werden. Diese bilden in weiterer Folge auch die Basis für fachlich lesbare, automatisierte
 Akzeptanztests, die als immer aktuelle „lebende Dokumentation“ des Systems dienen.&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Dieser Workshop bietet einen praktischen Einstieg in Specification-By-Example. Es werden Akzeptanzkriterien von User Stories zu Beispielen im Gherkin Format ausgearbeitet, welche dann mit Werkzeugen wie Cucumber oder
 SpecFlow automatisiert werden können. Ebenso werden Spezifikationen aus verschiedenen Projekten betrachtet und diskutiert.&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;strong&gt;&lt;span lang="DE-AT"&gt;Biographie Christian Hassa&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Christian Hassa ist seit über 20 Jahren in der IT tätig. Als Geschäftsführer bei TechTalk verantwortet er dort sowohl technologische als auch methodische Ausrichtung. Sein langjähriges Spezialgebiet ist die Anforderungsanalyse
 und seit längerer Zeit deren Verknüpfung mit agilen Prinzipien und Scrum. Aktueller Schwerpunkt ist der Aufbau von &amp;quot;lebender Dokumentation&amp;quot; für Softwaresysteme auf Basis von fachlich lesbarer Testautomatisierung. In diesem Zusammenhang beschäftigt er sich
 auch intensiv mit Specification-By-Example und ist Mitinitiator des Open Source Werkzeugs SpecFlow.&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Die TechTalk Software AG unterstützt Unternehmen bei der professionellen Softwareentwicklung nach agilen Prinzipien. Mehr als 60 Mitarbeiter bieten Coaching und Umsetzung an den Standorten Zürich, Wien und Budapest.&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;strong&gt;&lt;span lang="DE-AT"&gt;Von der User Story zur Architektur&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;Wenn Teams neu mit agiler Softwareentwicklung starten, kämpfen diese oft mit der Einbettung der Architektur in die inkrementelle und iterativen Vorgehensweise. Unklare und sich häufig ändernde Anforderungen stellen neue Ansprüche an die
 Erstellung der Architektur. Das Resultat ist meist ein inkonsistentes und schlecht wartbares Software System.&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;Urs Enzler zeigt Ihnen wie Sie die Architektur Feature für Feature entstehen lassen und welche Vorteile Sie gegenüber einem Big-Design-Up-Front Vorgehen erhalten.&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;strong&gt;Biographie Urs Enzler&lt;/strong&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;Dipl. Inf. Ing. ETH, Certified Scrum Master, Senior Software Architect, bbv Software Services AG&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;Urs Enzler hat an der ETH Zürich Informatik studiert. Er ist Software Architekt und Consultant bei bbv Software Services AG. Seine Schwerpunkte liegen in der agilen Softwareentwicklung (Scrum, Kanban) und Test Driven Development (TDD/ATDD).&lt;/p&gt;
&lt;span lang="DE-AT"&gt;&lt;/span&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;&lt;strong&gt;Veranstaltungsort und Anfahrt&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Unser Workshop findet auf dem &lt;a href="http://www.gurtenpark.ch/" target="_blank"&gt;
Gurten&lt;/a&gt; statt. Die Gurtenbahn fährt im 15 Minuten-Takt. Der Fahrplan&amp;nbsp;ist &lt;a href="http://www.gurtenbahn.ch/index/gurtenbahn/guba_fahrplan.htm"&gt;
hier&lt;/a&gt;.&amp;nbsp;Wir empfehlen&amp;nbsp;Dir die Anreise mit den öffentlichen Verkehrsmitteln.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Die Anmeldung erfolgt auf Eventbrite unter
&lt;a href="http://dnugbe.eventbrite.com"&gt;http://dnugbe.eventbrite.com&lt;/a&gt;.&amp;nbsp;Mit dem Ticketpreis werden die Verpflegungskosten gedeckt.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Wir freuen uns auf Deine Teilnahme&lt;/span&gt;&lt;/p&gt;
&lt;p class="x_MsoNormal"&gt;&lt;span lang="DE-AT"&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/span&gt;&lt;/p&gt;
</description>
      <pubDate>Thu, 06 Dec 2012 08:00:00 +0100</pubDate>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634897224000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634897224000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634897224000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>RESTful Services mit Jacob Reimers</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Mittwoch, 28. November 2012 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;RESTful Services&amp;nbsp;mit Jacob Reimers&lt;/h3&gt;
&lt;p&gt;Etwas verspätet aber noch immer mit ausreichend Zeit für eine Anmeldung wollen wir uns mit RESTful Services auseinandersetzen. Jacob Reimers wird die Thematik aufgreifen und uns die grundlegenden Konzepte aufzeigen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RESTful Services with Jacob Reimers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Many websites claim to be RESTful when they use a pretty URL structure. ASP.NET MVC makes it very easy to set up a website with pretty URLs and return web pages or JSON. But REST is more than simply keeping your site structure clean and returning JSON.
&lt;/p&gt;
&lt;p&gt;This session will go through some changes that makes it possible for a an ASP.NET MVC site to make it observe RESTful principles making it accessible both as web site and a web service. The changes will tie into a sample for writing LINQ queries directly
 to a RESTful service. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About Jacob Reimers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I work as a senior software architect building distributed systems. Before coming to Switzerland I have worked in Copenhagen and Dublin where I worked with WPF to manage real time trading data for the financial sector, as well as developing real time web
 applications across multiple devices and custom controls from the days of ASP, over ASP.NET and now ASP.NET MVC, on both the desktop and the phone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/restful-services-with-jacob-reimers-1168588?sc_o=as_e" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser &lt;a href="http://dnug-bern.ch/contact.aspx"&gt;
Kontaktformular&lt;/a&gt; nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugberest&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Wed, 28 Nov 2012 18:00:00 +0100</pubDate>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634880484000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634880484000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634880484000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>WOWZAPP 2012 - Wo​rld Wide Hackathon f​or Windows​ in Bern</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Freitag, 9.&amp;nbsp;November 2012 (9:00 bis 15:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;WOWZAPP 2012 - Wo​rld Wide Hackathon f​or Windows​ in Bern&lt;/h3&gt;
&lt;p&gt;In Zusammenarbeit mit Microsoft Schweiz, der .NET Usergroup Bern und der .NET Usergroup Zentralschweiz möchten wir Dir ein interessantes Event ans Herzen legen.
&lt;/p&gt;
&lt;p&gt;Am Freitag dem 9. November findet der WOWZAP 2012 in Bern statt. Hierbei handelt es sich um einen von Microsoft Weltweit durchgeführten Hackathon. Du bekommst die Gelegenheit den Umgang mit Windows 8 Apps zu entdecken und lernst gleichzeitig auch noch nette
 Leute kennen. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interesse&lt;/strong&gt;? Dann melde Dich auf EventBrite für Bern hier an: &lt;a href="http://wowzapp2012bernswitzerland.eventbrite.com/?ebtv=C" target="_blank"&gt;
wowzapp 2012 Bern&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Veranstaltungsort und Anreise&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Der Veranstaltungsort ist das &lt;a href="http://www.hotelador.ch/" target="_blank"&gt;
Sorell Hotel Ador&lt;/a&gt;. Den Anfahrtsweg findest Du &lt;a href="http://www.hotelador.ch/de/anreise.asp"&gt;
hier&lt;/a&gt;. Wir empfehlen Dir die Anreise mit den öffentlichen Verkehrsmitteln.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Am Wochenende weitermachen?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wenn Du das Wochenende durchprogrammieren willst, kannst Du die Gelegenheit nutzen und Dich für den 10. und 11. November hier anmelden:
&lt;a href="http://wowzapp2012wallisellenzurich.eventbrite.com/?ebtv=C"&gt;wowzapp 2012 Zürich-Wallisellen&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für die Berner&amp;nbsp;Veranstaltung: &lt;strong&gt;#wowzappbe&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;.NET User Group Bern&lt;br&gt;
Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
&lt;p&gt;.NET User Group Zentralschweiz&lt;br&gt;
Urs Enzler und Daniel Marbach&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Fri, 09 Nov 2012 09:00:00 +0100</pubDate>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634873032000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634873032000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634873032000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Ruby und Rails für .Net Entwickler mit Johnny Graber</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Mittwoch, 31.&amp;nbsp;Oktober 2012 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Ruby und Rails für .Net Entwickler&amp;nbsp;mit&amp;nbsp;Johnny Graber&lt;/h3&gt;
&lt;p&gt;Nach Windows 8 beschäftigen wir uns mit einer Sprache, von der auch .NET mächtig profitiert hat. Mehr dazu im Abstract:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ruby und Rails für .Net Entwickler mit Johnny Graber&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ob ASP.net MVC, NuGet oder die codebasierten Migrationen bei EF – immer mehr Konzepte und Ideen schwappen von Ruby in die .Net Welt. Wieso aber gerade von Ruby? Und was macht Rails so beliebt bei Webentwicklern?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ruby ist wie C# eine objektorientierte Programmiersprache. Damit enden die Gemeinsamkeiten aber schon fast. Die vielen fremden Konzepte und Ansätze machen einen Einstieg in Ruby und Rails nicht gerade einfach. Aber genau in diesen Unterschieden liegen die
 Stärken und machen Ruby so interessant. &lt;/p&gt;
&lt;p&gt;Dieser Vortrag gibt einen Überblick über Ruby und Rails und hilft einem sich in dieser ungewohnten Umgebung zu Recht zu finden.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Über Johnny Graber&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Johnny Graber entwickelt seit Jahren Desktop- und Webanwendungen in .Net. Durch die Herausforderungen in Kundenprojekten hatte er die Gelegenheit das .Net Framework eingehen kennen zu lernen und sich entsprechen zertifizieren zu lassen (MCPD für Desktop
 und Web-Entwicklung). Seit rund einem Jahr beschäftigt er sich auch mit Ruby und Rails.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/ruby-rails-net-entwickler-johnny-graber-1146836" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser &lt;a href="http://dnug-bern.ch/contact.aspx"&gt;
Kontaktformular&lt;/a&gt; nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugberuby&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Wed, 31 Oct 2012 18:00:00 +0100</pubDate>
    </item>
    <item p3:etag="W/&quot;D0EARnY9cCp7ImA9WhJUGEw.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-4425766070254015461</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/u8lP5DIJ8nI/tidbit-hibernate-bashing-deluxe.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">java</category>
      <category domain="http://www.blogger.com/atom/ns#">hibernate</category>
      <category domain="http://www.blogger.com/atom/ns#">object-relational mapping</category>
      <title>Tidbit: Hibernate bashing deluxe</title>
      <description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" href="http://lh6.ggpht.com/jonas.bandi/SLBGretMBRI/AAAAAAAAARk/DkHaMKuEVo4/hibernate_icon.gif?imgmax=800"&gt;&lt;img src="http://lh6.ggpht.com/jonas.bandi/SLBGretMBRI/AAAAAAAAARk/DkHaMKuEVo4/hibernate_icon.gif?imgmax=800" alt="" height="80" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt; This short speech from JavaZone 2011 is just ingenious! It really made me laugh out lout again and again.&lt;br /&gt; I can fully recommend to watch the video (it's only 9 min), you will be amused, even if you don't know much about hibernate...&lt;br /&gt; &lt;br /&gt; &lt;iframe src="http://player.vimeo.com/video/28885655" width="500" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt; &lt;a href="http://vimeo.com/28885655"&gt;Hibernate should be to programmers what cake mixes are to bakers: beneath their dignity.&lt;/a&gt; from &lt;a href="http://vimeo.com/javazone"&gt;JavaZone&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt; 
&lt;br /&gt;
Favorite quotes:&lt;/p&gt;
&lt;blockquote&gt;Frameworks like Hibernate leave you with pretty much exactly the same amount of work you had to do anyway, only now you are not enjoying it at all.&lt;/blockquote&gt;
&lt;blockquote&gt;I present to you: Hibernate - the naked emperor's hairy butt-cheeks!&lt;/blockquote&gt;
&lt;blockquote&gt;If Hibernate was a part of your team, you wouldn't even let him anywhere near your database.&lt;/blockquote&gt;
&lt;blockquote&gt;We used to write algorithms, now we are writing annotations. Are we meant to be happy about that?&lt;/blockquote&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/u8lP5DIJ8nI" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 13 Sep 2012 22:33:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/4425766070254015461/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="1 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=4425766070254015461" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/4425766070254015461?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/4425766070254015461?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-09-16T19:14:07+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;div class="x_separator" style="clear:both; text-align:center"&gt;&lt;a href="http://lh6.ggpht.com/jonas.bandi/SLBGretMBRI/AAAAAAAAARk/DkHaMKuEVo4/hibernate_icon.gif?imgmax=800" style="clear:right; float:right; margin-bottom:1em; margin-left:1em"&gt;&lt;img src="http://lh6.ggpht.com/jonas.bandi/SLBGretMBRI/AAAAAAAAARk/DkHaMKuEVo4/hibernate_icon.gif?imgmax=800" alt="" height="80" border="0"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;This short speech from JavaZone 2011 is just ingenious! It really made me laugh out lout again and again.&lt;br&gt;
I can fully recommend to watch the video (it's only 9 min), you will be amused, even if you don't know much about hibernate...&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://vimeo.com/28885655"&gt;Hibernate should be to programmers what cake mixes are to bakers: beneath their dignity.&lt;/a&gt; from
&lt;a href="http://vimeo.com/javazone"&gt;JavaZone&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
Favorite quotes:&lt;/p&gt;
&lt;blockquote&gt;Frameworks like Hibernate leave you with pretty much exactly the same amount of work you had to do anyway, only now you are not enjoying it at all.&lt;/blockquote&gt;
&lt;blockquote&gt;I present to you: Hibernate - the naked emperor's hairy butt-cheeks!&lt;/blockquote&gt;
&lt;blockquote&gt;If Hibernate was a part of your team, you wouldn't even let him anywhere near your database.&lt;/blockquote&gt;
&lt;blockquote&gt;We used to write algorithms, now we are writing annotations. Are we meant to be happy about that?&lt;/blockquote&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=u8lP5DIJ8nI:VQHe559iO_o:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=u8lP5DIJ8nI:VQHe559iO_o:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/u8lP5DIJ8nI" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-16T19:14:07.868+02:00</app:edited>
      <media:thumbnail url="http://lh6.ggpht.com/jonas.bandi/SLBGretMBRI/AAAAAAAAARk/DkHaMKuEVo4/s72-c/hibernate_icon.gif?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/09/tidbit-hibernate-bashing-deluxe.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634829832000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634829832000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634829832000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Windows 8 und WinRT - Erschaffe eine neue Welt</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 11. September 2012 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;&amp;quot;Windows 8 und WinRT - Erschaffe eine neue Welt&amp;quot; mit Gregor Biswanger&lt;/h3&gt;
&lt;p&gt;Nach der Sommerpause beschäftigen wir uns mit dem Thema Windows 8 und WinRT. Für den ersten Einstieg wird uns Gregor Biswanger das notwendige Grundwissen näher bringen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows 8 und WinRT - Erschaffe eine neue Welt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="margin:0px; padding:3px 0px; font-family:Arial,Helvetica,sans-serif"&gt;Mit Windows 8 steht im Gegensatz zu den bisherigen Windows-Versionen, die Bedienung mittels Touchscreen im Vordergrund. Dazu wurde eine neue Oberfläche (MetroUI) als Startscreen
 integriert, die sich an der Gestaltung von Windows Phone 7 orientiert. Diese läuft unter einer neuen Laufzeitumgebung namens Windows Runtime (WinRT).&lt;/p&gt;
&lt;p style="margin:0px; padding:3px 0px; font-family:Arial,Helvetica,sans-serif"&gt;Dieser Vortrag gibt einen Überblick über die Neuerungen von Windows 8 und zeigt die Unterschiede von WinRT im Vergleich von WPF und Silverlight und was alles für den Start für C#-Entwickler
 wichtig ist.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Über Gregor Biswanger&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gregor Biswanger (Microsoft MVP für Client App Dev) arbeitet als Solution Architect und XAML Experte bei der Firma impuls Informationsmanagement GmbH aus Nürnberg.
&lt;/p&gt;
&lt;p&gt;Seine Schwerpunkte liegen im Bereich der .NET-Architektur, XAML und agilen Prozessen. Er veröffentlichte vor kurzem seine DVD mit Video-Trainings zum Thema &amp;quot;WPF 4 und Silverlight 4&amp;quot; bei Addison-Wesley von video2brain. Gregor ist auch freier Autor, Speaker
 und Microsoft CLIPler der INdotNET (Ingolstädter .NET Developers Group). &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/windows-8-winrt-erschaffe-welt-gregor-biswanger-1114420" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser &lt;a href="http://dnug-bern.ch/contact.aspx"&gt;
Kontaktformular&lt;/a&gt; nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbewin8&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Tue, 11 Sep 2012 18:00:00 +0200</pubDate>
    </item>
    <item p3:etag="W/&quot;CUcDRng-eyp7ImA9WhNVFkk.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-6949418309018394060</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/mRzFqwNXoBA/quicktip-programmatic-mbean-access.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">java</category>
      <category domain="http://www.blogger.com/atom/ns#">jboss</category>
      <title>QuickTip: Programmatic MBean access under JBoss</title>
      <description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nkMBNKcVOlA/UFYJJquVyXI/AAAAAAAABQs/6AwxTGmrIHo/s1600/jboss.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-nkMBNKcVOlA/UFYJJquVyXI/AAAAAAAABQs/6AwxTGmrIHo/s200/jboss.jpeg" width="100" /&gt;&lt;/a&gt;&lt;/div&gt;I have been struggeling a bit with the programmatic access of MBeans under JBoss. This is my current conclusion.&lt;br /&gt;
With &lt;b&gt;JBoss 5 &lt;/b&gt;there are two methods for accessing MBeans:  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;By JNDI-lookup of the RMIAdaptor. With this method you need the JBoss client libraries (the jars in your &lt;code&gt;$JBOSS_HOME/client&lt;/code&gt;) on the classpath since the RMIAdaptor is a type that is provided by JBoss.&lt;/li&gt;
&lt;li&gt;By pure JMX. You don't need the JBoss client libraries your class path here.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
The following snipped shows both methods:&lt;br /&gt;
&lt;script src="https://gist.github.com/3691788.js"&gt;&lt;/script&gt;  &lt;br /&gt;
With &lt;b&gt;JBoss 7&lt;/b&gt; the way to access MBeans changed quite a bit: &lt;script src="https://gist.github.com/3691798.js"&gt;&lt;/script&gt;  The tricky thing here is, that you need the JBoss client libraries (the jars in &lt;code&gt;$JBOSS_HOME/bin/client&lt;/code&gt;) on your classpath even though you don't explicitly import types provided by JBoss.  &lt;br /&gt;
&lt;br /&gt;
If the client libraries are missing, you get the following exception:  &lt;code&gt;java.net.MalformedURLException: Unsupported protocol: remoting-jmx&lt;/code&gt; &lt;br /&gt;
&lt;br /&gt;
As far as I could figure, this is the only way to access MBeans under JBoss 7.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/mRzFqwNXoBA" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 10 Sep 2012 18:34:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/6949418309018394060/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="2 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=6949418309018394060" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/6949418309018394060?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/6949418309018394060?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-12-27T22:17:57+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;div class="x_separator" style="clear:both; text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/-nkMBNKcVOlA/UFYJJquVyXI/AAAAAAAABQs/6AwxTGmrIHo/s1600/jboss.jpeg" style="clear:right; float:right; margin-bottom:1em; margin-left:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-nkMBNKcVOlA/UFYJJquVyXI/AAAAAAAABQs/6AwxTGmrIHo/s200/jboss.jpeg" width="100"&gt;&lt;/a&gt;&lt;/div&gt;
I have been struggeling a bit with the programmatic access of MBeans under JBoss. This is my current conclusion.&lt;br&gt;
With &lt;b&gt;JBoss 5 &lt;/b&gt;there are two methods for accessing MBeans: &lt;br&gt;
&lt;ul&gt;
&lt;li&gt;By JNDI-lookup of the RMIAdaptor. With this method you need the JBoss client libraries (the jars in your
&lt;code&gt;$JBOSS_HOME/client&lt;/code&gt;) on the classpath since the RMIAdaptor is a type that is provided by JBoss.
&lt;/li&gt;&lt;li&gt;By pure JMX. You don't need the JBoss client libraries your class path here.&amp;nbsp;
&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
The following snipped shows both methods:&lt;br&gt;
&lt;br&gt;
With &lt;b&gt;JBoss 7&lt;/b&gt; the way to access MBeans changed quite a bit: The tricky thing here is, that you need the JBoss client libraries (the jars in
&lt;code&gt;$JBOSS_HOME/bin/client&lt;/code&gt;) on your classpath even though you don't explicitly import types provided by JBoss.
&lt;br&gt;
&lt;br&gt;
If the client libraries are missing, you get the following exception: &lt;code&gt;java.net.MalformedURLException: Unsupported protocol: remoting-jmx&lt;/code&gt;
&lt;br&gt;
&lt;br&gt;
As far as I could figure, this is the only way to access MBeans under JBoss 7.
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=mRzFqwNXoBA:gWyqiDzMxxU:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=mRzFqwNXoBA:gWyqiDzMxxU:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/mRzFqwNXoBA" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-27T22:17:57.653+01:00</app:edited>
      <media:thumbnail url="http://4.bp.blogspot.com/-nkMBNKcVOlA/UFYJJquVyXI/AAAAAAAABQs/6AwxTGmrIHo/s72-c/jboss.jpeg" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/09/quicktip-programmatic-mbean-access.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;A0AMQng9cCp7ImA9WhJVF00.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-5020853748834244940</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/P_Ag1HqWmJo/chopen-workshop-days-2012.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">presentation</category>
      <title>/ch/open Workshop-Days 2012 </title>
      <description>&lt;p&gt;&lt;a href="http://www.ch-open.ch/"&gt;&lt;img style="float: right; margin-left: 10px; margin-right: 0px; border: 0px;" title="/ch/open" src="http://lh6.ggpht.com/_X3kaawac_g4/TCzi4WuskwI/AAAAAAAAA1g/BMldQo63L0U/image_thumb%5B4%5D.png?imgmax=800" alt="image" width="132" height="96" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simas.ch/"&gt;Simon&lt;/a&gt; and I are holding a &lt;a href="http://www.ch-open.ch/wstage/workshop-tage/aktuelles-programm-2012/ws-13-objektrelationales-mapping-mit-jpa-2/"&gt;workshop about object relational mapping with JPA2 &lt;/a&gt;next Thursday at the &lt;a href="http://www.ch-open.ch/wstage/workshop-tage/aktuelles-programm-2012/"&gt;/ch/open Workshop-Days 2012.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This year is the first time since we are doing this course that the workshop is not fully booked… probably JPA is getting an uninteresting legacy technology?&lt;/p&gt;
&lt;p&gt;So if you don't know what to do next Thursday, you can still get a seat in our workshop … however if I am honest I would suggest to have a look at the parallel course &lt;a href="http://www.ch-open.ch/wstage/workshop-tage/aktuelles-programm-2012/ws-15-java-ee-testing-revisited-with-arquillian/"&gt;"Java EE testing revised with Arquillian"&lt;/a&gt; … it looks very promising. I would definitely attend that course, if I had a choice. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/P_Ag1HqWmJo" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 04 Sep 2012 00:01:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/5020853748834244940/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=5020853748834244940" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/5020853748834244940?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/5020853748834244940?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-09-04T00:03:03+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;&lt;a href="http://www.ch-open.ch/"&gt;&lt;img title="/ch/open" src="http://lh6.ggpht.com/_X3kaawac_g4/TCzi4WuskwI/AAAAAAAAA1g/BMldQo63L0U/image_thumb%5B4%5D.png?imgmax=800" alt="image" width="132" height="96" border="0" style="float:right; margin-left:10px; margin-right:0px; border:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simas.ch/"&gt;Simon&lt;/a&gt; and I are holding a &lt;a href="http://www.ch-open.ch/wstage/workshop-tage/aktuelles-programm-2012/ws-13-objektrelationales-mapping-mit-jpa-2/"&gt;
workshop about object relational mapping with JPA2 &lt;/a&gt;next Thursday at the &lt;a href="http://www.ch-open.ch/wstage/workshop-tage/aktuelles-programm-2012/"&gt;
/ch/open Workshop-Days 2012.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This year is the first time since we are doing this course that the workshop is not fully booked… probably JPA is getting an uninteresting legacy technology?&lt;/p&gt;
&lt;p&gt;So if you don't know what to do next Thursday, you can still get a seat in our workshop … however if I am honest I would suggest to have a look at the parallel course
&lt;a href="http://www.ch-open.ch/wstage/workshop-tage/aktuelles-programm-2012/ws-15-java-ee-testing-revisited-with-arquillian/"&gt;
&amp;quot;Java EE testing revised with Arquillian&amp;quot;&lt;/a&gt; … it looks very promising. I would definitely attend that course, if I had a choice.&amp;nbsp;&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=P_Ag1HqWmJo:VUTFYHbMEUo:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=P_Ag1HqWmJo:VUTFYHbMEUo:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/P_Ag1HqWmJo" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-04T00:03:03.668+02:00</app:edited>
      <media:thumbnail url="http://lh6.ggpht.com/_X3kaawac_g4/TCzi4WuskwI/AAAAAAAAA1g/BMldQo63L0U/s72-c/image_thumb%5B4%5D.png?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/09/chopen-workshop-days-2012.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634818384000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634818384000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634818384000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>.NETworking Lunch Kanban moderiert von Martin Affolter</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Mittwoch, 29.&amp;nbsp;August 2012 (12:00 bis 14:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;.NETworking Lunch Kanban moderiert von Martin Affolter&lt;/h3&gt;
&lt;p&gt;Kanban als Methode aus der Produktion setzt sich zunehmend in der agilen Software-Entwicklung durch. Mittlerweile gibt es mehrere Ansäzte, vom gemeinsamen Einsatz mit Scrum bis zum Wechsel von Scrum zu Kanban ist jede Kombination anzutreffen.
&lt;/p&gt;
&lt;p&gt;René Leupold hat sich für den Einsatz von Kanban und gegen Scrum entschieden. Warum er sich dazu entschlossen hat, wird er neben den Grundprinzipien am .NETworking Lunch Kanban erläutern.
&lt;/p&gt;
&lt;p&gt;Nutze die Gelegenheit, um Deine Erfahrungen im Bezug auf Kanban oder Scrum mit einzubringen.
&lt;/p&gt;
&lt;p&gt;Dieses Treffen findet in der &lt;strong&gt;Schmiedstube&lt;/strong&gt; statt. Die Anfahrtdetails sind
&lt;a title="Anfahrt Schmiedstube Bern" href="http://www.schmiedstube.com/standort.html"&gt;
hier&lt;/a&gt; beschrieben. &lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbekl&lt;/strong&gt;.&amp;nbsp;Die Aktivitäten können während der Veranstaltung&amp;nbsp;auf unserer&amp;nbsp;&lt;a title="Twitterwand" href="http://www.dnug-bern.ch/TwitterWall.aspx"&gt;Twitterwand&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf Xing" href="https://www.xing.com/events/networking-lunch-kanban-moderiert-martin-affolter-1121792"&gt;
Anmeldung&lt;/a&gt; erforderlich ist und gebe unter Bemerkungen und Hinweise deinen Menüwunsch an (Menu 1 oder Menu 2 (Vegetarisch) ca. CHF 35.-).
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abmeldung&lt;/strong&gt; &lt;br&gt;
Bei Nichterscheinen ohne Abmeldung bis 3 Arbeitstage vor dem Anlass werden allfällige Unkosten, die uns dadurch entstehen, bis CHF 50. weiterverrechnet.
&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf deine Teilnahme! &lt;/p&gt;
&lt;p&gt;Kay Herzam, Martin Affolter und René Leupold &lt;/p&gt;
</description>
      <pubDate>Wed, 29 Aug 2012 12:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=637</guid>
      <link>http://schaedlerdaniel.wordpress.com/2012/08/21/reverse-engineering-mit-visual-studio-2010/</link>
      <category>Allgemein</category>
      <category>C#</category>
      <category>C# Reverse Engineering</category>
      <category>feature pack</category>
      <category>menu option</category>
      <category>Modelling Project Visual Studio 2010</category>
      <category>visual studio</category>
      <category>Visual Studio Code generation</category>
      <title>Reverse Engineering mit Visual Studio 2010</title>
      <description>Wenn man sich gewöhnt ist zuerst Klassen zu erstellen und dann ein Model haben möchte, dann kann man schon ein wenig in Verzweiflung versinken. Nun ist es aber mit den Tools: Visual Studio 2010 Ultimate Visual Studio 2010 Feature Pack möglich bereits erstellten
 Code rückwärts zu modellieren. Damit wir das Ganze Schritt für Schritt durchführen [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=637&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Tue, 21 Aug 2012 13:17:16 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2012/08/21/reverse-engineering-mit-visual-studio-2010/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Wenn man sich gewöhnt ist zuerst Klassen zu erstellen und dann ein Model haben möchte, dann kann man schon ein wenig in Verzweiflung versinken. Nun ist es aber mit den Tools:&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio 2010 Ultimate&lt;/li&gt;
&lt;li&gt;Visual Studio 2010 Feature Pack&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;möglich bereits erstellten Code rückwärts zu modellieren. Damit wir das Ganze Schritt für Schritt durchführen können, ist dieser Betrag wie folgt unterteilt:&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;ol&gt;
&lt;li&gt;Erstellung einer Dummy Lösung mit einem manuell erstellten Klassenmodell&lt;/li&gt;
&lt;li&gt;Erstellen eins ModellProjektes&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h3&gt;Erstellung des Beispiel Projektes&lt;/h3&gt;
&lt;p&gt;Wir halten es ganz einfach und wählen in den Projektvorlagen eine Windows Class Library aus. Wir fügen folgende Klassen hinzu:&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;Person&lt;/li&gt;
&lt;li&gt;Address&lt;/li&gt;
&lt;li&gt;Phone&lt;/li&gt;
&lt;li&gt;PhoneType&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;Schlussendlich sieht das Diagramm dann wie folgt aus:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/08/03_project_classdiagramm.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/08/03_project_classdiagramm.jpg?w=595" alt="Klassen Diagramm mit dem Visual Studio Standard Generator" title="03_Project_ClassDiagramm"   class="aligncenter size-full wp-image-639" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nun müssen wird das Build-Directory anpassen, dass kann in ein x-beliebiges Verzeichnis sein, aber nur für das Beispiel hier.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/08/01_project_outputsettings.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/08/01_project_outputsettings.jpg?w=595" alt="Output Directory des Builds." title="01_Project_OutputSettings"   class="aligncenter size-full wp-image-647" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Als nächster Schritt erstellen wir uns ein Modell Projekt.&lt;/p&gt;
&lt;h3&gt;Das Modell Projekt&lt;/h3&gt;
&lt;p&gt;Nun wählen wir aus den Projektvorlagen, die Vorlage aus dem Bereich Modelling und erstellen uns eine leere Lösung. Danach fügen wir uns ein Klassendiagramm über den entsprechenden Menüpunkt der Solution hinzu.&lt;/p&gt;
&lt;p&gt;Nun müssen wir dafür sorgen dass der Architektur Explorer ersichtlich ist. Ist dieser nicht auffindbar, kann man ihn wie folgt sichtbar machen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Auswahl Menu-Option Architektur&lt;/li&gt;
&lt;li&gt;Auswahl Fenster /Windows&lt;/li&gt;
&lt;li&gt;Selektion des Architektur Explorer&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/08/02_architekture_explorer.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/08/02_architekture_explorer.jpg?w=595" alt="Architektur Explorer zum Vorschein bringen." title="02_Architekture_Explorer"   class="aligncenter size-full wp-image-650" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Der Architektur Explorer ist dann am unteren Rand von Visual Studio ersichtlich.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/08/04_architecture_explorer.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/08/04_architecture_explorer.jpg?w=595" alt="Architektur Explorer" title="04_Architecture_Explorer"   class="aligncenter size-full wp-image-651" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Damit wir nun auch das vorher erstellte Projekt importieren können gehen wir wie folgt vor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Option Select Files… wählen&lt;/li&gt;
&lt;li&gt;Im öffnenden Explorer Fenster zum Pfad hinnavigieren, welchen wir vorhing bei der Beispiel DLL als Output Verzeichnis angegeben haben such und die DLL auswählen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nachdem wir unsere DLL selektiert haben sieht der Architecture Explorer so aus:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/08/05_architecture_explorer_selected_classes.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/08/05_architecture_explorer_selected_classes.jpg?w=595" alt="Architektur Explorer nach Auswahl unseres Beispielprojektes" title="05_Architecture_Explorer_Selected_Classes"   class="aligncenter size-full wp-image-652" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nun können wir beginnen die Klassen in ein Klassen Diagramm des Modelprojektes reinzuziehen und haben unser „Reverse Engineering“ erfolgreich durchgefüht.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/08/06_class_diagramm_with_imported_classes.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/08/06_class_diagramm_with_imported_classes.jpg?w=595" alt="Importierte Klassen im Klassendiagramm eines Modell Projektes" title="06_Class_Diagramm_with_imported_classes"   class="aligncenter size-full wp-image-653" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nun können wir die notwendigen Anpassungen, falls wir mit unserem Modell nicht ganz zufrieden sind, vornehmen und den Code wieder generieren lassen.&lt;/p&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;
&lt;p&gt;Es stellt sich nun die Frage, waren meine Google Anfragen so unpräzise oder ist es so einfach dass man es nicht wirklich dokumentieren braucht? Nun ich hoffe trotz der Trivialität des Vorgangs, dem einen oder anderen ein wenig Zeit mit der Suche im Web erspart zu haben.&lt;/p&gt;
&lt;p&gt;Für Anregungen und Kritik bin ich offen. Hat der Beitrag gefallen, so würde ich mich über einen Kick freuen.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f08%2f21%2freverse-engineering-mit-visual-studio-2010%2f"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f08%2f21%2freverse-engineering-mit-visual-studio-2010%2f" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/637/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/637/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=637&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2012/08/21/reverse-engineering-mit-visual-studio-2010/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/08/03_project_classdiagramm.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">03_Project_ClassDiagramm</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/08/01_project_outputsettings.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">01_Project_OutputSettings</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/08/02_architekture_explorer.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">02_Architekture_Explorer</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/08/04_architecture_explorer.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">04_Architecture_Explorer</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/08/05_architecture_explorer_selected_classes.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">05_Architecture_Explorer_Selected_Classes</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/08/06_class_diagramm_with_imported_classes.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">06_Class_Diagramm_with_imported_classes</media:title>
      </media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f08%2f21%2freverse-engineering-mit-visual-studio-2010%2f" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1264</guid>
      <link>http://blog.eweibel.net/?p=1264</link>
      <category>.NET</category>
      <category>Good practices</category>
      <title>Migrate a VSS repository to TFS</title>
      <description>Recently I had to migrate parts from a Microsoft Visual SourceSafe 2005 repository to a Microsoft Team Foundation Server 2010 repository. In this blog post I show what I had to do and what the pitfalls were. The tool To migrate a repository you have at
 least two possibilities: Migrate the latest snapshot or the [...]</description>
      <pubDate>Thu, 02 Aug 2012 14:00:00 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1264#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;img style="display: inline; float: right" title="Visual Studio" alt="Visual Studio" align="right" src="http://i1.wp.com/i.microsoft.com/visualstudio/_base_v1/images/chrome/visual_studio_logo.png?resize=241%2C36" data-recalc-dims="1" /&gt;Recently I had to migrate parts from a &lt;a href="http://msdn.microsoft.com/library/ms181038%28VS.80%29.aspx" target="_blank"&gt;Microsoft Visual SourceSafe 2005&lt;/a&gt; repository to a &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/team-foundation-server/overview" target="_blank"&gt;Microsoft Team Foundation Server 2010&lt;/a&gt; repository. In this blog post I show what I had to do and what the pitfalls were.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To migrate a repository you have at least two possibilities: Migrate the latest snapshot or the whole history. Normally you prefer a migration of the whole history, so you don&amp;#8217;t loose the gained advantage of an version control system.&lt;/p&gt;
&lt;p&gt;To migrate a repository from Visual SourceSafe (VSS) with the complete history, there exists a tool, which comes with Visual Studio: vssconverter.exe. You find the tool in the following directory: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE.&lt;/p&gt;
&lt;p&gt;To migrate a repository or just a part of it from VSS to Team Foundation Server (TFS), you have to process two steps: Analyse and Migrate.&lt;/p&gt;
&lt;p&gt;There is quite a good documentation about the process and the tool itself at the &lt;a href="http://msdn.microsoft.com/en-us/library/ms253060%28v=vs.100%29" target="_blank"&gt;MSDN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analyse step&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the Analyse step the VSSConverter tool checks if there are any problems and creates an user mapping file.&lt;/p&gt;
&lt;p&gt;To start the analyse step, you have to enter the following at the command line:&lt;/p&gt;
&lt;p&gt;vssconverter.exe analyze analyzesettings.xml&lt;/p&gt;
&lt;p&gt;The analyzesettings.xml file looks like the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9e37adee-33fb-4c54-b2c9-a31471e0aabd" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;SourceControlConverter&amp;gt;
&amp;lt;ConverterSpecificSetting&amp;gt;
     &amp;lt;Source name="VSS"&amp;gt;
          &amp;lt;VSSDatabase name="\\server\vss"/&amp;gt;
          &amp;lt;UserMap name="Usermap.xml"/&amp;gt;
     &amp;lt;/Source&amp;gt;
     &amp;lt;ProjectMap&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Func"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Proc"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Trig"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/View"/&amp;gt;
     &amp;lt;/ProjectMap&amp;gt;
&amp;lt;/ConverterSpecificSetting&amp;gt;
&amp;lt;Settings&amp;gt;
     &amp;lt;Output file="AnalysisReport.xml"/&amp;gt;
&amp;lt;/Settings&amp;gt;
&amp;lt;/SourceControlConverter&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The result of the execution of the command line are two files: Usermap.xml and the AnalysisReport.xml. You can open the AnalysisReport.xml to see if there are any problems. The Usermap.xml file you have to modify before you can continue with the next step.&lt;/p&gt;
&lt;p&gt;In the user mapping file (Usermap.xml) you map the VSS users to the users you use with the TFS. This file looks like the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:32de3a2b-2139-4a8c-be67-c6b7211ecdc8" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;UserMappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;
  &amp;lt;UserMap From="michael" To="DOMAIN\michael"/&amp;gt;
  &amp;lt;UserMap From="john" To="DOMAIN\john"/&amp;gt;
  &amp;lt;UserMap From="ADMIN" To="DOMAIN\michael"/&amp;gt;
&amp;lt;/UserMappings&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I had some troubles here with the correct domain name. The problem result that the user mapping didn&amp;#8217;t work during the migration and all history entries had me as user. So I had to destroy the migrated items in the TFS repository with the following command line statement:&lt;/p&gt;
&lt;p&gt;tf.exe destroy $/Project/Main/Source/Data/Project/SQL&lt;/p&gt;
&lt;p&gt;After that, I corrected the Usermap.xml file and started the migration step again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Migration step&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For the migration step you need a migration setting file. A such file looks like the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:db7b65bc-37d7-48f6-81bb-dece6ae6cccc" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;SourceControlConverter&amp;gt;
&amp;lt;ConverterSpecificSetting&amp;gt;
     &amp;lt;Source name="VSS"&amp;gt;
          &amp;lt;VSSDatabase name="\\server\vss"/&amp;gt;
          &amp;lt;UserMap name="Usermap.xml"/&amp;gt;
     &amp;lt;/Source&amp;gt;
     &amp;lt;ProjectMap&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Func" Destination="$/Project/Main/Source/Data/Project/SQL/Func"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Proc" Destination="$/Project/Main/Source/Data/Project/SQL/Proc"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Trig" Destination="$/Project/Main/Source/Data/Project/SQL/Trig"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/View" Destination="$/Project/Main/Source/Data/Project/SQL/View"/&amp;gt;
     &amp;lt;/ProjectMap&amp;gt;
&amp;lt;/ConverterSpecificSetting&amp;gt;
&amp;lt;Settings&amp;gt;
	 &amp;lt;TeamFoundationServer name="tfs" port="8080" protocol="http" collection="tfs/DefaultCollection"/&amp;gt;
     &amp;lt;Output file="MigrationReport.xml"/&amp;gt;
&amp;lt;/Settings&amp;gt;
&amp;lt;/SourceControlConverter&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This setting file looks quite similar to the analyse setting file. But in the ProjectMap section you have the destination attribute where you define the directory in the TFS repository where you want to migrate the VSS data. &lt;/p&gt;
&lt;p&gt;In the Settings section there is an important entry TeamFoundationServer. For TFS 2010 you have to define the attribute collection. It wont work without this attribute.&lt;/p&gt;
&lt;p&gt;You start the migration with the following command line statement:&lt;/p&gt;
&lt;p&gt;vssconverter.exe migrate migratesettings.xml&lt;/p&gt;
&lt;p&gt;As a result of this statement you will receive a MigrationReport.xml file, which you can watch in a browser if there were any problems. I recommend also to have a look in the VSSConverter.log file. There are some valuable additional information.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1264&amp;amp;title=Migrate%20a%20VSS%20repository%20to%20TFS" id="wpa2a_2"&gt;&lt;img src="http://i2.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=954' rel='bookmark' title='Visualize changes in your repository'&gt;Visualize changes in your repository&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1264</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
    </item>
    <item p3:etag="W/&quot;AkIGRHkyeyp7ImA9WhJXFUQ.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-8506838528234138799</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/99HSmuYKevI/tidbits-lines-of-code.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">javascript</category>
      <category domain="http://www.blogger.com/atom/ns#">tidbit</category>
      <title>Tidbits: Lines of Code</title>
      <description>&lt;img alt="Computer Code" border="0" height="150" src="http://lh6.ggpht.com/-vn7DpdqDE9g/UBfDLHAan7I/AAAAAAAABQU/MadjS4e0QNI/Computer-Code.jpeg?imgmax=800" style="float: right;" title="Computer-Code.jpeg" width="150" /&gt;According to the discussion in &lt;a href="http://javascriptjabber.com/020-jsj-cloud9/"&gt;JavaScript Jabber episode 20&lt;/a&gt;:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;the code base for the Cloud9 IDE &lt;strike&gt;fronted&lt;/strike&gt;&amp;nbsp;(&lt;a href="https://twitter.com/javruben/status/233580129798991872"&gt;correction by @javruben&lt;/a&gt;) consists of about &lt;strong&gt;300'000 lines&lt;/strong&gt; of JavaScript.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The GMail frontend consist of about &lt;strong&gt;400'000 lines&lt;/strong&gt; of JavaScript.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style="clear: right; font-size: 10px;"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border-style: none; margin: 0px;" /&gt;follow me on twitter&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/99HSmuYKevI" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 31 Jul 2012 13:36:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/8506838528234138799/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=8506838528234138799" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8506838528234138799?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8506838528234138799?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-08-10T13:35:25+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">&lt;img alt="Computer Code" border="0" height="150" src="http://lh6.ggpht.com/-vn7DpdqDE9g/UBfDLHAan7I/AAAAAAAABQU/MadjS4e0QNI/Computer-Code.jpeg?imgmax=800" title="Computer-Code.jpeg" width="150" style="float:right"&gt;According to the discussion in
&lt;a href="http://javascriptjabber.com/020-jsj-cloud9/"&gt;JavaScript Jabber episode 20&lt;/a&gt;:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;the code base for the Cloud9 IDE &lt;strike&gt;fronted&lt;/strike&gt;&amp;nbsp;(&lt;a href="https://twitter.com/javruben/status/233580129798991872"&gt;correction by @javruben&lt;/a&gt;) consists of about
&lt;strong&gt;300'000 lines&lt;/strong&gt; of JavaScript.&amp;nbsp; &lt;/li&gt;&lt;li&gt;The GMail frontend consist of about &lt;strong&gt;400'000 lines&lt;/strong&gt; of JavaScript.&amp;nbsp;
&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border-style:none; margin:0px"&gt;follow
 me on twitter&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=99HSmuYKevI:hmLvdSca0is:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=99HSmuYKevI:hmLvdSca0is:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/99HSmuYKevI" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-10T13:35:25.793+02:00</app:edited>
      <media:thumbnail url="http://lh6.ggpht.com/-vn7DpdqDE9g/UBfDLHAan7I/AAAAAAAABQU/MadjS4e0QNI/s72-c/Computer-Code.jpeg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/07/tidbits-lines-of-code.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/07/19/sharepoint-verwaiste-sitecollection-finden-und-aufraeumen.html</guid>
      <link>http://www.databinding.net/blog/post/2012/07/19/sharepoint-verwaiste-sitecollection-finden-und-aufraeumen.html</link>
      <author> (René)</author>
      <title>Sharepoint - Verwaiste SiteCollection finden und aufräumen</title>
      <description>Sharepoint, die einen lieben, die anderen hassen es und ich weiss immer noch nicht so recht was ich davon halten soll. Mein bis jetzt gröbstes Projekt in Sharepoint ist die Aufbereitung und Transfo...</description>
      <pubDate>Thu, 19 Jul 2012 17:03:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt; Sharepoint, die einen lieben, die anderen hassen es und ich weiss immer noch nicht so recht was ich davon halten soll. &lt;/p&gt; &lt;p&gt; Mein bis jetzt gröbstes Projekt in Sharepoint ist die Aufbereitung und Transformation von Daten aus 3 alten Sharepoint-Lösungen (SP 2007), damit diese in eine neue Lösung importiert werden können. Der Metadaten-Ansatz hat sich dabei als sehr hilfreich heraus gestellt. Diese Metadatenschicht besteht&amp;nbsp;aus knapp. 4 GB an Daten, was ca. 0.2% des Gesamtdatenvolumen der Migration entspricht. &lt;/p&gt; &lt;p&gt; In der Zukunft und Big Data wird das für Entwickler mit der Einstellung: &amp;quot;Die Datenhaltung ist mir scheiss egal&amp;quot; noch eine echte Knacknuss werden. Denn solche Datenmengen bestrafen diese Einstellung, ganz gleich ob SQL oder NoSQL. &lt;/p&gt; &lt;p&gt; Ein Problem in Sharepoint sind unter anderem verwaiste SiteCollections, die zudem doppelt vorhanden sein können. Solch eine Konstellation kann die Sharepoint Deployment Content API aus dem Tritt bringen und die Datenaufbereitung erschweren. &lt;/p&gt; &lt;p&gt; Mittlerweile habe ich gelernt, dass der Lösungsweg für dieses Problem eine Datenbank-Reparatur ist. &lt;/p&gt; &lt;p&gt; Der Befehl dafür lautet: &lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;/p&gt; stsadm -o databaserepair -databasename &amp;lt;&amp;lt;Datenbank&amp;gt;&amp;gt; -url http://Site &lt;p&gt; bzw. ab SP 2010 mit Powershell (Merci an Thorsten Hans für den Tipp): &lt;/p&gt; Add-PSSnapIn Microsoft.SharePoint.PowerShell $db = Get-SPDatabase &amp;quot;&amp;lt;&amp;lt;Datenbank&amp;gt;&amp;gt;&amp;quot;; $db.Repair($false); $db.Update(); &lt;p&gt; In der Metadatenebene haben gerade die doppelten SiteCollections, von der jeweils eine verwaist war, den Logmechanismus aktiviert. :) Einfach ausgedrückt, diese haben es nicht aus der Staging-Area heraus geschafft, so dass die Integrität der Metadaten jederzeit gewährleistet ist. Im Log ist dann ersichtlich welche der vielen Datenbanken eine Datenbankreparatur erfordern, damit die Sharepoint Content Deployment API wieder&amp;nbsp;fehlerfrei&amp;nbsp;bei diesen SiteCollections arbeiten kann. &lt;/p&gt; &lt;p&gt; Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://sharenotes.wordpress.com/2007/11/19/deleting-purging-removing-orphaned-sites-or-site-collections/"&gt;SharePoint: Delete / Purge / Remove Orphaned Sites or Site Collections &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/07/17/t4-templatefilemanager-als-nuget-package.html</guid>
      <link>http://www.databinding.net/blog/post/2012/07/17/t4-templatefilemanager-als-nuget-package.html</link>
      <author> (René)</author>
      <title>T4 TemplateFileManager als NuGet Package</title>
      <description>Aktuell beschäftige ich mich ein wenig intensiver mit NuGet. Nachdem ich einen eigenen NuGet-Server in wenigen Schritten erstellen konnte, um firmeninterne Optimierungen testen zu können, interessie...</description>
      <pubDate>Tue, 17 Jul 2012 23:04:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt; Aktuell beschäftige ich mich ein wenig intensiver mit NuGet. Nachdem ich&amp;nbsp;einen eigenen NuGet-Server in wenigen Schritten erstellen konnte, um firmeninterne Optimierungen testen zu können, interessiert mich nun verstärkt die Bereitstellung von Content-Packages. Gerade für die kommende App-Entwicklung mit Schwerpunkt Javascript, HTML und REST kann T4 seine stärken gegenüber CodeDOM viel besser ausspielen. &lt;/p&gt; &lt;p&gt; Als erstes habe ich dies mit dem TemplateFileManager ausprobiert. Das erste Resultat ist &lt;a href="https://nuget.org/packages/T4.TemplateFileManager" title="NuGet-Package auf nuget.org" class="external-link-new-window"&gt;hier &lt;/a&gt; verfügbar und kann mit folgenden Befehl installiert werden: &lt;/p&gt; &lt;p&gt; PM&amp;gt; Install-Package T4.TemplateFileManager &lt;/p&gt; &lt;p&gt; Im Paket ist auch ein Beispiel zur Verwendung enthalten. In einer weiteren Phase werde ich dieses wieder entfernen und ein NuGet-Package bereitstellen, welches nur aus Beispielen bestehen wird. &lt;/p&gt; &lt;p&gt; Aktuell steht nach der Installation eine SimpleSample.tt - Vorlage zur Verfügung, die den Einsatzzweck veranschaulichen soll. Dazu wird auch ein ParameterTemplate verwendet, um die Ausgabelogik von der Verarbeitungslogik zu trennen. Für mich hat sich diese Vorgehensweise als sehr praktisch herausgestellt, da so bspw. bei der Generierung von Schnittstellen für einen WCF-Service auch die Konfigurationseinstellungen erstellt, aber auch einfacher ersetzt werden können. &lt;/p&gt; &lt;p&gt; Nach der erfolgreichen Installation hat das Projekt folgende Elemente: &lt;/p&gt; Abbildung 1 Sichtbare Elemente SimpleSample.tt, SimpleParameterTemplate.tt und TestFolder in dem die Ausgabe von SimpleSample.tt erzeugt wird &lt;a href="http://www.databinding.net/uploads/pics/nugett4tfm.PNG" title="Abbildung 1 Sichtbare Elemente SimpleSample.tt, SimpleParameterTemplate.tt und TestFolder in dem die Ausgabe von SimpleSample.tt erzeugt wird" rel="lightbox[lb804]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/04df402e8c.png" width="350" height="231" border="0" alt="Abbildung 1" /&gt; &lt;/a&gt; &lt;p&gt; Bei Gelegenheit&amp;nbsp;werde ich das Paket T4Scaffolding analysieren, um das Zusammenspiel mit Powershell besser zu verstehen. Mal sehen, welche Ideen sich damit zu Boden bringen lassen ;-) &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="https://nuget.org/packages/T4.TemplateFileManager" title="NuGet-Package auf NuGet.org" class="external-link-new-window"&gt;Package T4.TemplateFileManager auf NuGet.org &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/06/07/t4-ein-neues-feature-parameter-fuer-startheader-methode-im-templatefilemanager.html"&gt;T4 - Ein neues Feature &amp;quot;Parameter für StartHeader-Methode&amp;quot; im TemplateFileManager &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/06/14/t4-format-document-dass-zweite-neue-feature-im-templatefilemanager.html"&gt; T4 -&amp;nbsp;Format Document, dass zweite neue Feature im TemplateFileManager &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/06/16/t4-custom-tool-ein-weiteres-neues-feature-im-templatefilemanager.html"&gt; T4 -&amp;nbsp;Custom Tool ein weiteres neues Feature im TemplateFileManager &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/06/21/t4-benutzerdefinierte-parameter-fuer-die-startheader-methode-im-templatefilemanager.html"&gt; T4 - Benutzerdefinierte Parameter für die StartHeader-Methode im TemplateFileManager &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/06/25/t4-wo-steht-die-version-2-des-templatefilemanager-zur-verfuegung.html"&gt; T4 - Wo steht die Version 2 des TemplateFileManager zur Verfügung &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/06/29/t4-entityframworktemplatefilemanager-durch-den-templatefilemanager-ersetzen.html"&gt; T4 - EntityFramworkTemplateFileManager durch den TemplateFileManager ersetzen &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://thomykay.wordpress.com/2012/04/02/what-the-hell-is-powershell/" title="Powershell-Beispiele von Thomas Krause" class="external-link-new-window"&gt;What the Hell is Powershell &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1248</guid>
      <link>http://blog.eweibel.net/?p=1248</link>
      <category>Agile</category>
      <title>VDD – the new programming manifesto?</title>
      <description>When I was at the NDC, I had also the possibility to visit with colleagues the city of Oslo. During a stop in front of a little shop, a colleague discovered a post card about Viking laws. When I read it, I was really surprised how well the laws fit to
 today’s software practices. The [...]</description>
      <pubDate>Tue, 17 Jul 2012 14:00:00 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1248#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;a href="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/VikingLaws1.jpg" rel="lightbox[1248]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="VikingLaws" border="0" alt="VikingLaws" align="right" src="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/VikingLaws_thumb1.jpg?resize=310%2C551" data-recalc-dims="1" /&gt;&lt;/a&gt;When I was at the &lt;a href="http://blog.eweibel.net/?p=1224" target="_blank"&gt;NDC&lt;/a&gt;, I had also the possibility to visit with colleagues the city of Oslo. During a stop in front of a little shop, a colleague discovered a &lt;a href="http://butikk.naturkultur.no/butikk.cfm?a=product_inline&amp;amp;b_kid=3000&amp;amp;b_id=89846" target="_blank"&gt;post card about Viking laws&lt;/a&gt;. When I read it, I was really surprised how well the laws fit to today&amp;#8217;s software practices.&lt;/p&gt;
&lt;p&gt;The Viking laws are grouped in four paragraphs. I pick the most interesting laws for each paragraph and try to make some relations to the software engineering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be brave and aggressive&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here you can read laws like &amp;quot;Be versatile and agile&amp;quot;, &amp;quot;Attack one target at a time&amp;quot; or &amp;quot;Don&amp;#8217;t plan everything in detail&amp;quot;. Those laws are valid for agile software projects too. But one of the more interesting laws is &amp;quot;Use top quality weapons&amp;quot; &amp;#8211; just replace the word &amp;quot;weapons&amp;quot; with the word &amp;quot;tools&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be prepared&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this paragraph you can read laws like &amp;quot;Keep weapons in good conditions&amp;quot;, which means in software development to keep your code and tools in good conditions. Another laws is &amp;quot;Keep in shape&amp;quot;, which means to do continuous learning and improve your skills. Also the law &amp;quot;find good battle comrades&amp;quot; is interesting, because learning from other programmers or engineers in our industry is very important (by practicing pair programming for example).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be a good merchant&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This paragraph is maybe about business orientation and business value for the customers in the software industry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep the camp in order&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When I read this paragraph I thought about the &amp;quot;&lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule" target="_blank"&gt;Boy scout rule&lt;/a&gt;&amp;quot;, which fits quite well. Also team work is an important point here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So there are so many well fitted laws here &amp;#8211; why don&amp;#8217;t we do Viking Driven Development &lt;img src='http://i1.wp.com/blog.eweibel.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' data-recalc-dims="1" /&gt; ?&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1248&amp;amp;title=VDD%20%E2%80%93%20the%20new%20programming%20manifesto%3F" id="wpa2a_4"&gt;&lt;img src="http://i0.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=4' rel='bookmark' title='Object oriented programming (Part 1)'&gt;Object oriented programming (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1248</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
    </item>
    <item p3:etag="W/&quot;Ck8BQ3c8eSp7ImA9WhJSGU4.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-1373833462601628423</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/uBIAvM4juu4/impressive-speech-about-future-effects.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">socialnetwork</category>
      <title>Impressive speech about the future effects of social networks</title>
      <description>[in German]&lt;br /&gt;
&lt;br /&gt;
This impressive speech nails down what social networks are all about and how the internet has a revolutionizing effect on modern society:&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/sboGELOPuKE" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
This is what I call a very impressive talk: 3 min and every word fitting a very concise and scientific analysis.&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/uBIAvM4juu4" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 10 Jul 2012 16:33:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/1373833462601628423/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=1373833462601628423" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/1373833462601628423?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/1373833462601628423?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-07-10T16:34:12+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">[in German]&lt;br&gt;
&lt;br&gt;
This impressive speech nails down what social networks are all about and how the internet has a revolutionizing effect on modern society:&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
This is what I call a very impressive talk: 3 min and every word fitting a very concise and scientific analysis.&lt;br&gt;
&lt;br&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=uBIAvM4juu4:Msmfk4VZ7y4:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=uBIAvM4juu4:Msmfk4VZ7y4:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/uBIAvM4juu4" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-10T16:34:12.971+02:00</app:edited>
      <media:thumbnail url="http://img.youtube.com/vi/sboGELOPuKE/default.jpg" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/07/impressive-speech-about-future-effects.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;A0MERXo5cCp7ImA9WhJREE0.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-8509399615475442313</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/nk1l2m032v8/bookreview-mvc4-in-action.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">bookreview</category>
      <title>Bookreview: MVC4 in Action</title>
      <description>Another quote made it on the cover of a manning title: &lt;a href="http://manning.com/palermo3/"&gt;ASP.NET MVC 4 in Action&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="MVC4" border="0" height="224" src="http://lh3.ggpht.com/-ro7DH4UP50I/T_Xz0Pmxu-I/AAAAAAAABP8/Sl_LDTIPxSY/MVC4.jpg?imgmax=800" style="border: none; display: block; margin-left: auto; margin-right: auto;" title="MVC4.jpg" width="350" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://manning.com/palermo3/"&gt;&lt;img alt="Palermo3 cover150" border="0" height="188" src="http://lh6.ggpht.com/-FafbACKdghY/T_Xz1IZY57I/AAAAAAAABQE/N2lR6ujZiKg/palermo3_cover150.jpeg?imgmax=800" style="border: none; float: left; padding-bottom: 1px; padding-right: 10px;" title="palermo3_cover150.jpeg" width="150" /&gt;&lt;/a&gt;I think this is a good book for developers that want to learn ASP.NET MVC. And I think today every .NET Web Developer should learn MVC. Learning MVC will help you understand basic web concepts and even when you are developing WebForms applications you can profit a lot from that.&lt;br /&gt;
I like the book, because it looks a bit further than just ASP.NET MVC as it comes out of the box. With chapters about &amp;nbsp;full system testing, AutoMapper, MvcContrib and NHibernate it deals with advanced topics that are neglected in most other books about MVC.&amp;nbsp;The authors give a somewhat more opinionated overview how modern web applications should be created. This makes the book stand out among typical MVC books.&lt;br /&gt;
What I miss in the book is primarily the integration of MVC with the EntityFramework. The book only focuses on NHibernate. This was the right thing to do with the first version of MVC, however today the EntityFramework has made a lot of progress, and in my opinion it should be considered the default choice for ASP.NET MVC.&lt;br /&gt;
If you are already familiar with ASP.NET MVC or have even read a &lt;a href="http://manning.com/palermo/"&gt;previous&lt;/a&gt; &lt;a href="http://manning.com/palermo2/"&gt;version&lt;/a&gt; of the book, don't expect to learn too much about the new features of MVC 4. Only the last two chapters of the book deal with specifics of the fourth release of the framework (probably the book was initially planned for MVC 3, but the fast release cycle of the MVC team made the authors skip directly to MVC 4).&lt;br /&gt;
Nevertheless, for developers that want to learn MVC, I think this book should be a must-read.&lt;br /&gt;
&lt;div style="font-family: 'Lucida Grande';"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="clear: right; font-family: 'Lucida Grande'; font-size: 10px;"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border-color: initial; border-style: none; border-width: 0px; margin: 0px;" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/nk1l2m032v8" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 05 Jul 2012 22:06:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/8509399615475442313/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="2 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=8509399615475442313" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8509399615475442313?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8509399615475442313?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-07-11T14:23:24+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">Another quote made it on the cover of a manning title: &lt;a href="http://manning.com/palermo3/"&gt;
ASP.NET MVC 4 in Action&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;img alt="MVC4" border="0" height="224" src="http://lh3.ggpht.com/-ro7DH4UP50I/T_Xz0Pmxu-I/AAAAAAAABP8/Sl_LDTIPxSY/MVC4.jpg?imgmax=800" title="MVC4.jpg" width="350" style="border:none; display:block; margin-left:auto; margin-right:auto"&gt;&lt;br&gt;
&lt;br&gt;
&lt;a href="http://manning.com/palermo3/"&gt;&lt;img alt="Palermo3 cover150" border="0" height="188" src="http://lh6.ggpht.com/-FafbACKdghY/T_Xz1IZY57I/AAAAAAAABQE/N2lR6ujZiKg/palermo3_cover150.jpeg?imgmax=800" title="palermo3_cover150.jpeg" width="150" style="border:none; float:left; padding-bottom:1px; padding-right:10px"&gt;&lt;/a&gt;I
 think this is a good book for developers that want to learn ASP.NET MVC. And I think today every .NET Web Developer should learn MVC. Learning MVC will help you understand basic web concepts and even when you are developing WebForms applications you can profit
 a lot from that.&lt;br&gt;
I like the book, because it looks a bit further than just ASP.NET MVC as it comes out of the box. With chapters about &amp;nbsp;full system testing, AutoMapper, MvcContrib and NHibernate it deals with advanced topics that are neglected in most other books about MVC.&amp;nbsp;The
 authors give a somewhat more opinionated overview how modern web applications should be created. This makes the book stand out among typical MVC books.&lt;br&gt;
What I miss in the book is primarily the integration of MVC with the EntityFramework. The book only focuses on NHibernate. This was the right thing to do with the first version of MVC, however today the EntityFramework has made a lot of progress, and in my
 opinion it should be considered the default choice for ASP.NET MVC.&lt;br&gt;
If you are already familiar with ASP.NET MVC or have even read a &lt;a href="http://manning.com/palermo/"&gt;
previous&lt;/a&gt; &lt;a href="http://manning.com/palermo2/"&gt;version&lt;/a&gt; of the book, don't expect to learn too much about the new features of MVC 4. Only the last two chapters of the book deal with specifics of the fourth release of the framework (probably the book
 was initially planned for MVC 3, but the fast release cycle of the MVC team made the authors skip directly to MVC 4).&lt;br&gt;
Nevertheless, for developers that want to learn MVC, I think this book should be a must-read.&lt;br&gt;
&lt;div style="font-family:'Lucida Grande'"&gt;&lt;br&gt;
&lt;/div&gt;
&lt;div style="clear:right; font-family:'Lucida Grande'; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border-color:initial; border-style:none; border-width:0px; margin:0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=nk1l2m032v8:ZY8TuhXJSR8:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=nk1l2m032v8:ZY8TuhXJSR8:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/nk1l2m032v8" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-11T14:23:24.428+02:00</app:edited>
      <media:thumbnail url="http://lh3.ggpht.com/-ro7DH4UP50I/T_Xz0Pmxu-I/AAAAAAAABP8/Sl_LDTIPxSY/s72-c/MVC4.jpg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/07/bookreview-mvc4-in-action.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634769352000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634769352000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634769352000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>ReSharper Tips and Tricks and Real World MVC with Hadi Hariri</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 3. Juli 2012 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;ReSharper Tips and Tricks und Real World MVC mit Hadi Hariri&lt;/h3&gt;
&lt;p&gt;Bevor nun definitiv in die Sommerpause starten, haben wir noch einen krönenden Abschluss. Dank der Zusammenarbeit mit der .NET Usergroup Zentralschweiz können wir Hadi Hariri mit 2 Vorträgen willkommen heissen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tipps and Tricks ReSharper&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this session, Hadi Hariri gives an hour worth of ReSharper tips and tricks. He covers multiple features related to navigation, generating code, selecting and rearranging code, refactoring code and project items, and using structural search and replace
 to create custom code inspections. He also discovers unexpected bugs in a pre-release ReSharper build that he's using, and highlights some of the new features for web developers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real World MVC&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET MVC is coming up to its 4rd incarnation and still we see developers applying bad practices when using the framework. In this session we’ll go over a series of Do’s and Don’ts when it comes to application development with ASP.NET MVC and see how to
 get the best out of the framework and leave the bad things behind, by applying a series of real-world experiences.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About Hadi Hariri&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hadi Hariri is a developer, speaker and Technical Evangelist at JetBrains. His passions include software architecture and web development. Book author and frequent contributor to developer publications, Hadi has been speaking at industry events for over
 a decade. He is based in Spain where he lives with his wife and three sons. He is also an ASP.NET MVP and ASP.NET Insider.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/resharper-tips-and-tricks-real-world-mvc-hadi-hariri-1098360" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbemvc&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
</description>
      <pubDate>Tue, 03 Jul 2012 18:00:00 +0200</pubDate>
    </item>
    <item p3:etag="W/&quot;CUcBQXk4cCp7ImA9WhJSEkw.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-6970424623096579496</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/BXSkzzPg1c0/quotes-of-week-agile-backfire.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">quote</category>
      <title>Quotes of the Week: Agile Backfire</title>
      <description>&lt;div style="max-width: 400px;"&gt;&lt;img align="right" alt="quotes2.jpg" border="0" src="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/quotes2.jpg?imgmax=800" style="margin: 0px 0px 10px 10px;" width="120" /&gt;&lt;div style="max-width: 240px;"&gt;&lt;blockquote&gt;The single most important thing on a project is picking the right people. If you have good people then it doesn't matter if you are using Scrum or not, it will turn out well anyway.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://vimeo.com/43808771"&gt;Jimmy Nilsson, NDC 2012&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;We were used to getting shit done … then they told us about Agile.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://vimeo.com/43672296"&gt;Hadi Hariri, NDC 2012&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote&gt;There are no agile projects. Nor were there ever any waterfall projects. What we had were just a bunch of guys trying to get a bunch of stuff done.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://vimeo.com/43624500"&gt;Uncle Bob, NDC 2012&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;We must destroy these methodologies that get in the way of programming.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://programming-motherfucker.com/"&gt;The Manifesto of Programming, Motherfucker&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;These statements make even less sense. They are just babble, and they’re not about your trade in any conceivable way.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.darkgreyindustries.com/wordpress/?p=122"&gt;About the&amp;nbsp;Manifesto for Plumbing Craftsmanship&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote&gt;I don't read agile books. They are a waste of time! &lt;br /&gt;
&lt;br /&gt;
Agile books out there are just people telling stories about stuff. Stories are great -- love to hear them. But I can't trust the authors of most of these books to tell honest stories and learn honest lessons from them. Instead they have a theme. &lt;br /&gt;
&lt;br /&gt;
The problem is, real life doesn't have a theme.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;-&amp;nbsp;&lt;a href="http://whattofix.com/blog/archives/2010/09/agile-ruined-my.php"&gt;Agile Ruined my Life&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote&gt;I used to be an agile consultant, but I am alright now.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://vimeo.com/43624500"&gt;Dan North, NDC 2012&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="align: right; clear: right; font-size: 10px;"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border: none; margin: 0px 0px 0px 0px;" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/BXSkzzPg1c0" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 02 Jul 2012 00:22:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/6970424623096579496/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="2 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=6970424623096579496" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/6970424623096579496?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/6970424623096579496?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-07-02T09:10:50+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;div style="max-width:400px"&gt;&lt;img align="right" alt="quotes2.jpg" border="0" src="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/quotes2.jpg?imgmax=800" width="120" style="margin:0px 0px 10px 10px"&gt;
&lt;div style="max-width:240px"&gt;
&lt;blockquote&gt;The single most important thing on a project is picking the right people. If you have good people then it doesn't matter if you are using Scrum or not, it will turn out well anyway.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://vimeo.com/43808771"&gt;Jimmy Nilsson, NDC 2012&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;blockquote&gt;We were used to getting shit done … then they told us about Agile.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://vimeo.com/43672296"&gt;Hadi Hariri, NDC 2012&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align:right"&gt;&lt;br&gt;
&lt;/div&gt;
&lt;blockquote&gt;There are no agile projects. Nor were there ever any waterfall projects. What we had were just a bunch of guys trying to get a bunch of stuff done.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://vimeo.com/43624500"&gt;Uncle Bob, NDC 2012&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;blockquote&gt;We must destroy these methodologies that get in the way of programming.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://programming-motherfucker.com/"&gt;The Manifesto of Programming, Motherfucker&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;blockquote&gt;These statements make even less sense. They are just babble, and they’re not about your trade in any conceivable way.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://www.darkgreyindustries.com/wordpress/?p=122"&gt;
About the&amp;nbsp;Manifesto for Plumbing Craftsmanship&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align:right"&gt;&lt;br&gt;
&lt;/div&gt;
&lt;blockquote&gt;I don't read agile books. They are a waste of time! &lt;br&gt;
&lt;br&gt;
Agile books out there are just people telling stories about stuff. Stories are great -- love to hear them. But I can't trust the authors of most of these books to tell honest stories and learn honest lessons from them. Instead they have a theme.
&lt;br&gt;
&lt;br&gt;
The problem is, real life doesn't have a theme.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://whattofix.com/blog/archives/2010/09/agile-ruined-my.php"&gt;Agile Ruined my Life&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align:right"&gt;&lt;br&gt;
&lt;/div&gt;
&lt;blockquote&gt;I used to be an agile consultant, but I am alright now.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://vimeo.com/43624500"&gt;Dan North, NDC 2012&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border:none; margin:0px 0px 0px 0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=BXSkzzPg1c0:MbKQygGMZdw:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=BXSkzzPg1c0:MbKQygGMZdw:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/BXSkzzPg1c0" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-02T09:10:50.738+02:00</app:edited>
      <media:thumbnail url="http://lh4.ggpht.com/_X3kaawac_g4/S8uT4AW4WKI/AAAAAAAAA0I/PbqnbnH3BdI/s72-c/quotes2.jpg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/07/quotes-of-week-agile-backfire.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;CEEFQ3YzfSp7ImA9WhJTF0k.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-2463946851914074973</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/eAY2E8uTaxc/gojkos-5-bdd-myths.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">BDD</category>
      <title>Gojko's 5 BDD myths</title>
      <description>&lt;a href="http://2.bp.blogspot.com/-Usef7LA-iVo/T-mzXwlnshI/AAAAAAAABPw/EZO8dpKzKGY/s1600/unicorn.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-Usef7LA-iVo/T-mzXwlnshI/AAAAAAAABPw/EZO8dpKzKGY/s200/unicorn.jpg" width="187" /&gt;&lt;/a&gt;Primarily for my own reference I am listing the 5 myths that &lt;a href="http://gojko.net/"&gt;Gojko Adzic&lt;/a&gt; is busting in his presentation: &lt;a href="http://vimeo.com/43612884"&gt;&lt;b&gt;Busting BDD Myths&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Go watch it, it's brilliant ... and while you are at it watch also his even more provoking presentation &lt;a href="http://vimeo.com/43612920"&gt;Reinventing Software Quality&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Myth #1: Instoolation&lt;/b&gt;&lt;br /&gt;
Belief that process problems can be solved by installing a tool&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Myth #2: Businessting&lt;/b&gt;&lt;br /&gt;
Belief that business users should write acceptance tests&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Myth #3: Acceptegration&lt;/b&gt;&lt;br /&gt;
Belief that tests are either unit of acceptance-integration&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Myth #4: Rolation&lt;/b&gt;&lt;br /&gt;
&amp;lt;insert role&amp;gt; should do BDD in isolation (eg testers do everything)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Myth #5: Longression&lt;/b&gt;&lt;br /&gt;
Belief that the long term value of BDD is in regression testing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And as completion the &lt;a href="http://jamesshore.com/Blog/Five-Ways-to-Misuse-Fit.html"&gt;five ways to misuse FIT by James Shore&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
Misuse #1: Use Fit for Test Automation&lt;br /&gt;
Misuse #2: Customer? What Customer?&lt;br /&gt;
Misuse #3: Write Integration Tests&lt;br /&gt;
Misuse #4: Spin Your Propeller&lt;br /&gt;
Misuse #5: Specify Everything &lt;br /&gt;
&lt;br /&gt;
A conclusion from all this myth-busting is probably that BDD is a concept that is rarely understood and still very much in flux:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
BDD starts out as "tests are specs" now it's "full stack methodology" wondering where it will stop!&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
-&lt;a href="https://twitter.com/refractalize/status/11743724167"&gt;@refractalize&lt;/a&gt; &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
There's a cargo cult of Cucumbering going on and people need a reminder for when it's a good fit.&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
-&lt;a href="https://twitter.com/dhh/status/52814923046191105"&gt;@dhh&lt;/a&gt; &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
If we wait another year, then practicing BDD will be identical to what XP was in 1999&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
-&lt;a href="http://tech.groups.yahoo.com/group/extremeprogramming/message/157632"&gt; Quote from a discussion in Yahoo Groups &lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/eAY2E8uTaxc" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 26 Jun 2012 22:28:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/2463946851914074973/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=2463946851914074973" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/2463946851914074973?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/2463946851914074973?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-06-26T22:30:12+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">&lt;a href="http://2.bp.blogspot.com/-Usef7LA-iVo/T-mzXwlnshI/AAAAAAAABPw/EZO8dpKzKGY/s1600/unicorn.jpg" style="clear:right; float:right; margin-bottom:1em; margin-left:1em"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-Usef7LA-iVo/T-mzXwlnshI/AAAAAAAABPw/EZO8dpKzKGY/s200/unicorn.jpg" width="187"&gt;&lt;/a&gt;Primarily
 for my own reference I am listing the 5 myths that &lt;a href="http://gojko.net/"&gt;Gojko Adzic&lt;/a&gt; is busting in his presentation:
&lt;a href="http://vimeo.com/43612884"&gt;&lt;b&gt;Busting BDD Myths&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
Go watch it, it's brilliant ... and while you are at it watch also his even more provoking presentation
&lt;a href="http://vimeo.com/43612920"&gt;Reinventing Software Quality&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Myth #1: Instoolation&lt;/b&gt;&lt;br&gt;
Belief that process problems can be solved by installing a tool&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Myth #2: Businessting&lt;/b&gt;&lt;br&gt;
Belief that business users should write acceptance tests&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Myth #3: Acceptegration&lt;/b&gt;&lt;br&gt;
Belief that tests are either unit of acceptance-integration&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Myth #4: Rolation&lt;/b&gt;&lt;br&gt;
should do BDD in isolation (eg testers do everything)&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Myth #5: Longression&lt;/b&gt;&lt;br&gt;
Belief that the long term value of BDD is in regression testing&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
And as completion the &lt;a href="http://jamesshore.com/Blog/Five-Ways-to-Misuse-Fit.html"&gt;
five ways to misuse FIT by James Shore&lt;/a&gt;:&lt;br&gt;
&lt;br&gt;
Misuse #1: Use Fit for Test Automation&lt;br&gt;
Misuse #2: Customer? What Customer?&lt;br&gt;
Misuse #3: Write Integration Tests&lt;br&gt;
Misuse #4: Spin Your Propeller&lt;br&gt;
Misuse #5: Specify Everything &lt;br&gt;
&lt;br&gt;
A conclusion from all this myth-busting is probably that BDD is a concept that is rarely understood and still very much in flux:&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;BDD starts out as &amp;quot;tests are specs&amp;quot; now it's &amp;quot;full stack methodology&amp;quot; wondering where it will stop!&lt;br&gt;
&lt;div style="text-align:right"&gt;-&lt;a href="https://twitter.com/refractalize/status/11743724167"&gt;@refractalize&lt;/a&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;There's a cargo cult of Cucumbering going on and people need a reminder for when it's a good fit.&lt;br&gt;
&lt;div style="text-align:right"&gt;-&lt;a href="https://twitter.com/dhh/status/52814923046191105"&gt;@dhh&lt;/a&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;If we wait another year, then practicing BDD will be identical to what XP was in 1999&lt;br&gt;
&lt;div style="text-align:right"&gt;-&lt;a href="http://tech.groups.yahoo.com/group/extremeprogramming/message/157632"&gt; Quote from a discussion in Yahoo Groups
&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;br&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=eAY2E8uTaxc:UK32ZzphAZM:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=eAY2E8uTaxc:UK32ZzphAZM:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/eAY2E8uTaxc" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-26T22:30:12.885+02:00</app:edited>
      <media:thumbnail url="http://2.bp.blogspot.com/-Usef7LA-iVo/T-mzXwlnshI/AAAAAAAABPw/EZO8dpKzKGY/s72-c/unicorn.jpg" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/06/gojkos-5-bdd-myths.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1224</guid>
      <link>http://blog.eweibel.net/?p=1224</link>
      <category>First experiencies</category>
      <category>New technology</category>
      <category>Private</category>
      <title>My personal wrap-up of the NDC 2012</title>
      <description>I was at the Norwegian Developer Conference (NDC) 2012 in Oslo. It is one of the best conferences I know in Europe. One reason is, that a lot of alpha-geeks are speaking there. There were during three days 8 parallels tracks, so you have to manage your
 program. My program looked like this: Wednesday, 6.6.2012 [...]</description>
      <pubDate>Wed, 20 Jun 2012 22:43:34 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1224#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" border="0" align="right" src="http://i2.wp.com/www.ndcoslo.com//images/212151/430244.jpg" data-recalc-dims="1" /&gt;I was at the Norwegian Developer Conference (&lt;a href="http://www.ndcoslo.com/" target="_blank"&gt;NDC&lt;/a&gt;) 2012 in Oslo. It is one of the best conferences I know in Europe. One reason is, that a lot of &lt;a href="http://www.martinfowler.com/bliki/AlphaGeek.html" target="_blank"&gt;alpha-geeks&lt;/a&gt; are speaking there.&lt;/p&gt;
&lt;p&gt;There were during three days 8 parallels tracks, so you have to manage your program. My program looked like this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wednesday, 6.6.2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43524962" target="_blank"&gt;Keynote, Aral Balkan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43536417" target="_blank"&gt;Decisions, Decisions, Dan North&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43536488" target="_blank"&gt;Professional Software Development, Robert C. Martin (Uncle Bob)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43548633" target="_blank"&gt;Agile Estimating, Mike Cohn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43549083" target="_blank"&gt;Modeling Distributed Systems with NServiceBus Studio, Udi Dahan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43549084" target="_blank"&gt;Fakes, Isolation Unit Tests, Jonathan &amp;#8220;Peli&amp;#8221; de Halleux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43588434" target="_blank"&gt;Social Clairvoyance, Gary Short&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thursday, 7.6.2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43612952" target="_blank"&gt;The process, technology and practice of Continuous Delivery, Dave Farley&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43612884" target="_blank"&gt;Busting the BDD myths, Gojko Adzic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43612920" target="_blank"&gt;Reinventing Softare Quality, Gojko Adzic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43624438" target="_blank"&gt;Moving from Scrum to Kanban, Rachel Davies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43624435" target="_blank"&gt;The surprising science behind agile leadership, Jonathan Rasmusson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43659003" target="_blank"&gt;Dealing with Dynamically-Typed Legacy Code, Micheal Feathers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43659006" target="_blank"&gt;Deep Design Lessons, Micheal Feathers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Friday, 8.6.2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43672296" target="_blank"&gt;Developers: The Prima Donnas of the 21st Century, Hadi Hariri&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43676912" target="_blank"&gt;RabbitMQ Hands On, Alvaro Videla&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43676938" target="_blank"&gt;NDC Cage Match: NodeJS vs. ASP.NET, Rob Conery, Damian Edwards, Jon Galloway&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43808810" target="_blank"&gt;Clojure for the Web, Bodil Stokke&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Responsive Web Design, Bruce Lawson&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43808772" target="_blank"&gt;Caring about Code Quality, Venkat Subramaniam&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlights&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One highlight was the speaker &lt;a href="http://gojko.net/" target="_blank"&gt;Gojko Adz&lt;/a&gt;ic. I knew him already, because I read his blog. But I didn&amp;#8217;t know how entertaining he could be without loose a bit of useful information. I liked also his sarcasm. Another highlight was the rant of &lt;a href="http://hadihariri.com/" target="_blank"&gt;Hadi Hariri&lt;/a&gt; about not getting things done. But one of the biggest highlights was the keynote by &lt;a href="http://aralbalkan.com/" target="_blank"&gt;Aral Balkan&lt;/a&gt;. It was a fresh clear and motivating keynote, just great.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There were a lot of talks about software quality, which was nice to see. This is a topic which is also very important for myself. But there weren&amp;#8217;t that much new fresh talks about the topic itself. The only exception here was the second talk of Gojko.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1224&amp;amp;title=My%20personal%20wrap-up%20of%20the%20NDC%202012" id="wpa2a_6"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=99' rel='bookmark' title='ASP.NET MVC arrived'&gt;ASP.NET MVC arrived&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1224</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1213</guid>
      <link>http://blog.eweibel.net/?p=1213</link>
      <category>Agile</category>
      <category>Good practices</category>
      <category>Software engineering</category>
      <title>Quality isn’t a tool–You can’t install it!</title>
      <description>Did you ask yourself why a team in an organization produces very good software quality and another team in the same organization just struggles to get things done and those things are in really bad quality? Interesting is also that for both teams exists
 the same rules (methologies, procedures, tools, frameworks, etc.). But why could [...]</description>
      <pubDate>Wed, 20 Jun 2012 20:52:11 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1213#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;a href="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36622856_S.jpg" rel="lightbox[1213]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="time, quality and money concept" border="0" alt="time, quality and money concept" align="right" src="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36622856_S_thumb.jpg?resize=290%2C209" data-recalc-dims="1" /&gt;&lt;/a&gt;Did you ask yourself why a team in an organization produces very good software quality and another team in the same organization just struggles to get things done and those things are in really bad quality? Interesting is also that for both teams exists the same rules (methologies, procedures, tools, frameworks, etc.). But why could and does this happen?&lt;/p&gt;
&lt;p&gt;Some people – mostly managers or vendors – try to distill quality to a recipe. Vendors could sell it expensively (with consulting) and managers can buy it to prove their bosses that they didn’t make something wrong (they used the standard procedures and tools). This whole thing is ridiculous, also because it happens again and again (also with agile practices).&lt;/p&gt;
&lt;p&gt;So, you can’t buy quality, neither you can install it in your team or organization. Also it isn’t a tool, which makes the quality (many managers think that frameworks guarantee quality, which is completely wrong). But why can one team be so much better than another one? So we are back to my question at the beginning of this blog post.&lt;/p&gt;
&lt;p&gt;The only reason for this difference are the people. The people or some of them in the good team care about their profession. So they keep up-to-date (read blogs, articles, books, etc.) and leads other team members to become better. But the one of the most important things is unfortunately discipline. So you have to improve yourself constantly (keep you out of the comfort zone) and look always for improvements for you and your team. And yes, that isn’t easy.&lt;/p&gt;
&lt;p&gt;Once you are one of those people, be aware of being dogmatic, just stay pragmatic but insist on the important principles as long your arguments are reasonable.&lt;/p&gt;
&lt;p&gt;And the managers? If they are not able to change themselves (especially the middle management), then it’s up to you to change the organization – it’s your career and life.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1213&amp;amp;title=Quality%20isn%E2%80%99t%20a%20tool%E2%80%93You%20can%E2%80%99t%20install%20it%21" id="wpa2a_8"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=1033' rel='bookmark' title='Data quality as a business value'&gt;Data quality as a business value&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1213</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">13</slash:comments>
    </item>
    <item>
      <guid isPermaLink="false">http://www.sqlpassion.at/RegistrationPerf_CH.aspx</guid>
      <link>http://csharp.at/Registration_CH.aspx</link>
      <author>info@dnug-bern.ch</author>
      <category>.NET User Group Bern Veranstaltungshinweis</category>
      <title>SQL Server Performance Tuning and Troubleshooting Workshop in Bern (19. - 21. Juni 2012)</title>
      <description>
&lt;div style="background-color:#eee; padding:5px"&gt;&lt;img src="http://www.dnug-bern.ch/events/sql/Banner2.jpg" alt="" style="width:500px"&gt;
&lt;p&gt;Freitags - 16:30. Sie erhalten eine Email, dass Ihr SQL Server Installation in enorme Performance- Probleme geraten ist! Was nun? Wie können Sie das Problem identifizieren und effektiv lösen? Welche Tools stehen Ihnen dazu mit dem SQL Server 2008 (R2) zur
 Verfügung? &lt;/p&gt;
&lt;p&gt;In diesem Workshop werden Sie eine Reihe von unterschiedlichen Tools kennenlernen, mit denen Sie ein effektives Troubleshooting einer SQL Server 2008 (R2) Installation durchführen können. Sie werden einerseits lernen, die entsprechenden Problembereiche anhand
 bestimmter Scripte/Tools zu identifizieren, um diese anschließend aufgrund der gewonnenen Erkenntnisse zu beseitigen.
&lt;/p&gt;
&lt;p&gt;Mitglieder der .NET User Group Bern profitieren von einem zusätzlichen Rabatt. Der Rabattcode steht für Mitglieder in unserem internen Xing-Forum zur Verfügung. Bei einer Anmeldung diesen im Bemerkungsfeld des Anmeldeformulars eintragen.
&lt;/p&gt;
&lt;a href="http://www.sqlpassion.at/RegistrationPerf_CH.aspx"&gt;more&lt;/a&gt; &lt;/div&gt;
</description>
      <pubDate>Mon, 18 Jun 2012 08:00:00 Z</pubDate>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634751208000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634751208000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634751208000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>CQRS mit Roger Rudin</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&amp;nbsp;
&lt;h2 style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; font-size:1.4em; font-weight:500; color:#555555; font-family:'Trebuchet MS',Arial,Helvetica"&gt;
Dienstag, 12. Juni 2012 (18:00 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3 style="margin-top:0.55em; margin-right:0px; margin-bottom:0.3em; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; color:#555555; font-family:'Trebuchet MS',Arial,Helvetica"&gt;
CQRS mit Roger Rudin&lt;/h3&gt;
&lt;p&gt;Kurz bevor es in die Sommerpause geht, treffen wir uns zum Thema CQRS mit Roger Rudin&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Immer mehr Entwickler verwenden Messaging Patterns und Domain Modelle in ihren N-Tier Architekturen. Manche sind über die zusätzliche Komplexität überrascht und fangen an sich zu fragen, ob sich das überhaupt lohnt. In dieser Präsentation stelle ich euch
 die fehlenden Patterns vor, welche benötigt werden um die Komplexität aus verteilten Systemarchitekturen herauszunehmen und diese zu vereinfachen.&lt;br&gt;
&lt;/p&gt;
&lt;strong&gt;Über Roger Rudin &lt;/strong&gt;
&lt;p&gt;Roger Rudin arbeitet als Software Architekt und agile Coach bei bbv Software Services AG.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Er beschäftigt sich seit vielen Jahren mit .NET-Technologien mit Schwerpunkt verteilte Systeme und Persistenz.&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/cqrs-roger-rudin-1092506" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbecqrs&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Tue, 12 Jun 2012 18:00:00 +0200</pubDate>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634745160000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634745160000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634745160000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Spontan-Event SQL Server Abfrage Tuning mit Klaus Aschenbrenner</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 5. Juni 2012 (18:30 bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Spontan-Event SQL Server Abfrage Tuning mit Klaus Aschenbrenner&lt;/h3&gt;
&lt;p&gt;Wir freuen uns darüber, dass uns Klaus Aschenbrenner spontan einen Besuch abstattet und uns zum Thema SQL Server Abfrage Tuning Profiwssen weitergeben wird.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Du hast eine datenbankbasierte Anwendung welche bei steigender Datenmenge immer langsamer und langsamer wird? Dann bist Du in dieser Session genau richtig! In dieser Session lernst Du nämlich, wie Du Abfragen im SQL Server durch ein geziehlten Einsatz von
 Execution Plans tunen kannst. Hier wirst Du lernen, auf welche Arten der SQL Server Daten abfragt, in welchen verschiedenen Varianten Daten er zusammengejoined, und wie Du hier bei Performance-Problemen entsprechend reagieren kannst.
&lt;/p&gt;
&lt;p&gt;Aus dem Inhalt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Die JOIN Techniken des SQL Servers &lt;/li&gt;&lt;li&gt;Table/Index Scan vs. Index Seek &lt;/li&gt;&lt;li&gt;Vermeidung von Bookmark-Lookups &lt;/li&gt;&lt;li&gt;Geziehlter Einsatz von Indizes &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Über Klaus Aschenbrenner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Klaus Aschenbrenner provides independent SQL Server Consulting Services across Europe and the US. Klaus works with the .NET Framework and especially with the SQL Server 2005/2008 (R2) from the very beginnings. In the years 2004 - 2005 Klaus was entitled
 with the MVP award from Microsoft for his tremendous support in the .NET Community. Klaus has also written the book Pro SQL Server 2008 Service Broker which was published by Apress in the Summer of 2008. Further information about Klaus you can find on his
 homepage at &lt;a href="http://SQLpassion.at"&gt;http://SQLpassion.at&lt;/a&gt;. He also twitters at http://twitter.com/Aschenbrenner.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/spontan-event-sql-server-abfrage-tuning-klaus-aschenbrenner-1096365" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbesql&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Tue, 05 Jun 2012 18:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/06/05/neue-moeglichkeiten-mit-dem-t4-editor-von-tangible.html</guid>
      <link>http://www.databinding.net/blog/post/2012/06/05/neue-moeglichkeiten-mit-dem-t4-editor-von-tangible.html</link>
      <author> (René)</author>
      <title>Neue Möglichkeiten mit dem T4-Editor von Tangible</title>
      <description>Der T4-Editor von Tangible hat ein paar neue Funktionen verpasst bekommen. Was mir am besten gefällt, ist die bessere Integration in Visual Studio. Microsoft selbst schaffte es nicht, obwohl ankündi...</description>
      <pubDate>Tue, 05 Jun 2012 13:16:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt; Der T4-Editor von Tangible hat ein paar neue Funktionen verpasst bekommen. Was mir am besten gefällt, ist die bessere Integration in Visual Studio. Microsoft selbst schaffte es nicht, obwohl ankündigt, die Intellisense in VS 2012 für T4 zu ermöglichen. &lt;/p&gt; &lt;p&gt; In dieser Hinsicht gibt nachfolgendes Video einen kurzen und informativen Überblick über die wichtigsten Neuerungen. &lt;/p&gt; </content:encoded>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634739112000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634739112000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634739112000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>JavaScript für C#-Entwickler mit Golo Roden</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 29.&amp;nbsp;Mai 2012 (18:00 bis 21:00 Uhr) &lt;/h2&gt;
&lt;h3&gt;JavaScript für C#-Entwickler mit Golo Roden im Bären Ostermundigen&lt;br&gt;
&lt;/h3&gt;
&lt;p&gt;Was im November 2011 mit einem Gesamtüberblick zum Thema &amp;quot;Rich-Internet Apps &amp;amp; Mobile Anwendungen mit HTML5, Javascript und Azure&amp;quot; begann, betrachten wir nun weiter in detaillierter Form. Nachdem wir mit Kay Herzam und Roland Krummenacher das Thema Azure
 vertieften, ist beim nächsten Treffen JavaScript an der Reihe. Für dieses Thema können wir erneut Golo Roden begrüssen, er wird JavaScript aus der Sicht eines C# Entwicklers beleuchten.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Aufgrund der hohen Resonanz haben wir kurzfristig den Veranstaltungsort für dieses Event verlegt, so haben wir jetzt insgesamt 70 Plätze zur Verfügung.&amp;nbsp;Der Veranstaltungsort Bären in Ostermundigen ist nicht weit von der WISS entfernt. Mit der Linie 10 fährst
 du 2 Haltestellen weiter bis Bahnhof Ostermundigen. Es stehen&amp;nbsp;zudem 100 Parkplätze zur Verfügung.&amp;nbsp;Weitere Informationen zur Anfahrt findest du
&lt;a href="http://www.baeren-ostermundigen.ch/anfahrt.html" target="_blank"&gt;hier&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Der spontane Wechsel wäre ohne unsere regionalen &lt;a href="http://dnug-bern.ch/sponsors2012.aspx" target="_blank"&gt;
Sponsoren&lt;/a&gt; nich möglich gewesen. Vielen Dank!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Geplante Agenda&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Begrüssung/News&lt;/li&gt;&lt;li&gt;Warm up XSS - The new Buffer Overflow&lt;/li&gt;&lt;li&gt;JavaScript für C# Entwickler Teil 1&lt;/li&gt;&lt;li&gt;Apéro/Networking&lt;/li&gt;&lt;li&gt;JavaScript für C# Entwickler Teil 2&lt;/li&gt;&lt;li&gt;Verlosung/Netwoking&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Seit Monaten bereitest Du dich auf Windows 8 und WinRT vor. Nun hat gerade Dein wichtigster Kunde angerufen, um Dir den Auftrag zur Entwicklung einer entsprechenden Anwendung zu erteilen. Dein anfänglicher Stolz ist jedoch schnell Ernüchterung gewichen,
 als die Anforderung genannt wurde, dass die Anwendung in JavaScript geschrieben werden müsse ... Diese Sprache hast Du bislang nämlich vollständig außer Acht gelassen. Was Du jetzt brauchst, ist ein JavaScript-Crashkurs für C#-Entwickler, der Dir auf die Sprünge
 hilft. Golo Roden stellt in zwei Stunden (fast) alles vor, was Du über JavaScript wissen musst, und zeigt - ganz nebenbei - dass JavaScript-Entwicklung nicht bedeutet, steinzeitlich mit vi auf der Konsole arbeiten zu müssen.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Über Golo Roden&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Golo Roden ist freiberuflicher Wissensvermittler und Technologieberater für Webtechnologien, Codequalität und agile Methoden. Zu diesen Themen berät er Firmen bei der Evaluierung, Erforschung und Verwendung geeigneter Technologien und Methoden. Darüber hinaus
 ist er journalistisch für Fachzeitschriften und als Referent und Content Manager für Konferenzen tätig. Für sein qualitativ hochwertiges Engagement in der Community wurde Golo von Microsoft als Most Valuable Professional (MVP) für C# ausgezeichnet.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/javascript-entwickler-golo-roden-1079895" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbejs2&lt;/strong&gt;.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Tue, 29 May 2012 18:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/04/22/entity-framework-43-building-blocks-oder-wie-steuer-ich-die-datenbankversion.html</guid>
      <link>http://www.databinding.net/blog/post/2012/04/22/entity-framework-43-building-blocks-oder-wie-steuer-ich-die-datenbankversion.html</link>
      <author> (René)</author>
      <title>Entity Framework 4.3 - Building Blocks oder wie steuer ich die Datenbankversion</title>
      <description>Gelegentlich kommt es vor, dass die Datenbankversionen pro Umgebung unterschiedlich sein können. Bei meinen ersten versuchen ist mir das mit den SQL-Server Versionen 2005 und 2008 so ergangen. Sofort...</description>
      <pubDate>Sun, 22 Apr 2012 07:04:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Gelegentlich kommt es vor, dass die Datenbankversionen pro Umgebung unterschiedlich sein können. Bei meinen ersten versuchen ist mir das mit den SQL-Server Versionen 2005 und 2008 so ergangen. &lt;/p&gt; &lt;p&gt;Sofort ersichtlich wurde das, wenn die folgende Fehlermeldung im Log zu sehen war: &lt;/p&gt; &lt;p&gt;System.ArgumentException: The version of SQL Server in use does not support datatype 'datetime2' &lt;/p&gt; &lt;p&gt;Um dies in den Griff zu bekommen gibt es das Attribut &amp;quot; &lt;b&gt;ProviderManifestToken &lt;/b&gt;&amp;quot; in der EDMX-Datei. Mit dem ERM-Ansatz lassen sich, neben unterschiedlen Datenbanken, auch unterschiedliche Versionen einer Datenbank verwalten und mappen. Ein sehr interessanter Ansatz bei der Realisierung von Standardsoftware. &lt;/p&gt; &lt;p&gt;Nun stellt sich die Frage, wie mache ich das in Code First mit Schema Migrations? &lt;/p&gt; &lt;p&gt;Der Schlüssel liegt dabei in der Klasse &lt;b&gt;DbModelBuilder &lt;/b&gt;. Beim erstellen kann&amp;nbsp;damit die Datenbankversion definiert werden. &lt;/p&gt; // default
var model = builder.Build(connection); // with version
var model = builder.Build(new DbProviderInfo(&amp;quot;System.Data.SqlClient&amp;quot;, &amp;quot;2005&amp;quot;)); &lt;p&gt;Gerade mit der nächsten Version von SQL Server 2012 wird es sicherlich ähnliche Probleme geben können, wenn die Systemumgebungen trotz ITIL nicht ganz so synchron sind. Bei der erstmaligen Erstellung des Models wird das sicherlich nicht von Bedeutung sein, wohl aber bei Schema Migrations. &lt;/p&gt; &lt;p&gt;Im &lt;a href="http://blog.oneunicorn.com/2012/04/21/code-first-building-blocks/" title="Weitere Informationen" class="external-link-new-window"&gt;Blogbeitrag &lt;/a&gt; von Arthur Vickers finden sich noch andere interessante Punkte die interessant sind, so auch die Aussage das Pluggable Conventions für den Durchschnittsentwickler frühstens mit EF6 nutzbar werden, wenn überhaupt. &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2010/01/16/systemargumentexception-the-version-of-sql-server-in-use-does-not-support-datatype-datetime2.html" title="ITIL ist anders, aber nicht in der realen Welt"&gt;System.ArgumentException: The version of SQL Server in use does not support datatype 'datetime2' &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://blog.oneunicorn.com/2012/04/21/code-first-building-blocks/" title="Blogpost von Arthur Vickers" class="external-link-new-window"&gt;Code First Building Blocks &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item p3:etag="W/&quot;A0AESHc8fCp7ImA9WhJREE0.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-610707558823767045</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/Nz1TWTlItMU/rethinking-automated-testing.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">testing</category>
      <title>Rethinking Automated Testing</title>
      <description>&lt;blockquote class="tr_bq"&gt;
While you’ve been worrying about your BDD adverbs the iFart dev just made $40,000.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;
- &lt;a href="http://iainhunter.wordpress.com/2012/02/21/agile-punks-go-write-an-app/"&gt;Iain Hunter&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Can you give 140 char synopsis of "opportunity cost of TDD?" &lt;br /&gt;
&lt;br /&gt;
Is &lt;a class="  twitter-hashtag pretty-link" href="https://twitter.com/#%21/search/%23TDD" title="#TDD"&gt;#&lt;b&gt;TDD&lt;/b&gt;&lt;/a&gt; always a "Best Practice"? Is there even any such thing? When shouldn't you use it? What could you do instead?&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;
- &lt;a href="https://twitter.com/#%21/tastapod/status/191603564433522688"&gt;Conversation on Twitter&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Testing implementation is terrible terrible terrible.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;
- &lt;a href="http://www.makinggoodsoftware.com/2012/01/27/the-evil-unit-test/#comment-103371"&gt;Matt Rogish&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The pendulum is swinging back and forth in the TDD and developer-testing world...&lt;br /&gt;
I blogged over two years ago about&amp;nbsp;&lt;a href="http://blog.jonasbandi.net/2010/01/testing-backslash-recent-well-grounded.html"&gt;Testing Backlash&lt;/a&gt; and then again one year ago&amp;nbsp;&lt;a href="http://blog.jonasbandi.net/2011/06/thoughts-are-you-too-agile-for-tddbdd.html"&gt;Are you too agile for TDD/BDD?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="Pend" border="0" src="http://lh5.ggpht.com/-15A0CL9uyN0/T4s-cFQpJMI/AAAAAAAABMg/4wjB59wVWCs/pend.jpg?imgmax=800" style="float: right; margin-bottom: 5px; margin-left: 5px;" title="pend.jpg" width="180" /&gt;It seems the time has come for the pendulum to swing by once again. In an almost mystical conjunction a lot of alpha geeks are voicing current "new" insights about automated testing and TDD. &lt;br /&gt;
&lt;br /&gt;
Maybe this is the developer community climbing the ladder to another&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition"&gt;stage of competence&lt;/a&gt; or to another&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/K%C3%BCbler-Ross_model"&gt;stage of grief&lt;/a&gt; (the viewpoint is probably depending of the pains in your current project)… but maybe it is just that alpha-geeks like any other intelligent beings are getting bored after a while and turn to new topics.&lt;br /&gt;
&lt;br /&gt;
Anyways, here is a list of the recent tide of &lt;i&gt;"let's rethink automated testing"&lt;/i&gt;:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Michael Feathers:&amp;nbsp;&lt;a href="https://plus.google.com/104920553571646483561/posts/fmyZi1MxMgo"&gt;Taking Automated Tests Off The Pedestal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DHH:&amp;nbsp;&lt;a href="http://37signals.com/svn/posts/3159-testing-like-the-tsa"&gt;Testing like the TSA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scott Bellware:&amp;nbsp;&lt;a class="ot-anchor" href="http://www.youtube.com/watch?v=LeVvj4HENOQ"&gt;The Inflection Point - How Long can you Safely Avoid Automated Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Alberto Gutierrez:&amp;nbsp;&lt;a href="http://www.makinggoodsoftware.com/2012/01/27/the-evil-unit-test/"&gt;The evil unit test.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dan North: &lt;a href="http://dannorth.net/the-art-of-misdirection/"&gt;The Art of Misdirection: The opportunity cost of TDD&lt;/a&gt;&amp;nbsp;(or in &lt;a href="http://www.programutvikling.no/userfiles/brosjyre.pdf"&gt;the NDC Magazine&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Just for completion I am reenumerating older reflections on the topic:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.obiefernandez.com/content/2011/05/the-dark-side-beckons.html"&gt;The Dark Side Beckons?&lt;/a&gt; by Obie Fernandez&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.m3p.co.uk/blog/2011/04/25/tdd-embracing-failure/"&gt;Test-Driven Development and Embracing Failure&lt;/a&gt; by Steve Freeman&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dalkescientific.com/writings/diary/archive/2009/12/29/problems_with_tdd.html"&gt;Problems with TDD&lt;/a&gt; an Essay by Andrew Dalke. Heavily discussed on &lt;a href="http://dalkescientific.blogspot.com/2009/12/problems-with-tdd.html"&gt;his blog&lt;/a&gt; and on &lt;a href="http://news.ycombinator.com/item?id=1020427"&gt;Hacker News&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ayende's posts: &lt;a href="http://ayende.com/Blog/archive/2009/09/28/even-%3Cli%3Etests-has-got-to-justify-themselves.aspx"&gt;Even tests has got to justify themselves&lt;/a&gt; and &lt;a href="http://ayende.com/Blog/archive/2009/09/30/re-are-you-smart-enough-to-do-without-tdd.aspx"&gt;re: Are you smart enough to do without TDD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;And finally Luce Francis brilliant presentation: &lt;a href="http://www.infoq.com/presentations/francl-testing-overrated;jsessionid=5C1654248C01CA209E70B7A5BEDE81B2"&gt;Testing is Overrated&lt;/a&gt; (matching &lt;a href="http://railspikes.com/2008/7/11/testing-is-overrated"&gt;blog post&lt;/a&gt;, &lt;a href="http://railspikes.com/2008/12/2/testing-is-overrated-great-talk"&gt;slides&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt;&lt;br /&gt;
&lt;a href="https://twitter.com/#%21/girba"&gt;Tudor&lt;/a&gt; shows in &lt;a href="http://www.humane-assessment.com/blog/when-testing-does-not-cut-it"&gt;When testing does not cut it&lt;/a&gt; that testing is not always the best alternative to ensure certain properties of a software system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="clear: right; font-size: 10px;"&gt;
&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border: 0 none; margin: 0px;" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/Nz1TWTlItMU" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 15 Apr 2012 23:32:00 +0200</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/610707558823767045/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="1 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=610707558823767045" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/610707558823767045?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/610707558823767045?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-07-11T14:28:29+02:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;blockquote class="x_tr_bq"&gt;While you’ve been worrying about your BDD adverbs the iFart dev just made $40,000.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://iainhunter.wordpress.com/2012/02/21/agile-punks-go-write-an-app/"&gt;
Iain Hunter&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;Can you give 140 char synopsis of &amp;quot;opportunity cost of TDD?&amp;quot;
&lt;br&gt;
&lt;br&gt;
Is &lt;a class="x_twitter-hashtag x_pretty-link" href="https://twitter.com/#%21/search/%23TDD" title="#TDD"&gt;
#&lt;b&gt;TDD&lt;/b&gt;&lt;/a&gt; always a &amp;quot;Best Practice&amp;quot;? Is there even any such thing? When shouldn't you use it? What could you do instead?&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="https://twitter.com/#%21/tastapod/status/191603564433522688"&gt;
Conversation on Twitter&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;Testing implementation is terrible terrible terrible.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://www.makinggoodsoftware.com/2012/01/27/the-evil-unit-test/#comment-103371"&gt;
Matt Rogish&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
The pendulum is swinging back and forth in the TDD and developer-testing world...&lt;br&gt;
I blogged over two years ago about&amp;nbsp;&lt;a href="http://blog.jonasbandi.net/2010/01/testing-backslash-recent-well-grounded.html"&gt;Testing Backlash&lt;/a&gt; and then again one year ago&amp;nbsp;&lt;a href="http://blog.jonasbandi.net/2011/06/thoughts-are-you-too-agile-for-tddbdd.html"&gt;Are
 you too agile for TDD/BDD?&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;img alt="Pend" border="0" src="http://lh5.ggpht.com/-15A0CL9uyN0/T4s-cFQpJMI/AAAAAAAABMg/4wjB59wVWCs/pend.jpg?imgmax=800" title="pend.jpg" width="180" style="float:right; margin-bottom:5px; margin-left:5px"&gt;It seems the time has come for the pendulum to swing
 by once again. In an almost mystical conjunction a lot of alpha geeks are voicing current &amp;quot;new&amp;quot; insights about automated testing and TDD.
&lt;br&gt;
&lt;br&gt;
Maybe this is the developer community climbing the ladder to another&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition"&gt;stage of competence&lt;/a&gt; or to another&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/K%C3%BCbler-Ross_model"&gt;stage of grief&lt;/a&gt;
 (the viewpoint is probably depending of the pains in your current project)… but maybe it is just that alpha-geeks like any other intelligent beings are getting bored after a while and turn to new topics.&lt;br&gt;
&lt;br&gt;
Anyways, here is a list of the recent tide of &lt;i&gt;&amp;quot;let's rethink automated testing&amp;quot;&lt;/i&gt;:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;Michael Feathers:&amp;nbsp;&lt;a href="https://plus.google.com/104920553571646483561/posts/fmyZi1MxMgo"&gt;Taking Automated Tests Off The Pedestal&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;DHH:&amp;nbsp;&lt;a href="http://37signals.com/svn/posts/3159-testing-like-the-tsa"&gt;Testing like the TSA&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;Scott Bellware:&amp;nbsp;&lt;a class="x_ot-anchor" href="http://www.youtube.com/watch?v=LeVvj4HENOQ"&gt;The Inflection Point - How Long can you Safely Avoid Automated Testing&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;Alberto Gutierrez:&amp;nbsp;&lt;a href="http://www.makinggoodsoftware.com/2012/01/27/the-evil-unit-test/"&gt;The evil unit test.&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;Dan North: &lt;a href="http://dannorth.net/the-art-of-misdirection/"&gt;The Art of Misdirection: The opportunity cost of TDD&lt;/a&gt;&amp;nbsp;(or in
&lt;a href="http://www.programutvikling.no/userfiles/brosjyre.pdf"&gt;the NDC Magazine&lt;/a&gt;)
&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
Just for completion I am reenumerating older reflections on the topic:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.obiefernandez.com/content/2011/05/the-dark-side-beckons.html"&gt;The Dark Side Beckons?&lt;/a&gt; by Obie Fernandez
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.m3p.co.uk/blog/2011/04/25/tdd-embracing-failure/"&gt;Test-Driven Development and Embracing Failure&lt;/a&gt; by Steve Freeman
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dalkescientific.com/writings/diary/archive/2009/12/29/problems_with_tdd.html"&gt;Problems with TDD&lt;/a&gt; an Essay by Andrew Dalke. Heavily discussed on
&lt;a href="http://dalkescientific.blogspot.com/2009/12/problems-with-tdd.html"&gt;his blog&lt;/a&gt; and on
&lt;a href="http://news.ycombinator.com/item?id=1020427"&gt;Hacker News&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;Ayende's posts: &lt;a href="http://ayende.com/Blog/archive/2009/09/28/even-%3Cli%3Etests-has-got-to-justify-themselves.aspx"&gt;
Even tests has got to justify themselves&lt;/a&gt; and &lt;a href="http://ayende.com/Blog/archive/2009/09/30/re-are-you-smart-enough-to-do-without-tdd.aspx"&gt;
re: Are you smart enough to do without TDD&lt;/a&gt; &lt;/li&gt;&lt;li&gt;And finally Luce Francis brilliant presentation: &lt;a href="http://www.infoq.com/presentations/francl-testing-overrated;jsessionid=5C1654248C01CA209E70B7A5BEDE81B2"&gt;
Testing is Overrated&lt;/a&gt; (matching &lt;a href="http://railspikes.com/2008/7/11/testing-is-overrated"&gt;
blog post&lt;/a&gt;, &lt;a href="http://railspikes.com/2008/12/2/testing-is-overrated-great-talk"&gt;
slides&lt;/a&gt;) &lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;b&gt;Update:&lt;/b&gt;&lt;br&gt;
&lt;a href="https://twitter.com/#%21/girba"&gt;Tudor&lt;/a&gt; shows in &lt;a href="http://www.humane-assessment.com/blog/when-testing-does-not-cut-it"&gt;
When testing does not cut it&lt;/a&gt; that testing is not always the best alternative to ensure certain properties of a software system.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border:0 none; margin:0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Nz1TWTlItMU:VR-cmNOz8us:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Nz1TWTlItMU:VR-cmNOz8us:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/Nz1TWTlItMU" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-11T14:28:29.974+02:00</app:edited>
      <media:thumbnail url="http://lh5.ggpht.com/-15A0CL9uyN0/T4s-cFQpJMI/AAAAAAAABMg/4wjB59wVWCs/s72-c/pend.jpg?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/04/rethinking-automated-testing.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/04/15/entity-framework-43-mapping-szenarien.html</guid>
      <link>http://www.databinding.net/blog/post/2012/04/15/entity-framework-43-mapping-szenarien.html</link>
      <author> (René)</author>
      <title>Entity Framework 4.3 Mapping Szenarien</title>
      <description>Vor ein paar Wochen wurde über Twitter gefachsimpelt, welche Vererbungsstrategie Standard bei Code First ist. Es kam sehr schnell die Antwort TPT. Da ich diesen Bereich mit der Version 4.1 durchgetes...</description>
      <pubDate>Sun, 15 Apr 2012 22:58:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Vor ein paar Wochen wurde über Twitter gefachsimpelt, welche Vererbungsstrategie Standard bei Code First ist. Es kam sehr schnell die Antwort TPT. Da ich diesen Bereich mit der Version 4.1 durchgetestet habe und eigentlich TPH der Standard ist, wollte ich nun überprüfen, ob sich etwas zur Version 4.3 geändert hat. &lt;/p&gt; &lt;p&gt;Mit &lt;a href="http://blog.eweibel.net/?p=761" title="Patricks Teil mit NHibernate" class="external-link-new-window"&gt;Partick Weibel &lt;/a&gt; hatte ich vor 2 Jahren im Bereich der Mapping Strategien eine Präsentation zum Thema &amp;quot;Übersicht zwischen NHibernate und dem Entity Framework&amp;quot; bei der &lt;a href="http://www.dnug-bern.ch/presentations.aspx" title="Vortrag vor knapp 2 Jahren bei der .NET User Group Bern" class="external-link-new-window"&gt;.NET User Group Bern &lt;/a&gt; gehalten. Der Schwerpunkt lag dabei auf Business Value, weniger auf Religion. &lt;/p&gt; &lt;p&gt;Diese Beispiele habe ich auch für den Code First Ansatz mit dem Entity Framework nachgeführt, um die Unterschiede zwischen den Vorgehensweisen Bottom Up (DB First), Middle Out (Model First) und Top Down (Code First) zu visualisieren. Herausgekommen ist dabei folgende Übersicht: &lt;/p&gt; Abbildung 1 Mapping Szenarioen (mb = Fluent API) &lt;a href="http://www.databinding.net/uploads/pics/efmapping.PNG" title="Abbildung 1 Mapping Szenarioen (mb = Fluent API)" rel="lightbox[lb790]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/44f8e96d59.png" width="500" height="378" border="0" alt="Abbildung 1" /&gt; &lt;/a&gt; &lt;p&gt;Diese Beispiele habe ich nun auf die Version 4.3-1 aktualisiert und die Standardvererbung überprüft. Es ist immer noch die Strategie TPH. Meine Übersicht ist auch mit der Version 4.3 noch aktuell. ;-) &lt;/p&gt; &lt;p&gt;Im Bereich der Vererbungshierarchie soll es bei TPC Verbesserungen gegeben haben. Bisher war es so, dass nur einfache TPC-Szenarien möglich waren. Daran ändert sich auch nichts. Folgender Code lässt sich auch nicht mit der Version 4.3 mappen: &lt;/p&gt; public abstract class Product { public int Id { get; set; } [StringLength(50)] [Required] public string Name { get; set; } [StringLength(400)] public string Description { get; set; } } public class Book : Product { [StringLength(10)] [Required] public string ISBN10 { get; set; } [StringLength(13)] [Required] public string ISBN13 { get; set; } public int LanguageCD { get; set; } [Required] public int Pages { get; set; } } public class EBook : Book { [Required] public string Filename { get; set; } } public class Hardcover : Book { [StringLength(20)] [Required] public string Size { get; set; } [Required] public double Weight { get; set; } } &lt;p&gt;Im Designer ist dieser Variante auch nur über manuelle Anpassungen im EDMX-File möglich, aber es funktioniert. &lt;/p&gt; &lt;p&gt;Die Mapping Szenarien für Code First stehen auf der Website der .NET User Group Bern zur Verfügung, ein Update auf 4.3.1 muss aber noch gemacht werden. ;-) Bei mir sind die paar Tests auch mit EF 4.3.1 im grünen Bereich. &lt;/p&gt; Abbildung 2 Mapping-Szenarien Tests mit EF 4.3.1 &lt;a href="http://www.databinding.net/typo3temp/pics/e180e60139.png" title="Abbildung 2 Mapping-Szenarien Tests mit EF 4.3.1" rel="lightbox[lb793]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/c6eb86f040.png" width="500" height="239" border="0" alt="Abbildung 2" /&gt; &lt;/a&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/09/07/entity-framework-praesentationen.html" title="TechDays 2011 Folien" class="external-link-new-window"&gt;TechDays 2011 Präsentationen &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.dnug-bern.ch/presentations2011.aspx" title="Präsentationen 2011 (.NET User Group Bern TechHours)" class="external-link-new-window"&gt;Code First Mapping Szenarien &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634696776000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634696776000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634696776000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Einführung in MongoDB mit Roger Rudin</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 10.&amp;nbsp;April 2012 (18:00 bis 21:00 Uhr) &lt;/h2&gt;
&lt;h3&gt;Einführung in MongoDB mit Roger Rudin&lt;br&gt;
&lt;/h3&gt;
&lt;p&gt;Im April treffen wir uns spontan ausserhalb des 2-Monats-Rhythmus zu einer Einführung in MongoDB mit Roger Rudin&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In den letzten Jahren sind etliche &amp;quot;NoSQL&amp;quot; Datenbanken entwickelt worden, welche unter Verwendung von Standardhardware enorme Skalierung und eine hohe Verfügbarkeit bieten. Grosse Internetplattformen wie Google, Facebook und Twitter setzen diese Technologie
 bereits sehr erfolgreich ein.&lt;br&gt;
&lt;br&gt;
In dieser Session&amp;nbsp;wird uns Roger Rudin&amp;nbsp;einen Einblick in MongoDB, einer dokumentenbasierten NoSQL Datenbank, geben. Wir werden uns anschauen, wann sich der Einsatz einer NoSQL Datenbank lohnt, und warum gerade MongoDB eine sehr attraktive Datenbank für .Net
 Entwickler ist.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Tauche mit uns ab in die schemalose Welt von NoSQL.&lt;br&gt;
&lt;/p&gt;
&lt;strong&gt;Über Roger Rudin &lt;/strong&gt;
&lt;p&gt;Roger Rudin arbeitet als Software Architekt und agile Coach bei bbv Software Services AG.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Er beschäftigt sich seit vielen Jahren mit .NET-Technologien mit Schwerpunkt verteilte Systeme und Persistenz.&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/einfuhrung-mongodb-roger-rudin-904252" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbem&lt;/strong&gt;. Wir verzichten auf&amp;nbsp;mdb als&amp;nbsp;Suffix, damit keiner auf die Idee kommt, es handelt sich hierbei um MS Access ;-)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Tue, 10 Apr 2012 18:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/04/10/entity-framework-ein-neuer-workaround-fuer-2nd-level-cache-mit-dbcontext.html</guid>
      <link>http://www.databinding.net/blog/post/2012/04/10/entity-framework-ein-neuer-workaround-fuer-2nd-level-cache-mit-dbcontext.html</link>
      <author> (René)</author>
      <title>Entity Framework - Ein neuer Workaround für 2nd Level Cache mit dem DbContext</title>
      <description>Bisher habe ich den 2nd Level Cache nur über einen Umweg über den ObjectContext zum laufen gebracht. Pawel Kadluczka vom EF-Team hat Ende März einen weiteren Ansatz in seinen Blog veröffentlicht, der...</description>
      <pubDate>Tue, 10 Apr 2012 13:07:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Bisher habe ich den 2nd Level Cache nur über einen Umweg über den ObjectContext zum laufen gebracht. Pawel Kadluczka vom EF-Team hat Ende März einen weiteren Ansatz in seinen Blog veröffentlicht, der ohne den ObjectContext auskommt. &lt;/p&gt; &lt;p&gt;Dieser kann auch in Verbindung mit SchemaMigrations zusammen arbeiten, wenn die Tricks und Kniffe im Beitrag beachtet werden. &lt;/p&gt; &lt;p&gt;Wenn das EF-Team an solchen Workarounds rumbastelt, kann davon ausgegangen werden, dass der 2nd Level Cache weiterhin kein Bestandteil des Kerns von EF werden wird. Zum Beitrag geht es hier &lt;a href="http://blog.3d-logic.com/2012/03/31/using-tracing-and-caching-provider-wrappers-with-codefirst/#comments" title="Code First Workaround von Pawel Kadluczka (EF Team Member)" class="external-link-new-window"&gt;lang &lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://blog.3d-logic.com/2012/03/31/using-tracing-and-caching-provider-wrappers-with-codefirst/#comments" title="Workaround für Code First" class="external-link-new-window"&gt;Using Tracing and Caching Provider Wrappers with CodeFirst &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post/2011/07/26/entity-framework-dbcontext-und-der-2nd-level-cache-mit-dem-efcachingprovider.html" title="Workaround für Db-/Model und Code First" class="external-link-new-window"&gt;DbContext und der 2nd-Level Cache mit dem EFCachingProvider &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=614</guid>
      <link>http://schaedlerdaniel.wordpress.com/2012/03/28/schritt-fur-schritt-zum-eigenen-generischen-repository/</link>
      <category>C#</category>
      <category>Entity Framework</category>
      <category>EntityKey</category>
      <category>Generic Repository</category>
      <category>Generic Repository with Entity Framework</category>
      <category>ObjectSet</category>
      <title>Schritt für Schritt zum eigenen generischen Repository</title>
      <description>Das Speichern und Abfragen von Daten wäre mit dem klassischen Repository-Pattern viel zu aufwändig für kleinere Projekte. In Anlehnung an das hier, in Verbindung mit dem Unit Of Work Pattern, verwendete generische Repository, habe ich mir überlegt, dass
 es doch für kleinere Projekte auch eine Lösung geben sollte, die nicht so viel Aufwand nach sich [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=614&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Wed, 28 Mar 2012 09:41:43 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2012/03/28/schritt-fur-schritt-zum-eigenen-generischen-repository/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Das Speichern und Abfragen von Daten wäre mit dem klassischen Repository-Pattern viel zu aufwändig für kleinere Projekte. In Anlehnung an das hier, in Verbindung mit dem &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd882510.aspx" target="_blank"&gt;Unit Of Work Pattern&lt;/a&gt;, verwendete generische Repository, habe ich mir überlegt, dass es doch für kleinere Projekte auch eine Lösung geben sollte, die nicht so viel Aufwand nach sich zieht. &lt;/p&gt;
&lt;p&gt;Als Grundlage, oder besser gesagt als Ausgangspunkt habe ich mir diesen &lt;a href="http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application" target="blank"&gt;Artikel&lt;/a&gt; zur Brust genommen.&lt;/p&gt;
&lt;p&gt;Wie wollen wir vorgehen?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wir erstellen uns ein ganz triviales Model (Adressverwaltung)&lt;/li&gt;
&lt;li&gt;Dann erstellen wir uns Schritt für Schritt das Repository&lt;/li&gt;
&lt;li&gt;Am Schluss ziehen wir noch ein Fazit aus dem Artikel&lt;/li&gt;
&lt;ol&gt;
&lt;h4 style="color:Black;"&gt;Erstellung des Models&lt;/h4&gt;
&lt;p&gt;In Anbetracht, dass nicht zwingend die Korrektheit der Datenmodellierung und der verwendeten Typen im Mittelpunkt steht, erstellen wir uns das Modell wie folgt.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/03/generisches-repository.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/03/generisches-repository.jpg?w=595" alt="Das Modell unserer Adressverwaltung" title="Generisches Repository"   class="aligncenter size-full wp-image-618" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wichtig an diesem Punkt ist, dass die Pluralisierung nicht geändert wird (hierzu später mehr bei der Erstellung des Repositories). Die Eigenschaften für die Personen-Entität sind hier represäntativ für alle anderen auch.&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/03/generisches-repository.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/03/generisches-repository.jpg?w=595" alt="Das Modell unserer Adressverwaltung" title="Generisches Repository"   class="aligncenter size-full wp-image-618" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eine Spezialität ist die komplexe Eigenschaft Persistance, welch die Attribute für &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CreateDate&lt;/li&gt;
&lt;li&gt;ModifyDate&lt;/li&gt;
&lt;li&gt;Creator&lt;/li&gt;
&lt;li&gt;Modifier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;beherbergt. Schön wäre es ja, wenn alle Attribute bei der entsprechenden Operation des Repositories, Add, Update automatisch aktualisiert wird (dazu später mehr).&lt;/p&gt;
&lt;p&gt;Soweit so gut, wir haben unsere Modell für die 1001 Adressverwaltung erstellt. Wollen wir doch zum nächsten Schritt übergehen, die Erstellung des Repositories.&lt;/p&gt;
&lt;h5&gt;Die Repository Erstellung&lt;/h5&gt;
&lt;/p&gt;
&lt;p&gt;Damit wir mit unserem Repository die CRUD Operation unterstützen können brauchen wir folgende Methoden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rumpf des Repositories&lt;/li&gt;
&lt;li&gt;Add&lt;/li&gt;
&lt;li&gt;Remove&lt;/li&gt;
&lt;li&gt;Update&lt;/li&gt;
&lt;li&gt;GetObjectById&lt;/li&gt;
&lt;li&gt;GetObjectByQuery&lt;/li&gt;
&lt;li&gt;Persistance Attribute automatisch erstellen /aktualisieren&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;Rumpf des Repositories&lt;/h6&gt;
&lt;p&gt;Damit wir die restlichen Methoden implementieren können müssen wir das Repository wie folgt erstellen:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
namespace GenericRepositoryPattern
{
    public class Repository&amp;lt;T&amp;gt; : IDisposable where T: EntityObject
    {
        /// &amp;lt;summary&amp;gt;
        /// The context of the database.
        /// &amp;lt;/summary&amp;gt;
        private readonly AddressModelContainer context;
        /// &amp;lt;summary&amp;gt;
        /// The related objectSet to the context. Is dependent
        /// of the context.
        /// &amp;lt;/summary&amp;gt;
        private readonly ObjectSet&amp;lt;T&amp;gt; objectSet;
        /// &amp;lt;summary&amp;gt;
        /// Constructor to initialize the context and the
        /// objectSet.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;context&amp;quot;&amp;gt;The context of the model.&amp;lt;/param&amp;gt;
        public Repository(AddressModelContainer context)
        {
            this.context = context;

            if (context != null) 
            { 
                this.objectSet = context.CreateObjectSet&amp;lt;T&amp;gt;();
                this.context.SavingChanges +=new EventHandler(context_SavingChanges);
            }
        }
&lt;/pre&gt;
&lt;p&gt;(Anmerkung: Die Wiedergabe des Code’s ist gekürzt).&lt;br /&gt;
Wichtig hierbei ist, dass der Context von aussen her dem Konstruktor übergeben werden muss und das &lt;a href="http://msdn.microsoft.com/de-de/library/dd412719.aspx" target="_blank"&gt;ObjectSet&lt;/a&gt; vom instantiierten Context das ObjectSet erhält.&lt;/p&gt;
&lt;h6&gt;Add Methode&lt;/h6&gt;
&lt;p&gt;Damit wir ein neues Objekt zu unserem ObjectContex hinzufügen können müssen wir die Methode wie folgt implementieren.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Add's a newly created entity to the
        /// objectSet
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The newly created entity.&amp;lt;/param&amp;gt;
        public void Add(T entity)
        {
            this.objectSet.AddObject(entity);            
            this.context.SaveChanges();                    
        }
&lt;/pre&gt;
&lt;p&gt;Also eine ganz einfache Sache. Als nächstes wenden wir uns der Remove Methode zu.&lt;/p&gt;
&lt;h6&gt;Remove Methode&lt;/h6&gt;
&lt;p&gt;Das Entfernen eines Objektes ist relativ rasch implementiert:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        public void Remove(T entity)
        {
            if (entity != null)
            {
                this.objectSet.Attach(entity);
                this.context.DeleteObject(entity);
                this.context.SaveChanges();
            }
        }
&lt;/pre&gt;
&lt;p&gt;Also keine Hexerei. Als nächstes wenden wir uns der Update Methode zu und schauen diese genauer an.&lt;/p&gt;
&lt;h6&gt;Update Methode&lt;/h6&gt;
&lt;p&gt;Die Update Methode zeigt sich in ihrer Ausprägung so:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        public void Update(T entity)
        {
            this.objectSet.Attach(entity);
            this.context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);        
            this.context.SaveChanges();
        }
&lt;/pre&gt;
&lt;p&gt;Damit der Context weiss, dass sich was geändert hat muss die Entität an den Context wieder „Attached“ und im &lt;a href="http://msdn.microsoft.com/de-de/library/system.data.objects.objectstatemanager.aspx" target="_blank"&gt;ObjectStateManager&lt;/a&gt; der EntityState auf Modified gestellt werden. Dann speichert der Context die Daten aktualisiert.&lt;/p&gt;
&lt;h6&gt;GetObjectById&lt;/h6&gt;
&lt;p&gt;Damit wir ein Object vom Typ Person erhalten, anhand der übergebenen Id, erstellen wir uns in der Methode einen EntityKey und einem KeyValuePair. Das Attribut dass die Id verkörpert heiss auch „Id“.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        public T GetById(Int32 id)
        {
            string entitySet = string.Format(@&amp;quot;{0}Set&amp;quot;, typeof(T).Name);
            KeyValuePair&amp;lt;string, object&amp;gt; member = new KeyValuePair&amp;lt;string, object&amp;gt;(&amp;quot;Id&amp;quot;, id);
            IEnumerable&amp;lt;KeyValuePair&amp;lt;string, object&amp;gt;&amp;gt; values = new KeyValuePair&amp;lt;string, object&amp;gt;[] { member };

            EntityKey key = new EntityKey(entitySet, values);

            return (T)this.context.GetObjectByKey(key);
        }
&lt;/pre&gt;
&lt;p&gt;Und hier sehen wir auch wieso wir die Pluralisierung PersonSet belassen haben. Damit der Context weiss in welchem Set er suchen soll müssen wir dieses übergeben. Das erreichen wird mit dem kleinen Codeschnipsel&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
string entitySet = string.Format(@&amp;quot;{0}Set&amp;quot;, typeof(T).Name);
&lt;/pre&gt;
&lt;p&gt;Danach wird der &lt;a href="http://msdn.microsoft.com/de-de/library/dd283138.aspx" target="_blank"&gt;EntityKey&lt;/a&gt; erstellt und dem Context zur Abfrage übergeben. Das gefundene Object casten wird dann in den generischen Typ den wir übergeben haben.&lt;/p&gt;
&lt;h6&gt;GetObjectByQuery&lt;/h6&gt;
&lt;p&gt;Damit wir spezifisch ein Objekt, oder auch mehrere zurück erhalten können wir diese mit dem entsprechenden Methode und einer Func zurück holen. Als Beispiel: Wenn ich eine Person haben möchte bei welchem ich nur den Vornahmen und den Nachnamen haben möchte, dann lege ich beim Aufrufer der Methode folgende Funktion fest:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
Func&amp;lt;Person, bool&amp;gt; functionPerson = person =&amp;gt; person.FirstName.ToLower().Equals(&amp;quot;hans&amp;quot;);
&lt;/pre&gt;
&lt;p&gt;Die kann dann der Methode übergeben werden und diese erstellt dann auch das Resultat anhand der übergebenen Methode.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        public IEnumerable&amp;lt;T&amp;gt; GetObjectByQuery(Func&amp;lt;T, bool&amp;gt; customQuery)
        {
            if (customQuery == null)
            {
                throw new ArgumentNullException(&amp;quot;parameter: customquery must be given by caller!&amp;quot;);
            }

            List&amp;lt;T&amp;gt; result = this.objectSet.Where(customQuery).ToList();
            result.ForEach(this.objectSet.Detach);
            return result;
        }
[/csharp]
&amp;lt;p&amp;gt;Wichtig ist nur, dass die gefundenen Objekte vom Context getrennt werden, damit diese auch ausserhalb der Verwendung des Contextes verwendet werden können.&amp;lt;/p&amp;gt;
&amp;lt;h6&amp;gt;Persistance Attribute aktualisieren&amp;lt;/h6&amp;gt;
&amp;lt;p&amp;gt;Dem Leser wird nicht entgangen sein, dass im Konstruktor der Context mit seinem Ereignis SavingChanges verknüpft worden ist. Hier werden alle relevanten Attribute vom komplexen Property IPersistance aktualisiert oder erstellt. Die Ereignisbehandlung sieht dann so aus:&amp;lt;/p&amp;gt;
1
        void context_SavingChanges(object sender, EventArgs e)
        {
            this.context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).ToList().ForEach(entity =&amp;gt; {
                if (entity != null &amp;amp;&amp;amp; entity.Entity != null &amp;amp;&amp;amp; entity.Entity.GetType().GetProperty(&amp;quot;Persistance&amp;quot;) != null)
                {
                    IPersistance persistance = CreatePersistance();
                    entity.Entity.GetType().GetProperty(&amp;quot;Persistance&amp;quot;).SetValue(entity.Entity, persistance, null);
                }
            });

            this.context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).ToList().ForEach(entity =&amp;gt;
            {
                if (entity != null &amp;amp;&amp;amp; entity.Entity != null &amp;amp;&amp;amp; entity.Entity.GetType().GetProperty(&amp;quot;Persistance&amp;quot;) != null)
                {
                    UpdatePersistance(entity.Entity);
                }
            });
        }
&lt;/pre&gt;
&lt;p&gt;Hier wird eigentlich nicht’s anderes gemacht, als das alle Entitäten die den Status Added oder Modified haben das Persistance komplexe Property angepasst. Für das sind dann die zwei Methoden zuständig.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        private IPersistance CreatePersistance()
        {
            IPersistance persistance = new IPersistance();
            persistance.CreateDate = DateTime.Now;
            persistance.ModifyDate = DateTime.Now;
            persistance.Creator = WindowsIdentity.GetCurrent().Name;
            persistance.Modifier = persistance.Creator;
            return persistance;
        }
&lt;/pre&gt;
&lt;p&gt;Wird verwendet wenn eine neue Entität persistiert wird und die nachfolgende wenn eine Entität geändert worden ist.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        private void UpdatePersistance(object entity)
        {
            if (typeof(T).GetProperty(&amp;quot;Persistance&amp;quot;) != null)
            {
                IPersistance persistance = (IPersistance)typeof(T).GetProperty(&amp;quot;Persistance&amp;quot;).GetValue(entity, null);
                if (persistance != null)
                {
                    persistance.Modifier = WindowsIdentity.GetCurrent().Name;
                    persistance.ModifyDate = DateTime.Now;
                }
            }
        }
&lt;/pre&gt;
&lt;p&gt;Zur Übersicht noch der vollständige Code des gesamten Repositories.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;
using GenericRepositoryPattern.Model;
using System.Data.Objects;
using System.Data;
using System.Security.Principal;
using System.Reflection;

namespace GenericRepositoryPattern
{
    /// &amp;lt;summary&amp;gt;
    /// Generic repository.
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;For example it could be a model entity Person&amp;lt;/typeparam&amp;gt;
    public class Repository&amp;lt;T&amp;gt; : IDisposable where T: EntityObject
    {
        /// &amp;lt;summary&amp;gt;
        /// The context of the database.
        /// &amp;lt;/summary&amp;gt;
        private readonly AddressModelContainer context;
        /// &amp;lt;summary&amp;gt;
        /// The related objectSet to the context. Is dependent
        /// of the context.
        /// &amp;lt;/summary&amp;gt;
        private readonly ObjectSet&amp;lt;T&amp;gt; objectSet;
        /// &amp;lt;summary&amp;gt;
        /// Constructor to initialize the context and the
        /// objectSet.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;context&amp;quot;&amp;gt;The context of the model.&amp;lt;/param&amp;gt;
        public Repository(AddressModelContainer context)
        {
            this.context = context;

            if (context != null) 
            { 
                this.objectSet = context.CreateObjectSet&amp;lt;T&amp;gt;();
                this.context.SavingChanges +=new EventHandler(context_SavingChanges);
            }
        }
        /// &amp;lt;summary&amp;gt;
        /// Get's a specific entity by it's key.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;id&amp;quot;&amp;gt;The id from the object to retrieve.&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;The object if it's present in the db, or NULL if not existent.&amp;lt;/returns&amp;gt;
        public T GetById(Int32 id)
        {
            string entitySet = string.Format(@&amp;quot;{0}Set&amp;quot;, typeof(T).Name);
            KeyValuePair&amp;lt;string, object&amp;gt; member = new KeyValuePair&amp;lt;string, object&amp;gt;(&amp;quot;Id&amp;quot;, id);
            IEnumerable&amp;lt;KeyValuePair&amp;lt;string, object&amp;gt;&amp;gt; values = new KeyValuePair&amp;lt;string, object&amp;gt;[] { member };

            EntityKey key = new EntityKey(entitySet, values);

            return (T)this.context.GetObjectByKey(key);
        }
        /// &amp;lt;summary&amp;gt;
        /// Allows the user to query the db with a custom
        /// function to retrieve data from the specific type
        /// of entity.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;customQuery&amp;quot;&amp;gt;Created outisde by caller&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;A queryable of T with the possibility to treat it further.&amp;lt;/returns&amp;gt;
        /// &amp;lt;example&amp;gt;
        /// Func&amp;lt;Person, bool&amp;gt; functionPerson = person =&amp;gt; person.FirstName.ToLower().Contains(&amp;quot;da&amp;quot;)
        /// &amp;lt;/example&amp;gt;
        public IEnumerable&amp;lt;T&amp;gt; GetObjectByQuery(Func&amp;lt;T, bool&amp;gt; customQuery)
        {
            if (customQuery == null)
            {
                throw new ArgumentNullException(&amp;quot;parameter: customquery must be given by caller!&amp;quot;);
            }

            List&amp;lt;T&amp;gt; result = this.objectSet.Where(customQuery).ToList();
            result.ForEach(this.objectSet.Detach);
            return result;
        }

        /// &amp;lt;summary&amp;gt;
        /// Updates the values of the entity.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;Updates a given entity with new values.&amp;lt;/param&amp;gt;
        public void Update(T entity)
        {
            this.objectSet.Attach(entity);
            this.context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);        
            this.context.SaveChanges();
        }
        /// &amp;lt;summary&amp;gt;
        /// Add's a newly created entity to the
        /// objectSet
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The newly created entity.&amp;lt;/param&amp;gt;
        public void Add(T entity)
        {
            this.objectSet.AddObject(entity);            
            this.context.SaveChanges();                    
        }
        /// &amp;lt;summary&amp;gt;
        /// Occurs every time an entity is saved or updated.
        /// It goes through the entity properties to update or craete
        /// the persistance attributes that are necessary for saving.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;The context&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;The eventargs from the context.&amp;lt;/param&amp;gt;
        void context_SavingChanges(object sender, EventArgs e)
        {
            this.context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).ToList().ForEach(entity =&amp;gt; {
                if (entity != null &amp;amp;&amp;amp; entity.Entity != null &amp;amp;&amp;amp; entity.Entity.GetType().GetProperty(&amp;quot;Persistance&amp;quot;) != null)
                {
                    IPersistance persistance = CreatePersistance();
                    entity.Entity.GetType().GetProperty(&amp;quot;Persistance&amp;quot;).SetValue(entity.Entity, persistance, null);
                }
            });

            this.context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).ToList().ForEach(entity =&amp;gt;
            {
                if (entity != null &amp;amp;&amp;amp; entity.Entity != null &amp;amp;&amp;amp; entity.Entity.GetType().GetProperty(&amp;quot;Persistance&amp;quot;) != null)
                {
                    UpdatePersistance(entity.Entity);
                }
            });
        }
        /// &amp;lt;summary&amp;gt;
        /// Set's the createdate to the datetime
        /// where the creation of the entity
        /// object has been executed.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity to create the IPersistance creator and update attributes.&amp;lt;/param&amp;gt;
        private IPersistance CreatePersistance()
        {
            IPersistance persistance = new IPersistance();
            persistance.CreateDate = DateTime.Now;
            persistance.ModifyDate = DateTime.Now;
            persistance.Creator = WindowsIdentity.GetCurrent().Name;
            persistance.Modifier = persistance.Creator;
            return persistance;
        }
        /// &amp;lt;summary&amp;gt;
        /// Set's the modifydate to the datetime
        /// where the modification of the entity
        /// object has been executed.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity to update the IPersistance modify attributes.&amp;lt;/param&amp;gt;
        private void UpdatePersistance(object entity)
        {
            if (typeof(T).GetProperty(&amp;quot;Persistance&amp;quot;) != null)
            {
                IPersistance persistance = (IPersistance)typeof(T).GetProperty(&amp;quot;Persistance&amp;quot;).GetValue(entity, null);
                if (persistance != null)
                {
                    persistance.Modifier = WindowsIdentity.GetCurrent().Name;
                    persistance.ModifyDate = DateTime.Now;
                }
            }
        }
        /// &amp;lt;summary&amp;gt;
        /// Removes an entity from the database.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity to remove. Must be loaded prior to remove.&amp;lt;/param&amp;gt;
        public void Remove(T entity)
        {
            if (entity != null)
            {
                this.objectSet.Attach(entity);
                this.context.DeleteObject(entity);
                this.context.SaveChanges();
            }
        }

        #region IDisposable Members
        /// &amp;lt;summary&amp;gt;
        /// Dispose the context.
        /// &amp;lt;/summary&amp;gt;
        public void Dispose()
        {
            if (this.context != null)
            {
                this.context.Dispose();
            }
        }

        #endregion
    }
}
&lt;/pre&gt;
&lt;h4 style="color:Black;"&gt;Fazit&lt;/h4&gt;
&lt;p&gt;Mit dem hier vorgestellten Ansatz ist es uns , auch für kleinere Projekte möglich, rasch und einfach &lt;a href="http://de.wikipedia.org/wiki/CRUD" target="_blank"&gt;CRUD&lt;/a&gt; Methoden zur Verfügung zu stellen ohne, dass wir das Unit of Work und das Repositoriy Pattern in ihren grössten Ausprägungen implementieren müssen.&lt;/p&gt;
&lt;p&gt;Wenn Ihnen der Artikel gefallen hat, würde ich mich über einen KICK freuen. Auf Verbesserungsvorschläge und Kritik bin ich natürlich auch offen.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f03%2f28%2fschritt-fur-schritt-zum-eigenen-generischen-repository%2f"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f03%2f28%2fschritt-fur-schritt-zum-eigenen-generischen-repository%2f" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/614/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/614/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=614&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2012/03/28/schritt-fur-schritt-zum-eigenen-generischen-repository/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/03/generisches-repository.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Generisches Repository</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/03/generisches-repository.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Generisches Repository</media:title>
      </media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f03%2f28%2fschritt-fur-schritt-zum-eigenen-generischen-repository%2f" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634684680000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634684680000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634684680000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>What the hell is PowerShell mit Thomas Krause</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 27.&amp;nbsp;März 2012 (18:00 bis 21:00 Uhr) &lt;/h2&gt;
&lt;h3&gt;What the hell is PowerShell?&lt;br&gt;
&lt;/h3&gt;
&lt;p&gt;Im März wird uns Thomas Krause das Thema Powershell näher bringen. Pirmär werden wir uns auch damit beschäftigen wie der Administrative Teil einer Anwendung effizienter gestaltet werden kann.
&lt;/p&gt;
&lt;strong&gt;Abstract &lt;/strong&gt;
&lt;p&gt;Das Windows Management Framework - aka PowerShell - wird immer wichtiger, daran besteht kein Zweifel. Egal, ob Desktop, Server oder Cloud: Kaum ein Produkt, das nicht mit PowerShell-Administrations-Features daherkommt. Windows 8 wird das Thema Administration/Konfiguration
 mit PowerShell noch mehr in den Mittelpunkt rücken. Es wird also Zeit, sich auch als Entwickler damit auseinanderzusetzen.
&lt;/p&gt;
&lt;p&gt;PowerShell ist nicht nur das schmucklose Terminal-Fenster, mit dem man wahrscheinlich den Erstkontakt hat. Es ist vor allem eine universelle Automatisierungsengine fuer alle denkbaren taeglichen Aufgaben - und somit interessant fuer jeden, der einfach effektiver
 arbeiten moechte. &lt;/p&gt;
&lt;p&gt;Inzwischen existiert ein gut ausgebautes Oekosystem an Tools und Erweiterungen. Wir werfen einen Blick auf das, was mit PowerShell heute fuer Administratoren und Entwickler moeglich und sinnvoll ist und schauen uns an, was uns mit PowerShell V3 erwartet.
&lt;/p&gt;
&lt;p&gt;Eine Reihe Beispiele werden zeigen, wie man mit PowerShell Werkzeuge nutzt, erweitert und baut. Wie kann ich mit PowerShell Entwicklungaktivitäten automatisieren? Wie bringt man PowerShell und ein GUI zusammen? Wie kann die eigene Applikation mit der PowerShell
 besser administrierbar werden? Diese Fragen werden wir nach dem Motto 'Less Slides, more Code' beantworten.
&lt;/p&gt;
&lt;strong&gt;Über Thomas Krause &lt;/strong&gt;
&lt;p&gt;Neben meinem Leben als Mainstream-Entwickler mit Mainstream-Programmiersprachen (ObjectPascal, C&amp;#43;&amp;#43;, .NET/C#) war ich lange auch auf der 'dunklen Seite der Softwareentwicklung' unterwegs - Datenbankentwicklung (PL/SQL, T-SQL, SQL etc.). Mit der Zeit lenkte
 dies meine Aufmerksamkeit auf 'unsichtbare' Themen wie Backup, Troubleshooting, Konfiguration, Migration, Monitoring etc.
&lt;/p&gt;
&lt;p&gt;Das interessante Spannungsdreieck zwischen Datenbank-Entwicklern, Administratoren und 'Client'-Entwicklern wurde eines meiner Interessengebiete. Seit dem Erscheinen der PowerShell 2006 suche ich intensiver nach Praktiken und Konzepten für die Entwicklung
 besser administrierbarer Systeme. Wichtig ist mir, Administrations-Anforderungen schon beim Systemdesign zu berücksichtigen.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/what-the-hell-is-powershell-866593" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbeps1&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme!&lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Tue, 27 Mar 2012 18:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/03/15/sharepoint-deployment-api-zwischen-version-2007-und-2010.html</guid>
      <link>http://www.databinding.net/blog/post/2012/03/15/sharepoint-deployment-api-zwischen-version-2007-und-2010.html</link>
      <author> (René)</author>
      <title>Sharepoint Deployment API zwischen Version 2007 und 2010</title>
      <description>Meine Migrationsstory geht weiter. Nachdem der Export vorlag, stand ich das erste Mal an, weil mich bei einem Testimport die Fehlermeldung: The version of the package 12.0.10.0 is different from the ...</description>
      <pubDate>Thu, 15 Mar 2012 22:54:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Meine Migrationsstory geht weiter. Nachdem der Export vorlag, stand ich das erste Mal an, weil mich bei einem Testimport die Fehlermeldung: &lt;/p&gt; &lt;p&gt;The version of the package 12.0.10.0 is different from the current version this program supports, 14.0.0.0 &lt;/p&gt; &lt;p&gt;begrüsste. Nach ein bisschen suchen fand ich einen Ansatz. Die Package Files, speziell die SystemData.xml muss angepasst werden, damit sich der Inhalt aus Sharepoint 2007&amp;nbsp;in&amp;nbsp;Sharepoint 2010&amp;nbsp;importieren lässt. &lt;/p&gt; &lt;p&gt;In der XML-Datei muss dazu auf SchemaVersion-Ebene die Version, dass aktuelle Patchlevel (Build) und die Datenbankversion (DatabaseVersion)&amp;nbsp;angegeben werden. Nachfolgendes XML zeigt einen Ausschnitt aus der SystemData.xml: &lt;/p&gt; &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;SystemData xmlns=&amp;quot;urn:deployment-systemdata-schema&amp;quot;&amp;gt; &amp;lt;SchemaVersion Version=&amp;quot;14.0.0.0&amp;quot; Build=&amp;quot;14.0.6109.5002&amp;quot; DatabaseVersion=&amp;quot;133739&amp;quot; SiteVersion=&amp;quot;0&amp;quot; ObjectsProcessed=&amp;quot;27&amp;quot; /&amp;gt; &amp;lt;ManifestFiles&amp;gt; &amp;lt;ManifestFile Name=&amp;quot;Manifest.xml&amp;quot; /&amp;gt; &amp;lt;/ManifestFiles&amp;gt; &amp;lt;SystemObjects&amp;gt; ... &amp;lt;/SystemObjects&amp;gt; &amp;lt;RootWebOnlyLists /&amp;gt;
&amp;lt;/SystemData&amp;gt; &lt;p&gt;Müssten die Daten nicht noch bereinigt und transformiert werden, wäre ich bereits am Ende. Nun geht es daran, die XML-Dateien so aufzubereiten, damit&amp;nbsp;die Daten&amp;nbsp;in das Format der neuen Lösung des Zielsystems importiert werden können. &lt;/p&gt; &lt;p&gt;ETL geht auch einfacher, aber nicht unbedingt wenn Sharepoint im Spiel ist. ;-) &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/cc313163(v=office.12).aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Deployment Package Format &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/dd963625(v=office.12).aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Dateistrukturen &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/dd928291(v=office.12).aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Produktverhalten &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/fileadmin/databinding/documents/SharepointDeploymentPackageFormat.pdf" title="SharepointDeploymentPackageFormat.pdf (3.3 MB)"&gt;Spezifikation Deployment Package Format &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/03/10/parallelisierung-wenn-eine-relationale-datenbank-im-spiel-ist.html</guid>
      <link>http://www.databinding.net/blog/post/2012/03/10/parallelisierung-wenn-eine-relationale-datenbank-im-spiel-ist.html</link>
      <author> (René)</author>
      <title>Parallelisierung wenn eine relationale Datenbank im Spiel ist</title>
      <description>Nachdem ich mir das erste Mal eine CLR-Funktion für eine Datenmigration gebaut habe, geht es nun daran Codeteile zu parallelisieren, damit die Migrationsdauer verkürzt werden kann. Ein paar Herausfor...</description>
      <pubDate>Sat, 10 Mar 2012 23:09:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Nachdem ich mir das erste Mal eine CLR-Funktion für eine Datenmigration gebaut habe, geht es nun daran Codeteile zu parallelisieren, damit die Migrationsdauer verkürzt werden kann. Ein paar Herausforderungen dabei: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Ich habe die Auflage das Ganze in .NET 3.5 zu entwickeln, sodass ich die TPL nicht nutzen kann. &lt;/li&gt; &lt;li&gt;Direkte Insert, Update und Delete-Anweisungen dürfen nicht ausgeführt werden. Es muss die Sharepoint Content Deployment API verwendet werden. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Im &lt;a href="http://blog.robvolk.com/2009/06/parallel-foreach-loop-in-c-35.html" title="Blogpost EachParallel in .NET 3.5" class="external-link-new-window"&gt;Blogpost &lt;/a&gt; fand ich einen interessanten Ansatz, wie in .NET 3.5 eine parallele Schleife realisiert werden kann. &lt;/p&gt; &lt;p&gt;Also den ersten Test erstellt. Eine Stub-Methode die 10 Sekunden wartet, geschrieben und 5-mal aufgerufen. Testkriterium: Ausführungsdauer weniger als 15 Sekunden bestehen, funktioniert. &lt;/p&gt; &lt;p&gt;Anschliessend den integrativen Test in Verbindung mit einer Datenbank. Testkriterium: Auditinformationen in Datenbank schreiben nicht erfüllt, tatsächlich: &lt;/p&gt; &lt;p&gt;Transaction (Process ID XX) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, &amp;#x2026; &lt;/p&gt; &lt;p&gt;Ein Codestück, das die Verbindung zur Datenbank herstellt, hat folgenden Aufbau: &lt;/p&gt; public static void ExecuteNonQuery(SqlCommand cmd)
{ try { using (var conn = GetSqlConnection()) { cmd.Connection = conn; cmd.ExecuteNonQuery(); } } catch (Exception ex) { log.Error(ex.Message, ex); throw; }
} &lt;p&gt;Als ersten Ansatz stellte ich dieses Codestück um und machte einen asynchronen Aufruf daraus. &lt;/p&gt; &lt;p&gt;Es dauerte unwesentlich länger, aber auch dieser Code erzeugte Deadlocks auf der Datenbank. In diesem Moment kam ich zum Schluss: So, genug gebastelt jetzt wird analysiert wer bzw. was diese Deadlocks auf der Datenbank auslösen. Wenn ich mit dem SQL Server arbeite, nutze ich üblicherweise den SQL Server Profiler für diese Zwecke. &lt;/p&gt; &lt;p&gt;Dieser kann über das SQL Server Management Studio (SSMS) unter dem Menüpunkt Tools gestartet werden. Nach der Verbindung zur Datenbank kann auf der ersten Dialogmaske das Template TSQL_Locks ausgewählt werden. &lt;/p&gt; Abbildung 1 Einstellungen für Deadlock-Tracing &lt;a href="http://www.databinding.net/uploads/pics/tracingoptions.PNG" title="Abbildung 1 Einstellungen für Deadlock-Tracing" rel="lightbox[presentlb772]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/77ed637cbf.png" width="550" height="347" border="0" alt="Abbildung 1" /&gt; &lt;/a&gt; &lt;p&gt;Unter dem zweiten Tab können weitere Einstellungen vorgenommen werden, darauf gehe ich nicht näher ein. Mit klick auf die Schaltfläche &amp;quot;Run&amp;quot; wird die Ablaufverfolgung gestartet. &lt;/p&gt; &lt;p&gt;Nach dem Start des Integrationstests wurde alles aufgezeichnet und es dauerte nicht lange, bis die ersten Meldungen im Tracelog erschienen. &lt;/p&gt; Abbildung 2 Informationen im Trace über Deadlocks &lt;a href="http://www.databinding.net/typo3temp/pics/7daa882618.png" title="Abbildung 2 Informationen im Trace über Deadlocks" rel="lightbox[presentlb773]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/f306999d11.png" width="550" height="158" border="0" alt="Abbildung 2" /&gt; &lt;/a&gt; Abbildung 3 Grafische Übersicht, welcher Prozess zum Opfer erklärt wurde &lt;a href="http://www.databinding.net/typo3temp/pics/6ad211eb37.png" title="Abbildung 3 Grafische Übersicht, welcher Prozess zum Opfer erklärt wurde" rel="lightbox[presentlb774]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/a90cb99e1a.png" width="600" height="201" border="0" alt="Abbildung 3" /&gt; &lt;/a&gt; &lt;p&gt;Mit diesen Informationen lässt sich im ersten Augenblick nichts anfangen, der Deadlock Graph ist noch interessant, da hier ersichtlich wird, welcher Prozess durch den aktuellen zum Opfer erklärt wurde. &lt;/p&gt; &lt;p&gt;Nun stellt sich die Frage, welcher Befehl ausgeführt wurde. Dies lässt sich über die Object Id ermitteln. Im Trace steht die Object ID 693577509. Wer sich dahinter versteckt, lässt sich mit folgendem SQL-Befehl ermitteln: &lt;/p&gt; &lt;p&gt;Der Deadlock Graph zeigt zudem noch nützliche Informationen an, mit denen sich auch die Befehle ermitteln lassen. In meinem Beispiel trat der Deadlock während eines Inserts in die Log-Tabelle auf. &lt;/p&gt; Abbildung 4 Angaben welcher Prozess zum Deadlock führte &lt;a href="http://www.databinding.net/typo3temp/pics/1058526a86.png" title="Abbildung 4 Angaben welcher Prozess zum Deadlock führte" rel="lightbox[presentlb778]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/40cd0f2d5a.png" width="550" height="280" border="0" alt="Abbildung 4" /&gt; &lt;/a&gt; SELECT name , type , type_desc FROM sys.objects WHERE object_id IN (693577509) &lt;p&gt;Wer das obige Codebeispiel nochmals betrachtet sieht, dass die Methode statisch ist. Hier ging ich von der Annahme aus, dass dieser Ansatz &amp;quot;Thread Safety&amp;quot; ist. Um das Problem zu beheben, habe ich die statische Methode wie folgt angepasst: &lt;/p&gt; static readonly object locker = new object(); public static void ExecuteNonQuery(SqlCommand cmd)
{ try { lock (locker) { using (var conn = GetSqlConnection()) { cmd.Connection = conn; cmd.ExecuteNonQuery(); } } } catch (Exception ex) { log.Error(ex.Message, ex); throw; }
} &lt;p&gt;Nach dieser Anpassung waren die Deadlocks verschwunden. Ganz parallel arbeitet dieser Code natürlich nicht mehr, es wird sich also nicht der komplette Code parallelisieren lassen. &lt;/p&gt; &lt;p&gt;Noch eine Anmerkung zum Schluss: Vergesst vor lauter Unit-Testing mit Mocks und Fakes die Integrationstests mit zufälligen und korrupten Daten nicht. ;-) &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/de-de/library/ms188246.aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Analysieren von Deadlocks mit SQL Server Profiler &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.71).aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Lock Statement in C# &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post////parallel-net-40.html" title="Mind Map" class="external-link"&gt;Parallel .NET 4.0 &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://www.databinding.net/blog/post////asynchrone-programmierung-nach-synchroner-art.html" title="Mind Map Asynchron .NET 4.5" class="external-link"&gt;Asynchrone Programmierung .NET 4.5 &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/03/07/sql-server-indexfragmentierung-feststellen.html</guid>
      <link>http://www.databinding.net/blog/post/2012/03/07/sql-server-indexfragmentierung-feststellen.html</link>
      <author> (René)</author>
      <title>SQL Server - Indexfragmentierung feststellen</title>
      <description>Bei sehr vielen Einfügeoperationen kann ein Index sehr schnell seine Wirkung verlieren und muss entweder reorganisiert oder neu erstellt werden. Da ich die Abfrage des öfteren brauche, lege ich diese...</description>
      <pubDate>Wed, 07 Mar 2012 14:29:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Bei sehr vielen Einfügeoperationen kann ein Index sehr schnell seine Wirkung verlieren und muss entweder reorganisiert oder neu&amp;nbsp;erstellt werden. Da ich die Abfrage des öfteren brauche, lege ich diese mal hier ab: &lt;/p&gt; SELECT DB_NAME(DPS.DATABASE_ID) AS [DatabaseName] , OBJECT_NAME(DPS.OBJECT_ID) AS TableName , SI.NAME AS IndexName , DPS.INDEX_TYPE_DESC AS IndexType , DPS.AVG_FRAGMENTATION_IN_PERCENT AS AvgPageFragmentation , DPS.PAGE_COUNT AS PageCounts
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) DPS --N'LIMITED') DPS
INNER JOIN sysindexes SI ON DPS.OBJECT_ID = SI.ID AND DPS.INDEX_ID = SI.INDID
ORDER BY AVG_FRAGMENTATION_IN_PERCENT DESC &lt;p&gt;In der Regel sollen alle Indexe mit einer Framentierung grösser 30% neu erstellt werden, darunter reicht häufig ein reorganisieren aus. Mit folgenden Befehlen ist dies möglich: &lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;/p&gt; -- Index neu erstellen
EXEC sp_MSforeachtable @command1=&amp;quot;print 'Erstelle Index für ?' ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 90)&amp;quot;
GO -- Index reorganisieren
EXEC sp_MSforeachtable @command1=&amp;quot;print 'Reorgansiere Index für ?' ALTER INDEX ALL ON ? REORGANIZE&amp;quot;
GO </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/03/06/mein-einstieg-in-kanban.html</guid>
      <link>http://www.databinding.net/blog/post/2012/03/06/mein-einstieg-in-kanban.html</link>
      <author> (René)</author>
      <title>Mein Einstieg in Kanban</title>
      <description>Zukünftig will ich verstärkt mit der Unterstützung von Kanban arbeiten. Primär erhoffe ich mir Vorteile im Bereich der ständigen Verbesserung, Entwicklungseffizienz und der Lokalisierung von Zeitfres...</description>
      <pubDate>Tue, 06 Mar 2012 23:26:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Zukünftig will ich verstärkt mit der Unterstützung von Kanban arbeiten. Primär erhoffe ich mir Vorteile im Bereich der ständigen Verbesserung, Entwicklungseffizienz und der Lokalisierung von Zeitfressern, sowie ein nützliches Hilfsmittel für &amp;quot;Continuous Delivery&amp;quot;. &lt;/p&gt; &lt;p&gt;Seit knapp 3 Wochen visualisiere ich so meine Arbeit und versuche anhand des Value Stream Mapping die Effizienz zu ermitteln. Innerhalb der nächsten Wochen werde ich wohl ein paar tiefere Einblicke haben. Ein grober Überblick befindet sich in folgendem Mind Map. &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/02/29/sharepoint-2010-best-practices.html</guid>
      <link>http://www.databinding.net/blog/post/2012/02/29/sharepoint-2010-best-practices.html</link>
      <author> (René)</author>
      <title>Sharepoint 2010 Best Practices</title>
      <description>Sharepoint gehört immer noch zu meinen Aufgabengebieten. Gute Anleitungen zu finden ist auch nicht einfach, gerade im Bezug was man tun oder lassen sollte. Das Produktteam hat eine Übersicht mit Best...</description>
      <pubDate>Wed, 29 Feb 2012 22:03:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Sharepoint gehört immer noch zu meinen Aufgabengebieten. Gute Anleitungen zu finden ist auch nicht einfach, gerade im Bezug was man tun oder lassen sollte. &lt;/p&gt; &lt;p&gt;Das Produktteam hat eine Übersicht mit Best Practices unter dem &lt;a href="http://technet.microsoft.com/en-us/sharepoint/hh189420.aspx" title="Best Practices for Sharepoint 2010" class="external-link-new-window"&gt;Link &lt;/a&gt; bereitgestellt. &lt;/p&gt; &lt;p&gt;Mal sehen, ob es brauchbar ist... &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/library/ee556427.aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Bewährte Methoden für Sharepoint Foundation &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/library/ee705809.aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Bewährte Methoden für Sharepoint &lt;/a&gt;&amp;nbsp;(sehr dürftig) &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=595</guid>
      <link>http://schaedlerdaniel.wordpress.com/2012/02/28/wcf-datacontracts-synchronisieren-mit-entity-framework-klassen/</link>
      <category>C#</category>
      <category>Entity Framework</category>
      <category>WCF</category>
      <category>DataContract Mapping to Entity Framework</category>
      <category>Generischer DataContract zu Entity Framework Synchronisierer</category>
      <category>Synchronization of DataContracts to it's Entitties</category>
      <title>WCF DataContracts synchronisieren mit Entity Framework Klassen</title>
      <description>Im Rahmen einer Projektarbeit haben wir das Ziel Businessdaten über die WCF zu transportieren. Die Daten sind im Entity Framework gespeichert. Schön wäre es wenn wir diese Entitäten direkt über den Kommunikationskanal schicken könnten. Leider ist dies
 nicht möglich da ein direktes Versenden der Entitäten, durch Projektrestriktionen nicht erlaubt ist, oder man ganz einfach keine [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=595&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Tue, 28 Feb 2012 15:32:33 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2012/02/28/wcf-datacontracts-synchronisieren-mit-entity-framework-klassen/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Im Rahmen einer Projektarbeit haben wir das Ziel Businessdaten über die WCF zu transportieren. Die Daten sind im Entity Framework gespeichert. Schön wäre es wenn wir diese Entitäten direkt über den Kommunikationskanal schicken könnten. Leider ist dies nicht möglich da ein direktes Versenden der Entitäten, durch Projektrestriktionen nicht erlaubt ist, oder man ganz einfach keine Referenzen auf dem Client auf den Namespace &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.aspx" target="_blank"&gt;System.Data&lt;/a&gt; haben möchte.&lt;/p&gt;
&lt;p&gt;Also muss eine Lösung her die einigermassen hilfreich sein kann. Diese Lösung erledigt das Mapping eines einkommenden DatenVertrages mit der entsprechenden Entität.&lt;/p&gt;
&lt;h5&gt;Vorbereitungen&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;AddressManagement.BusinessModel&lt;/li&gt;
&lt;li&gt;AddressManagement.PersistanceModel&lt;/li&gt;
&lt;li&gt;AddressManagement.ServiceLayer &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Für das Hosten der WCF können wir verschiedene Möglichkeiten nutzen, die aber in diesem Blogpost nicht abgedeckt werden. Es soll nur die Möglichkeit einer generischen Mapping Methode aufgezeigt werden, damit die Daten vom &lt;a href="http://msdn.microsoft.com/en-us/library/aa697427(v=vs.80).aspx" target="_blank"&gt;Entity Framework &lt;/a&gt; nicht direkt über den Kommunikationskanal versendet werden müssen, sondern gekapselt werden.&lt;/p&gt;
&lt;p&gt;Wir erstellen uns ein Entity-Modell dass wie folgt aussieht: (Dieses erstellen wir im Projekt AddressManagement.Persistance)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/02/entitydesignerdiagram.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/02/entitydesignerdiagram.jpg?w=595" alt="Das Entity Data Design Model" title="EntityDesignerDiagram"   class="aligncenter size-full wp-image-599" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Anschliessend erstellen wir uns unseres eigentliche Businessklassenmodell welches wir im Projekt AddressManagement.BusinessModel anlegen.&lt;/p&gt;
&lt;div id="attachment_597" class="wp-caption alignleft" style="width: 610px"&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/02/addressmanagementclassdiagram.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/02/addressmanagementclassdiagram.jpg?w=595" alt="" title="AddressManagementClassDiagram"   class="size-full wp-image-597" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Das Businessklassen Model&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Wichtig hierbei ist, dass die Beziehungen, Phones, Addresses genau gleich heissen wie im Entity Model. Auch alle anderen Eigenschaften müssen die gleiche Schreibweise haben, da sonst im Mapper keine Übereinstimmung gefunden wird.&lt;/p&gt;
&lt;p&gt;Die Businessklassen sollen dann mit der WCF übertragen werden. Hierzu werden die Klassen mit den entsprechenden Attributen versehen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Klasse Person&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
namespace AddressManagement.BusinessModel
{
    [DataContract]
    [KnownType(typeof(Address))]
    [KnownType(typeof(Phone))]
    public class Person : IPersistance
    {        
        #region IPersistance Members
        [DataMember]
        public Int32 Id { get; set; }
        #endregion
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
        [DataMember]
        public IEnumerable&amp;lt;IPersistance&amp;gt; Addresses { get; set; }
        [DataMember]
        public IEnumerable&amp;lt;IPersistance&amp;gt; Phones { get; set; }
    }
}
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Klasse Phone&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
namespace AddressManagement.BusinessModel
{
    [DataContract(IsReference = true)]
    [KnownType(typeof(ObjectType))]
    public class Phone : IPersistance
    {
        #region IPersistance Members
        [DataMember]
        public Int32 Id { get; set; }
        #endregion
        [DataMember]
        public string SubScriberNumber { get; set; }
        [DataMember]
        public ObjectType PhoneType { get; set; }
    }
}
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Klasse Address&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
namespace AddressManagement.BusinessModel
{
    [DataContract(IsReference = true)]
    [KnownType(typeof(ObjectType))]
    public class Address : IPersistance
    {
        #region IPersistance Members
        [DataMember]
        public Int32 Id { get; set; }
        #endregion
        [DataMember]
        public string StreetName { get; set; }
        [DataMember]
        public Int16 StreetNumber { get; set; }
        [DataMember]
        public Int16 PostalCode { get; set; }
        [DataMember]
        public string CityName { get; set; }
        [DataMember]
        public ObjectType AddressType { get; set; }
    }
    [DataContract]
    public enum ObjectType
    {
        [EnumMember]
        Private,
        [EnumMember]
        Business
    }
}
&lt;/pre&gt;
&lt;/p&gt;
&lt;h5&gt;Der Mapper/Synchronisierer&lt;/h5&gt;
&lt;p&gt;Damit wir nun beide Welten miteinander abgleichen können ist der Mapper zu erstellen, welche ich Schritt für Schritt erläutere. Wir erstellen uns als erstes eine Statische Klasse mit dem Namen DataContractToEntityMapper oder DataContractAndEntitySynchronizer und erstellen als erstes folgende Methode:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Maps a given datacontract to the appropriate entity.
        /// Check's if the datacontract is new or must be updated
        /// and return the newly persisted contract back or it's updated
        /// values, if it was already persisted before.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;Type of the datacontract&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;U&amp;quot;&amp;gt;Type of the entity&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;dataContract&amp;quot;&amp;gt;The datacontract to interact with.&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;A new or updated datacontract from the database.&amp;lt;/returns&amp;gt;
        public static IPersistance SynchronizeDataContractAndEntity&amp;lt;T, U&amp;gt;(T dataContract)
            where T : IPersistance
            where U : EntityObject
        {
            IPersistance persistance = Activator.CreateInstance&amp;lt;T&amp;gt;();
            // 1. a) Determine if the datacontract is already persisted.
            if (dataContract.Id == 0)
            {
                // 1. b) Map the newly created entity to the datacontract.                
                PersistDataContract&amp;lt;T, U&amp;gt;(dataContract);
            }
            else
            // 2.) Map an existing entity to it's datacontract pendant
            {
                U persistedEntity = Activator.CreateInstance&amp;lt;U&amp;gt;();
                using (AddressRepository&amp;lt;U&amp;gt; repository = new AddressRepository&amp;lt;U&amp;gt;(new AddressManagementPersistanceModelContainer()))
                {
                    persistedEntity = repository.GetByKey&amp;lt;U&amp;gt;(dataContract.Id);
                    persistance = UpdateProperties&amp;lt;T, U&amp;gt;(dataContract, persistedEntity);
                }
            }
            return persistance;
        }
&lt;/pre&gt;
&lt;p&gt;Diese Methode führ folgende Aktionen durch:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Existiert der eingetroffene DataContract schon in der Datenbank?&lt;/li&gt;
&lt;li&gt;Ist die Id 0, dann muss eine neue Entität angelegt werden&lt;/li&gt;
&lt;li&gt;Ist die Id &amp;gt; 0 ist der Contract bereits in der Datenbank vorhanden und muss mit den vorliegenden Werten aktualisiert werden.&lt;/li&gt;
&lt;li&gt;Zum Schluss, nachdem die Entity und der DataContract miteinander synchronisiert worden sind, wird ein aktualisierter DataContract zurück gegeben.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Als nächster Schritt erstellen wir uns eine Methode die für den Abgleich der Property-Werte zuständig ist. Diese unterscheidet ob es sich bei der Eigenschaft um eine Collection oder um eine einfache Eigenschaft handelt und führt dementsprechend die Aktualisierung aus:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Updates the properties from a datacontract.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;The type of datacontract&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;U&amp;quot;&amp;gt;The type of the entity&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;dataContract&amp;quot;&amp;gt;The datacontract to update the values.&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity that is persisted and owns the actual values.&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;Updated datacontract.&amp;lt;/returns&amp;gt;
        private static IPersistance UpdateProperties&amp;lt;T, U&amp;gt;(T dataContract, U entity)
            where T : IPersistance
            where U : EntityObject
        {
            IPersistance persistance = (IPersistance)CreateInstance&amp;lt;T, U&amp;gt;(dataContract, entity);
            entity.GetType().GetProperties().ToList().ForEach(entityPropertyInfo =&amp;gt;
            {
                string propertyName = entityPropertyInfo.Name;
                PropertyInfo dataContractPropertyInfo = persistance.GetType().GetProperty(propertyName);
 
                if (entityPropertyInfo != null &amp;amp;&amp;amp; !entityPropertyInfo.PropertyType.Name.Contains(typeof(EntityCollection&amp;lt;U&amp;gt;).Name))
                {
                    var entityPropertyValue = entityPropertyInfo.GetValue(entity, null);
                    if (entityPropertyValue != null &amp;amp;&amp;amp; dataContractPropertyInfo != null &amp;amp;&amp;amp; !dataContractPropertyInfo.PropertyType.IsEnum)
                    {                        
                        dataContractPropertyInfo.SetValue(persistance, entityPropertyValue, BindingFlags.Default, null, null, null);
                    }
                }
                else if (entityPropertyInfo != null &amp;amp;&amp;amp; dataContract.GetType().GetProperty(entityPropertyInfo.Name) != null)
                {
                    var ienumerableValues = (IEnumerable)HandleRelatedEnds&amp;lt;T&amp;gt;(dataContract, (IEnumerable)entityPropertyInfo.GetValue(entity, null));
                    persistance.GetType().GetProperty(entityPropertyInfo.Name).SetValue(persistance, ienumerableValues, BindingFlags.Default, null, null, null);
                }
            });
            return persistance;
        }

&lt;/pre&gt;
&lt;p&gt;Der erste Teil aktualisiert alle flachen Eigenschaften des DatenContracts. Der zweite Teil kümmert sich um die Collections.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Handles the collections an creates for the datacontract
        /// appropriate items to add them to the list.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;Type of datacontract&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;dataContract&amp;quot;&amp;gt;The specific contract where the list belongs to.&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&amp;quot;entityCollectionToDuplicate&amp;quot;&amp;gt;The entitycollection to map to the datacontract.&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;A List of IPersistance objects (BusinessModel Objects).&amp;lt;/returns&amp;gt;
        private static List&amp;lt;IPersistance&amp;gt; HandleRelatedEnds&amp;lt;T&amp;gt;(T dataContract, IEnumerable entityCollectionToDuplicate) where T : IPersistance
        {
            List&amp;lt;IPersistance&amp;gt; persistances = new List&amp;lt;IPersistance&amp;gt;();
            IEnumerator it = entityCollectionToDuplicate.GetEnumerator();
 
            while (it.MoveNext())
            {
                EntityObject entity = ((EntityObject)it.Current);
                IPersistance ipersistance = CreateInstance&amp;lt;T, EntityObject&amp;gt;(dataContract, entity);
                ipersistance = UpdateProperties&amp;lt;T, EntityObject&amp;gt;(dataContract, entity);
                persistances.Add(ipersistance);
            }
 
            return persistances;
        }

&lt;/pre&gt;
&lt;p&gt;Damit die Items erstellt werden können braucht es eine weitere Hilfsmethode die uns entsprechende Instanzen zurück gibt.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// This method creates a specific instance from the Businessmodell Assembly
        /// given by the entity type.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;The IPersistanceObject to create&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;U&amp;quot;&amp;gt;The entity that contains the values&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;dataContract&amp;quot;&amp;gt;The datacontract to add /remove or update&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity that was created /updated depending on the passed datacontract.&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        private static IPersistance CreateInstance&amp;lt;T, U&amp;gt;(T dataContract, U entity) where T : IPersistance
        {
            IPersistance persistance;
            string typeOfEntity = entity.GetType().Name;
            Assembly assembly = Assembly.GetAssembly(typeof(IPersistance));
            Type type = assembly.GetTypes().FirstOrDefault(assemblyType =&amp;gt; assemblyType.Name.ToLower().Equals(typeOfEntity.ToLower()));
            persistance = (IPersistance)assembly.CreateInstance(type.FullName);
 
            return persistance;
        }

[/csharp]
&amp;lt;p&amp;gt;Der Funktionsumfang der oben beschriebenen Methode ist einfach. Nimm den Entity-Namen und suche in der BusinessModel Library nach dem entsprechenden Typ und instanziiere einen solchen und gib diesen dann zurück, damit er in der aufrufenden Methode in die Liste eingefügt werden kann.
Eine weitere Methode brauchen wir, damit wir einen DataContract, der über keinen Wert in der Id verfügt, persistieren können. (Das Repository ist nicht Teil dieses).
&amp;lt;/p&amp;gt;
1
        /// &amp;lt;summary&amp;gt;
        /// A newly passed datacontract with it's properties
        /// will be persisted in the entity framework.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;DataContractType&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;U&amp;quot;&amp;gt;EntityType (must macht with the datacontract type)&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;dataContract&amp;quot;&amp;gt;The datacontract to persist.&amp;lt;/param&amp;gt;
        private static void PersistDataContract&amp;lt;T, U&amp;gt;(T dataContract) where T : IPersistance where U : EntityObject
        {
            U entityToPersist = Activator.CreateInstance&amp;lt;U&amp;gt;();
            entityToPersist.GetType().GetProperties().ToList().ForEach(dataContractPropertyInfo =&amp;gt;
            {
                string propertyName = dataContractPropertyInfo.Name;
                PropertyInfo entityPropertyInfo = dataContract.GetType().GetProperty(propertyName);
 
                if (entityPropertyInfo != null &amp;amp;&amp;amp; entityPropertyInfo.PropertyType != (typeof(RelatedEnd)))
                {
                    var entityPropertyValue = entityPropertyInfo.GetValue(dataContract, null);
                    if (entityPropertyValue != null)
                    {
                        dataContractPropertyInfo.SetValue(entityToPersist, entityPropertyValue, BindingFlags.Default, null, null, null);
                    }
                }
            });
 
            using (AddressRepository&amp;lt;U&amp;gt; repository = new AddressRepository&amp;lt;U&amp;gt;(new AddressManagementPersistanceModelContainer()))
            {
                repository.Add(entityToPersist);
                repository.SaveChanges();
            }
        }
&lt;/pre&gt;
&lt;p&gt;Mit dieser letzten Methode haben wir den Mapper erstellt. Nun ist es uns möglich von einem Sender ein Objekt der Businessklassen zu erstellen und müssen uns keine Sorgen machen, ob dies bereits persistiert worden ist oder nicht. Wir erhalten als dann die aktualisierten oder neuen Werte von der Datenbank als Resultat zurück und können somit auf dem Client weiter arbeiten.&lt;/p&gt;
&lt;h5&gt;Fazit&lt;/h5&gt;
&lt;p&gt;Der Mapper hat nicht den Anspruch 100% aller Fälle abzudecken, er versucht zu zeigen wie man eine grösstmögliche Modularisierung anstreben kann, ohne dass auf dem Client Server DLL’s refernziert werden müssen. Und natürlich ein nicht zu unterschätzender Punkt ist der Aufwand einmal für die WCF Seite und einmal für die Persistance-Seite ein Modell zu führen.&lt;/p&gt;
&lt;p&gt;Sollte Ihnen der Artikel gefallen haben, würde ich mich über einen kick freuen. Gerne beantworte ich auch Fragen und Kritik.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f02%2f28%2fwcf-datacontracts-synchronisieren-mit-entity-framework-klassen%2f"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f02%2f28%2fwcf-datacontracts-synchronisieren-mit-entity-framework-klassen%2f" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/595/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/595/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=595&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2012/02/28/wcf-datacontracts-synchronisieren-mit-entity-framework-klassen/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/02/entitydesignerdiagram.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">EntityDesignerDiagram</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/02/addressmanagementclassdiagram.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">AddressManagementClassDiagram</media:title>
      </media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f02%2f28%2fwcf-datacontracts-synchronisieren-mit-entity-framework-klassen%2f" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/02/27/sharepoint-der-unterschied-der-versionsbezeichnung-zwischen-frontend-und-datenhaltung.html</guid>
      <link>http://www.databinding.net/blog/post/2012/02/27/sharepoint-der-unterschied-der-versionsbezeichnung-zwischen-frontend-und-datenhaltung.html</link>
      <author> (René)</author>
      <title>Sharepoint - Der Unterschied der Versionsbezeichnung zwischen Frontend und Datenhaltung</title>
      <description>Bei einem grösseren Migrationsprojekt hatte ich eine interessante Aufgabenstellung im Bezug auf die Versionsbezeichnung von Dokumenten. Im Frontend und im Export-XML (Manifest.xml) werden diese in fü...</description>
      <pubDate>Mon, 27 Feb 2012 22:56:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Bei einem grösseren Migrationsprojekt hatte ich eine interessante Aufgabenstellung im Bezug auf die Versionsbezeichnung von Dokumenten. Im Frontend und im Export-XML (Manifest.xml) werden diese in für Benutzer lesbarer Form als 0.1, 0.2 bzw. 1.0 angezeigt. Intern ist die Version dagegen als 1, 2 bzw. 512 abgelegt. &lt;/p&gt; &lt;p&gt;In einem ersten Schritt habe ich eine Metadatenschicht aufgebaut. Die Gründe hierfür sind: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Übersicht des zu erwarteten Aufwands bzw. Fortschritts &lt;/li&gt; &lt;li&gt;Intensive Tests &lt;/li&gt; &lt;li&gt;KPI's und Auswertungen für das Management &lt;/li&gt; &lt;li&gt;Analyse der Datenqualität &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Die aufbereiteten Metadaten enthalten die sogenannte interne Version der Datenhaltung. Die Versionsbezeichnung der Sharepoint Content Deployment API enthält hingegen die Bezeichnung, wie sie der Benutzer sieht. &lt;/p&gt; &lt;p&gt;Tabellarisch gesehen sieht die Gegenüberstellung so aus: &lt;/p&gt; Frontendversion Interne Version 0.1 1 0.2 2 1.0 512 1.1 513 2.0 1024 &lt;p&gt;Der Aufbau dieser Versionen folgt einer Regel: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Hauptversionen steigen in 512-Schritten &lt;/li&gt; &lt;li&gt;Nebenversion fortlaufend &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Mit dieser Information war ich in der Lage, das Ganze in einer Hilfsklasse zu packen, die in der Lage ist, die Konvertierung in die interne bzw. Frontendversion vorzunehmen. &lt;/p&gt; &lt;p&gt;Codebeispiel Konverter: &lt;/p&gt; public class SharepointVersionConverter { const int MainVersionIdentifier = 512; public static string GetSharepointVersionStringFromInternalVersion(int version) { return String.Format(&amp;quot;{0}.{1}&amp;quot;, version / MainVersionIdentifier, version % MainVersionIdentifier); } public static int GetSharepointInternalVersionFromString(string version) { if (String.IsNullOrEmpty(version)) throw new ArgumentException(&amp;quot;version is null or empty.&amp;quot;, &amp;quot;version&amp;quot;); var split = version.Split('.'); if (split.Length != 2) throw new ArgumentException(&amp;quot;Wrong version string&amp;quot;); return Int32.Parse(split[0]) * MainVersionIdentifier + Int32.Parse(split[1]); } } &lt;p&gt;So habe ich jetzt die Möglichkeit, die interne Version aus den Metadaten mit der Frontendversion zu vergleichen, um so die Metadatenschicht aktualisieren zu können. &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://blogs.technet.com/b/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-1.aspx" title="Opens external link in new window" class="external-link-new-window"&gt;Sharepoint Content Deployment API &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1198</guid>
      <link>http://blog.eweibel.net/?p=1198</link>
      <category>Software architecture</category>
      <title>Are stale data evil?</title>
      <description>When you’re a software engineer who produces software for enterprises like banks or assurances, then it is normal you have huge databases (several gigabytes). Such systems have an operative application where users do the daily business of the company and
 there are more informative parts (or strategic parts) of the systems which the management uses. [...]</description>
      <pubDate>Mon, 27 Feb 2012 11:38:51 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1198#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;a href="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_37310173_S.jpg" rel="lightbox[1198]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sexy young woman as devil in fire" border="0" alt="Sexy young woman as devil in fire" align="right" src="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_37310173_S_thumb.jpg?resize=242%2C272" data-recalc-dims="1" /&gt;&lt;/a&gt;When you&amp;#8217;re a software engineer who produces software for enterprises like banks or assurances, then it is normal you have huge databases (several gigabytes). Such systems have an operative application where users do the daily business of the company and there are more informative parts (or strategic parts) of the systems which the management uses. At a first glance, there isn&amp;#8217;t a problem with those two views, but as you probably know, those companies have for the second part for the management a data ware house solution.&lt;/p&gt;
&lt;p&gt;But what if your customer doesn&amp;#8217;t want a data ware house solution? Or if he couldn&amp;#8217;t afford one? Then you will probably add reports, search views to your application. In this blog post I describe some of the aspects if you&amp;#8217;ve to choose this variation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stale data as a requirement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately the question &amp;quot;how old can the data on this report/search be?&amp;quot; is rarely asked. When the answer is &amp;quot;The report/search has to show the right data&amp;quot;, then you have to ask the customer again. The problem is, the data is maybe already stale after the query, because somebody changed some data.&lt;/p&gt;
&lt;p&gt;In my experience there are only a few reports, which need as little as possible stale data. But it is essential that you ask this question.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Isolate only as far as needed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most searches or reports need essential tables in your relational database, so it is important that those searches or reports don&amp;#8217;t have an effect to your daily business. You ask yourself maybe now, how those queries could have any impact?&lt;/p&gt;
&lt;p&gt;If you use Microsoft SQL Server, then the default isolation level is &amp;quot;Read committed&amp;quot;. If a query isn&amp;#8217;t that clever made, it could happen, that the query blocks a whole table (Intended Shared Lock which blocks any inserts or updates). If that happen, your users will remark that by waiting while they try to save their data.&lt;/p&gt;
&lt;p&gt;When you create a search or an report you have to ask yourself always, which Isolation level you will use. When you use dirty reads (Isolation level &amp;quot;Read uncommitted&amp;quot;), then you&amp;#8217;ll probably never generate any locks, but you have to deal with data which is wrong. This because data could be roll backed and the same query wouldn&amp;#8217;t bring the roll backed data again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Stale data or even wrong data on a search or an informational report hasn&amp;#8217;t to be wrong or a mistake. Sometimes it&amp;#8217;s just good enough to fulfil the requirements and make the customer happy. And that&amp;#8217;s what it&amp;#8217;s all about.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1198&amp;amp;title=Are%20stale%20data%20evil%3F" id="wpa2a_10"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=677' rel='bookmark' title='Round-up of a data centric architecture'&gt;Round-up of a data centric architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=1033' rel='bookmark' title='Data quality as a business value'&gt;Data quality as a business value&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=367' rel='bookmark' title='Reason of silence'&gt;Reason of silence&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1198</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1182</guid>
      <link>http://blog.eweibel.net/?p=1182</link>
      <category>Anti patterns</category>
      <category>Software engineering</category>
      <title>Anti-Pattern ‘Validation by Execute ‘n’ Rollback’</title>
      <description>Recently in some reviews I saw an anti-pattern. First you have to know, in the code, there was a validation of the data before it was stored in the database. So far so good. But when I looked at the validation code, I saw the following: public void Validate()
 { DoProcess(true); } And the persist [...]</description>
      <pubDate>Tue, 21 Feb 2012 20:53:12 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1182#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Recently in some reviews I saw an &lt;a href="http://en.wikipedia.org/wiki/Anti-pattern" target="_blank"&gt;anti-pattern&lt;/a&gt;. First you have to know, in the code, there was a validation of the data before it was stored in the database. So far so good. But when I looked at the validation code, I saw the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:4784647f-555d-445a-b026-eff18742640e" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void Validate()
{
	DoProcess(true);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And the persist logic (with some business logic) looked like this:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:2984d7b9-08dc-4564-b9ca-ec0282a83dea" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void Process()
{
	DoProcess(false);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;So, I asked myself, what the Boolean means. Well, here is the method signature:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:f3969625-29f1-43dc-9d12-6aa1c2b25bc3" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void DoProcess(bool bValidate)&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Hmm, the code looks quite magic so far and the argument (and the method name) itself is more or less an anti-pattern already. But when I checked the DoProcess method, I saw something more or less like this:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:99c75cc4-33a5-4803-a995-3b49ff14fcb3" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void DoProcess(bool bValidate)
{
	using (SqlConnection con = new SqlConnection(connectionString))
	{
		con.Open();
		SqlTransaction transaction = con.BeginTransaction();
		
		// Some business logic here...

		if(bValidate)
		{
			transaction.Rollback();
		}
		else
		{
			transaction.Commit();
		}
	}
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_20233238_S1.jpg" rel="lightbox[1182]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Fotolia_20233238_S" border="0" alt="Fotolia_20233238_S" align="right" src="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_20233238_S_thumb1.jpg?resize=103%2C103" data-recalc-dims="1" /&gt;&lt;/a&gt;The idea behind this code is, if it could be executed successfully, that means a successful validation. If there are any problems during the execution, those problems are the result of the validation. The execution itself wouldn&amp;#8217;t be a problem after a successful validation (now I need a drink&amp;#8230;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Doing it better&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s easy to find bad things, but it&amp;#8217;s sometimes harder to do things right. But in this case, the better way is easy. First, you have to separate your business logic from the data access logic. This means following the &lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank"&gt;separation of concern principle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The next point is, that you&amp;#8217;re able to validate your model. So put the logic where it should be. If you use a &lt;a href="http://en.wikipedia.org/wiki/Domain_model" target="_blank"&gt;domain model&lt;/a&gt;, the logic to validate an entity has to be on that entity. Or if you have a &lt;a href="http://martinfowler.com/eaaCatalog/tableModule.html" target="_blank"&gt;table module approach&lt;/a&gt;, the logic to validate an entity has to be on the corresponding table module.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Side effects&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are also other problems with this anti-pattern. There are some side effects with the data.&lt;/p&gt;
&lt;p&gt;As you know, transactions should be as short as possible to prevent lock problems with your data. But if you have combined the business logic and data access logic, your transactions are much longer than needed. To make it worse, this anti-pattern forces you to do it at least twice.&lt;/p&gt;
&lt;p&gt;There are reasonable use cases for &lt;a href="http://en.wikipedia.org/wiki/Isolation_%28database_systems%29" target="_blank"&gt;dirty reads&lt;/a&gt;: For example fast searches. In this case you accept dirty reads and you don&amp;#8217;t want any locks on your data in the database. Normally, the chance to have a dirty read isn&amp;#8217;t that high, but with this anti-pattern the chances to get a dirty read are significantly higher.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1182&amp;amp;title=Anti-Pattern%20%E2%80%98Validation%20by%20Execute%20%E2%80%98n%E2%80%99%20Rollback%E2%80%99" id="wpa2a_12"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1182</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
    </item>
    <item p3:etag="W/&quot;CUUASX86fCp7ImA9WhRaGEk.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-1719091780382207441</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/Ayxao0NV3NM/i-just-discovered-that-quote-of-me-made.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">patterns</category>
      <category domain="http://www.blogger.com/atom/ns#">bookreview</category>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <title>Thoughts about Dependency Injection</title>
      <description>I just discovered, that a quote of me made it to the cover of &lt;a href="http://www.manning.com/seemann/"&gt;Dependency Injection in .NET&lt;/a&gt;: &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-oPuBXTNGbqU/TysKMv39sYI/AAAAAAAABJw/vYe_MddIk8M/s1600/IMG_0344.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://2.bp.blogspot.com/-oPuBXTNGbqU/TysKMv39sYI/AAAAAAAABJw/vYe_MddIk8M/s320/IMG_0344.JPG" style="border: none;" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.manning.com/seemann/" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-GwQ4lRQZSN8/TyqQsPNyeoI/AAAAAAAABJo/4JFyHm06aRM/s1600/seemann_cover150.jpg" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;
Looking at the book in its final form, I am surprised at how well that quote fits my current thoughts.&lt;br /&gt;
&lt;br /&gt;
I like the style of the author. This stackoverflow answer is just a nice example of his style: &lt;a href="http://stackoverflow.com/a/2407614/32749"&gt;dependency injection can be dangerous for your career&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A quote from my original review of the manuscript:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
This is one of the best programming books I have read in the last three years. I like about everything in this book. The technical insights. The way&amp;nbsp; it focuses on concepts and not on tools or technologies. [...] It is definitely suited for programmers that want to learn good design and development techniques. It is not a reference book for a technical framework.&lt;/blockquote&gt;
&lt;br /&gt;
However I have a problem with the hype of dependency injection in general. It definitely goes into the direction of &lt;a href="http://en.wikipedia.org/wiki/No_Silver_Bullet"&gt;accidental complexity&lt;/a&gt;. I mean 584 pages, is a bit heavy for a promise to get better &lt;a href="http://meekrosoft.wordpress.com/2010/10/31/internal-and-external-software-quality/"&gt;internal quality&lt;/a&gt; ... &lt;i&gt;given I do everything else right&lt;/i&gt;. Especially compared to other, much wider topics that can have a much broader impact on your development:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-A3sHSb88rYY/TyxOvkpkfDI/AAAAAAAABKc/5dLYVXs8JnQ/s1600/DI.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-A3sHSb88rYY/TyxOvkpkfDI/AAAAAAAABKc/5dLYVXs8JnQ/s320/DI.jpg" style="border: none;" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
From this perspective&lt;i&gt; "All you need to know ... and more!"&lt;/i&gt; fits quite well: You will learn a lot reading the book, but it is sad that the current state of software development is that loaded with &lt;a href="http://en.wikipedia.org/wiki/No_Silver_Bullet"&gt;accidental complexity&lt;/a&gt; so that you have to be concerned with that much non-essential overhead ...&lt;br /&gt;
&lt;br /&gt;
I also recommend reading a real critique of the current state of dependency injection: &lt;a href="http://www.natpryce.com/articles/000783.html"&gt;"Dependency Injection" Considered Harmful&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="clear: right; font-size: 10px;"&gt;
&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border: 0 none; margin: 0px;" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/Ayxao0NV3NM" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 21 Feb 2012 17:49:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/1719091780382207441/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="3 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=1719091780382207441" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/1719091780382207441?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/1719091780382207441?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-02-21T17:54:08+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">I just discovered, that a quote of me made it to the cover of &lt;a href="http://www.manning.com/seemann/"&gt;
Dependency Injection in .NET&lt;/a&gt;: &lt;br&gt;
&lt;div class="x_separator" style="clear:both; text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/-oPuBXTNGbqU/TysKMv39sYI/AAAAAAAABJw/vYe_MddIk8M/s1600/IMG_0344.JPG" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="239" src="http://2.bp.blogspot.com/-oPuBXTNGbqU/TysKMv39sYI/AAAAAAAABJw/vYe_MddIk8M/s320/IMG_0344.JPG" width="320" style="border:none"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div class="x_separator" style="clear:both; text-align:center"&gt;&lt;a href="http://www.manning.com/seemann/" style="clear:right; float:right; margin-bottom:1em; margin-left:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-GwQ4lRQZSN8/TyqQsPNyeoI/AAAAAAAABJo/4JFyHm06aRM/s1600/seemann_cover150.jpg" style="border:none"&gt;&lt;/a&gt;&lt;/div&gt;
Looking at the book in its final form, I am surprised at how well that quote fits my current thoughts.&lt;br&gt;
&lt;br&gt;
I like the style of the author. This stackoverflow answer is just a nice example of his style:
&lt;a href="http://stackoverflow.com/a/2407614/32749"&gt;dependency injection can be dangerous for your career&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
A quote from my original review of the manuscript:&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;This is one of the best programming books I have read in the last three years. I like about everything in this book. The technical insights. The way&amp;nbsp; it focuses on concepts and not on tools or technologies. [...] It is definitely
 suited for programmers that want to learn good design and development techniques. It is not a reference book for a technical framework.&lt;/blockquote&gt;
&lt;br&gt;
However I have a problem with the hype of dependency injection in general. It definitely goes into the direction of
&lt;a href="http://en.wikipedia.org/wiki/No_Silver_Bullet"&gt;accidental complexity&lt;/a&gt;. I mean 584 pages, is a bit heavy for a promise to get better
&lt;a href="http://meekrosoft.wordpress.com/2010/10/31/internal-and-external-software-quality/"&gt;
internal quality&lt;/a&gt; ... &lt;i&gt;given I do everything else right&lt;/i&gt;. Especially compared to other, much wider topics that can have a much broader impact on your development:&lt;br&gt;
&lt;div class="x_separator" style="clear:both; text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/-A3sHSb88rYY/TyxOvkpkfDI/AAAAAAAABKc/5dLYVXs8JnQ/s1600/DI.jpg" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-A3sHSb88rYY/TyxOvkpkfDI/AAAAAAAABKc/5dLYVXs8JnQ/s320/DI.jpg" width="320" style="border:none"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
From this perspective&lt;i&gt; &amp;quot;All you need to know ... and more!&amp;quot;&lt;/i&gt; fits quite well: You will learn a lot reading the book, but it is sad that the current state of software development is that loaded with
&lt;a href="http://en.wikipedia.org/wiki/No_Silver_Bullet"&gt;accidental complexity&lt;/a&gt; so that you have to be concerned with that much non-essential overhead ...&lt;br&gt;
&lt;br&gt;
I also recommend reading a real critique of the current state of dependency injection:
&lt;a href="http://www.natpryce.com/articles/000783.html"&gt;&amp;quot;Dependency Injection&amp;quot; Considered Harmful&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border:0 none; margin:0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=Ayxao0NV3NM:ZfZ8OMROyuc:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=Ayxao0NV3NM:ZfZ8OMROyuc:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/Ayxao0NV3NM" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-21T17:54:08.114+01:00</app:edited>
      <media:thumbnail url="http://2.bp.blogspot.com/-oPuBXTNGbqU/TysKMv39sYI/AAAAAAAABJw/vYe_MddIk8M/s72-c/IMG_0344.JPG" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/02/i-just-discovered-that-quote-of-me-made.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/02/17/clr-funktion-fuer-den-sql-server-erstellen.html</guid>
      <link>http://www.databinding.net/blog/post/2012/02/17/clr-funktion-fuer-den-sql-server-erstellen.html</link>
      <author> (René)</author>
      <title>CLR Funktion für den SQL Server erstellen</title>
      <description>Lange habe ich auf die Gelegenheit und einen Anwendungsfall gewartet, um eine CLR Funktion für den SQL Server schreiben zu können. Für ein Migrationsprojekt habe ich nun einen Einsatzzweck gefunden. ...</description>
      <pubDate>Fri, 17 Feb 2012 22:18:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Lange habe ich auf die Gelegenheit und einen Anwendungsfall gewartet, um eine CLR Funktion für den SQL Server schreiben zu können. Für ein Migrationsprojekt habe ich nun einen Einsatzzweck gefunden. ;-) &lt;/p&gt; &lt;p&gt;Hauptgrund dafür ist, dass eine Anwendung abgelöst werden soll, die ihre Business Logik in C# implementiert hat. Der Code ist nach den gängigen Clean Code Regeln erstellt, das ist sofort ersichtlich, die Datenhaltung ist dafür sehr kreativ. &lt;/p&gt; &lt;p&gt;Da der imperative Code die Logik aus den Daten zusammenstellt, habe ich mich für den Ansatz entschieden, eine CLR Funktion für den SQL Server zu schreiben. Würde ich diese Logik in T-SQL abbilden, wäre die Performanz und Verständlichkeit grausam. Da eine grosse Datenmenge migriert werden muss, ist ein Ansatz notwendig, der einerseits performant läuft, anderseits wenig Aufwand verursacht. &lt;/p&gt; &lt;p&gt;So habe ich nun die Möglichkeit eine SQL Server Eigenschaft zu nutzen, die seit der Version 2005 existiert. &lt;/p&gt; &lt;p&gt;Gehen wir nun der Reihe nach vor. Zuerst wird ein Projekt vom Typ Klassenbibliothek angelegt. Anschliessend lege ich einen Schlüssel an, damit die Assembly auch signiert werden kann. Die Implementierung ist recht einfach. Es werden die Referenzen: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;System.Data.Sql &lt;/li&gt; &lt;li&gt;System.Data.SqlTypes &lt;/li&gt; &lt;li&gt;Microsoft.SqlServer.Server &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;benötigt. Das Grundgerüst der Klasse hat folgenden Aufbau: &lt;/p&gt; using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server; namespace Firma.Projekt.TVFStringConvert
{ public class StringConvertTable { [SqlFunction(FillRowMethodName = &amp;quot;FillRow&amp;quot;)] public static IEnumerable Inititalize(string tags) { return ParseString(tags); } public static void FillRow(Object obj, out SqlInt32 keyId, out SqlInt32 valueId) { if (obj == null) SqlContext.Pipe.Send(&amp;quot;The obj to create a tupel is null.&amp;quot;); Tag tag = obj as Tag; keyId = tag.ParentId; valueId = tag.Id; } public static ICollection&amp;lt;Tag&amp;gt; ParseString(string tagString) { if (tagString != null) { return ExternalLib.Convert(tagString); } return new List&amp;lt;Tag&amp;gt;(0); } }
} &lt;p&gt;Einstiegspunkt ist in meinem Beispiel die Methode Initialize. Diese wird mit dem Attribute SqlFunction versehen. Mit diesem wird festgelegt, dass die Methode FillRow ein Tupel für die Verwendung in T-SQL aufbereitet. Der erste Parameter enthält die Informationen dafür. Die eigentliche Logik beziehe ich dabei aus einer anderen Bibliothek und ist nicht Bestandteil des Codebeispiels. &lt;/p&gt; &lt;p&gt;Nachdem diese CLR Funktion erstellt ist, muss diese auf dem SQL-Server registriert werden. Dies erfolgt in mehreren Schritten. Zuerst wird die Assembly registriert und anschliessend eine Funktion erstellt, welche auf die Logik in der Assembly zeigt. Nachfolgendes Beispiel zeigt den Ablauf: &lt;/p&gt; USE TestDatabase
GO -- Für Permission Set External_Access und Unsafe
-- Bad Practice, besser die DLL mit einem richtigen Zertifikat signieren -- ALTER DATABASE TestDatabase SET TRUSTWORTHY ON IF EXISTS (SELECT name FROM sysobjects WHERE name = 'StringConvertTable') DROP FUNCTION StringConvertTable
GO IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'TVFStringConvert') DROP ASSEMBLY [TVFStringConvert]
GO CREATE ASSEMBLY [TVFStringConvert] FROM 'C:\projects\ Firma.Projekt.TVFStringConvert\Firma.Projekt.TVFStringConvert.dll'
WITH PERMISSION_SET = UNSAFE --SAFE GO CREATE FUNCTION StringConvertTable(@tags nvarchar(max)) RETURNS TABLE ( keyId int, valueId int
)
AS EXTERNAL NAME TVFStringConvert.[Firma.Projekt.TVFStringConvert.StringConvertTable].[Inititalize]
GO -- Test (Weiterverwendung mit CROSS APPLY)
SELECT * FROM StringConvertTable('kreative Datenlogik')
GO &lt;p&gt;Falls die Fehlermeldung &lt;/p&gt; &lt;p&gt;Execution of user code in the .NET Framework is disabled. Enable &amp;quot;clr enabled&amp;quot; configuration option. &lt;/p&gt; &lt;p&gt;erscheint, muss diese Option aktiviert werden. &lt;/p&gt; &lt;p&gt;Mit folgendem Befehl ist dies möglich: &lt;/p&gt; -- Servereinstellungen
EXEC sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO &lt;p&gt;Ich habe nun einen praktikablen und pragmatischen Weg, der auf die Situation abgestimmt mit akzeptabler Performanz die Daten (kreative Datenlogik) in auswertbarer Form für die Migration bereitstellt. &lt;/p&gt; &lt;p&gt;Mein nächster Schritt besteht darin das Ganze mit parallelisierter Ausführung weiter zu beschleunigen. &lt;/p&gt; &lt;p&gt;Weitere Informationen zum Thema: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/de-de/library/ms131103(v=sql.100).aspx" title="Opens external link in new window" class="external-link-new-window"&gt;CLR Tabellenwertfunktionen &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://msdn.microsoft.com/de-de/library/ms175193.aspx" title="Opens external link in new window" class="external-link-new-window"&gt;CLR Aktivierung &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/02/15/wieder-gefunden.html</guid>
      <link>http://www.databinding.net/blog/post/2012/02/15/wieder-gefunden.html</link>
      <author> (René)</author>
      <title>Wieder gefunden</title>
      <description>Wenn Du ein Schiff bauen willst, dann trommle nicht Männer zusammen um Holz zu beschaffen, Aufgaben zu vergeben und die Arbeit einzuteilen, sondern lehre die Männer die Sehnsucht nach dem weiten, end...</description>
      <pubDate>Wed, 15 Feb 2012 20:38:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Wenn Du ein Schiff bauen willst, dann trommle nicht Männer zusammen um Holz zu beschaffen, Aufgaben zu vergeben und die Arbeit einzuteilen, sondern lehre die Männer die Sehnsucht nach dem weiten, endlosen Meer. &lt;/p&gt; &lt;p&gt;Antoine de Saint-Exupery &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1167</guid>
      <link>http://blog.eweibel.net/?p=1167</link>
      <category>New technology</category>
      <category>Software engineering</category>
      <title>Who should make decisions about technologies?</title>
      <description>One of the biggest problems of software engineering companies in Switzerland is currently to get new software developers. To get new employees there are several points as for example salary, environment, career possibilities and technologies. The last
 point looks easy but in reality it isn’t that easy. Why are essential technology decisions (like languages, frameworks, [...]</description>
      <pubDate>Mon, 13 Feb 2012 16:00:00 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1167#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;a href="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36561464_S.jpg" rel="lightbox[1167]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Stay on course" border="0" alt="Stay on course" align="right" src="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36561464_S_thumb.jpg?resize=280%2C222" data-recalc-dims="1" /&gt;&lt;/a&gt;One of the biggest problems of software engineering companies in Switzerland is currently to get new software developers. To get new employees there are several points as for example salary, environment, career possibilities and technologies. The last point looks easy but in reality it isn&amp;#8217;t that easy. Why are essential technology decisions (like languages, frameworks, application servers or big libraries) not only made by developers? Why does the management mostly make those decisions?&lt;/p&gt;
&lt;p&gt;In this blog post I try to see the technology aspect for creating software from different perspectives. Those views based on experiences and talks I had during the last ten years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As expected the technology used for the software is for the customer irrelevant. But for him counts the working functionality and some non-functional requirements as usability or performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Product owner or product manager&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product owner neither is interested in the used technology directly. He&amp;#8217;s mainly interested to get the functionality in time and in budget. But he&amp;#8217;s also interested to get a good quality of the product, else he&amp;#8217;ll receive complaints from the users (of the customer).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IT department&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The IT department who has to operate the system is somehow interested in technology. They usually don&amp;#8217;t like new technology. One reason is for sure &amp;quot;never change a running system&amp;quot;. Another reason is the needed knowhow for every technology. They have to concern the cost of maintaining that knowhow. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software Architect&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The software architect (and I am currently one) is special. When he&amp;#8217;s interested in technology, he should take responsibility in the project. If not, you have an architect who lives in the &amp;quot;ivory tower&amp;quot;. Mainly the architect should concern more about structure, integration of components or other systems, maintainability and quality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human resource management&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In most of the companies this part get lost. Today it is hard (specially in Switzerland) to get new developers. So, new and fancy technologies make a job or company more attractive. This means, that the human resource management is interested to use up-to-date technologies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, most developers care about technology. Specially younger developers more because they had the possibility to try those at the university or in little projects with their colleagues. For those developers technology is essential for the daily job and to be motivated. If they have not the possibility to use new technology they will leave the company after one or two years. And that isn&amp;#8217;t cheap for the company.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Management&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today most companies use some self-made frameworks. One reason they spent money to create one is the fear of creative developers who want &amp;quot;to fulfil themself&amp;quot;. This means for the management that those developers are out of control and create overcomplicated things with a lot of different technologies. I think this fear is unjustified today, but in the days when everybody could call himself a developer it was not only rightless.   &lt;br /&gt;But the management has the difficult task to concern all the roles I described before and make a reasonably decision.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It seams there is a fight between the developers and the management who should make decisions about technologies. It is important that the management has all the information it needs and can concern all the risks of an introduction of a new technology. But the management has to be open to all the facts and arguments and should not presume to make a decision based on old experiences, assumptions or prejudices.   &lt;br /&gt;If the decisions are too offensive, then you have at the end quite everything in the IT department (for example all java application server products). On the other hand, if the decisions are too defensive, then you will have a stagnation. This will be very expensive to solve because you have to spend a lot of many to get up-to-date again.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1167&amp;amp;title=Who%20should%20make%20decisions%20about%20technologies%3F" id="wpa2a_14"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1167</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634642344000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634642344000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634642344000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Beyond Windows Azure Roles mit Roland Krummenacher</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 7. Februar 2012&amp;nbsp;(18:00 bis 21:00 Uhr)&amp;nbsp;&lt;/h2&gt;
&lt;h3&gt;Beyond Windows Azure Roles mit Roland Krummenacher&lt;/h3&gt;
&lt;p&gt;Nachdem wir im ersten Teil die grundlegenden Konzepte kennengelernt haben, beschäftigen wir uns im zweiten Teil mit dem Thema Beyond Windows Azure Roles.
&lt;/p&gt;
&lt;strong&gt;Abstract:&lt;/strong&gt;
&lt;p&gt;Im zweiten Teil der Serie werden verschiedene Dienste vorgestellt, welche auf der Azure Plattform zusätzlich zu den Web- und Worker-Roles und SQL Azure angeboten werden. Die Themen sind Azure Connect, Azure Content Delivery Network, SQL Azure Reporting Services,
 SQL Azure Data Sync, SQL Azure Federations, Azure AppFabric Service Bus, Azure AppFabric Access Control sowie Azure AppFabric Caching. Das Ziel ist, zusammen mit dem ersten Teil der Vortragsreihe einen kompletten Überblick über den aktuellen Stand der Azure
 Plattform zu bieten. &lt;/p&gt;
&lt;strong&gt;Über Roland Krummenacher&lt;/strong&gt;
&lt;p&gt;Roland Krummenacher ist Software Entwickler bei der bbv Software Services AG. Das Projekt „TrueSense“ seiner Masterarbeit zu Windows Azure wurde 2011 mit dem Microsoft Schweiz Technology Innovation Award ausgezeichnet. Er berät verschiedene Firmen in Azure
 Projekten. &lt;/p&gt;
&lt;strong&gt;Anmeldung&lt;/strong&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/beyond-windows-azure-roles-roland-krummenacher-849287" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbeaz2&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt;&amp;nbsp;betrachtet werden. &lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme! &lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold &lt;/p&gt;
</description>
      <pubDate>Tue, 07 Feb 2012 18:00:00 +0100</pubDate>
    </item>
    <item p3:etag="W/&quot;D0QBRXk-eCp7ImA9WhRbEks.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-8925773607085274690</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/GlFy670vYzc/future-smells-like-javascript.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">javascript</category>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <title>The future smells like JavaScript</title>
      <description>&lt;div class="separator" style="float: right; text-align: right;"&gt;
&lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-SYscWhKil2c/Tyl7VBWFEEI/AAAAAAAABJI/67C2IzYjHGg/s1600/js.jpg" style="border: medium none;" /&gt;&lt;/a&gt;&lt;/div&gt;
Of course I am only &lt;a href="http://davybrion.com/blog/2011/06/you-might-want-to-start-taking-javascript-seriously/"&gt;repeating what others&lt;/a&gt; are preaching about the recent &lt;a href="http://dannorth.net/2011/12/19/the-rise-and-rise-of-javascript/"&gt;rise of JavaScript&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
But I think the movement is significant and can't be overstated. And recent developments are really even making it more and more interesting.&lt;br /&gt;
&lt;br /&gt;
Nobody can deny hat &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; is the de facto programming language of Html5. Every other language trying to bolt itself onto Html5 looks like pure friction so far. And Html5 is looking upon a prospering future.&lt;br /&gt;
&lt;br /&gt;
Today we are used to some established JavaScript frameworks that make working with JavaScript more fun and productive. &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; seems to emerge as the clear leader by popularity here.&lt;br /&gt;
&lt;br /&gt;
More recently&lt;a href="http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/"&gt; tons of javascript application frameworks&lt;/a&gt; (so called MVC frameworks) are emerging, that facilitate programming complex applications inside the browser and taking most of the traditional presentation-logic away from the server.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://nodejs.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 0px; margin-right: 1em;"&gt;&lt;img border="0" height="100" src="http://2.bp.blogspot.com/-paluGXhk-8s/Tym6PfvGp9I/AAAAAAAABJY/Ehjgd7UWack/s320/nodejs.png" style="border: none;" width="220" /&gt;&lt;/a&gt;&lt;/div&gt;
On the other hand we have the &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt; ecosystem that takes JavaScript to the server and allows us to use the same language, concepts, libraries and tools for the full application development stack.&lt;br /&gt;
And that ecosystem is thriving! JavaScript is the &lt;a href="https://github.com/languages"&gt;most popular langage on GitHub&lt;/a&gt; ... and have a look at the impressive &lt;a href="https://github.com/joyent/node/wiki/modules"&gt;node modules list&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Now this is all well and &lt;a href="http://martinfowler.com/bliki/AlphaGeek.html"&gt;alpha-geeky&lt;/a&gt;, but there are showing up the first "real-world" success stories: &lt;a href="http://www.theregister.co.uk/2011/03/01/the_rise_and_rise_of_node_dot_js/"&gt;Voxer&lt;/a&gt;, &lt;a href="http://venturebeat.com/2012/01/24/why-walmart-is-using-node-js/"&gt;Walmart&lt;/a&gt;, &lt;a href="http://venturebeat.com/2011/08/16/linkedin-node/"&gt;LinkedIn&lt;/a&gt; ...&lt;br /&gt;
&lt;br /&gt;
Of course there are &lt;a href="http://teddziuba.com/2011/10/node-js-is-cancer.html"&gt;the critics&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Surprisingly Microsoft recently positioned itself to become one of the most influencing conveyor of the JavaScript hype. It seems that they are investing heavily into JavaScript on different frontiers:&lt;br /&gt;
&lt;br /&gt;
Microsoft was &lt;a href="http://blog.nodejs.org/2011/06/23/porting-node-to-windows-with-microsoft%E2%80%99s-help/"&gt;pushing node.js onto the the Windows environment&lt;/a&gt;.&lt;br /&gt;
Now they are &lt;a href="http://www.windowsazure.com/en-us/develop/nodejs/"&gt;pushing it into their Azure cloud platform&lt;/a&gt;. And &lt;a href="http://www.windowsazure.com/en-us/develop/nodejs/tutorials/deploying-with-cloud9/"&gt;evolving a 3rd party ecosystem around that&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="float: right; text-align: center;"&gt;
&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-GyiFQw-SVLc/Tyl7te9DLfI/AAAAAAAABJQ/19iB-ne5kIE/s320/w8.jpg" style="border: none;" width="200" /&gt;&lt;/div&gt;
But probably the biggest step for the future of JavaScript is the new strategy of Microsoft for &lt;a href="http://en.wikipedia.org/wiki/Windows_8"&gt;Windows 8&lt;/a&gt; desktop and tablet applications (Metro style apps). While there are several options for developing Metro style apps, &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx"&gt;JavaScript seems to become a major pillar&lt;/a&gt;.&lt;br /&gt;
This move opens up yet another area for JavaScript and JavaScript developers, completely adjacent to the web.&lt;br /&gt;
Developing for the desktop (or tablet) will most likely always be pretty different than for the web. For Metro style apps there will be a lot of new concepts, libraries and tools that are different to the ones that are used in web development (just have a look at &lt;a href="http://en.wikipedia.org/wiki/Windows_Runtime"&gt;WinRT&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465493.aspx"&gt;WinJS&lt;/a&gt; ...).&lt;br /&gt;
But the desktop- and the web-stack will move closer together and JavaScript with HTML5 and CSS will be the common denominator. Which I think is a very interesting evolution.&lt;br /&gt;
For instance look at this &lt;a href="http://code.msdn.microsoft.com/windowsapps/Groove-Drum-Sequencer-cc6028ec"&gt;example of a drum sequencer&lt;/a&gt; (a traditional client application) that is using JavaScript and jQuery for its UI.&lt;br /&gt;
The prospect of reusing code and knowhow between desktop-ui- and web-ui-programming seems tempting ... even if a lot of &lt;a href="https://twitter.com/#%21/ursenzler/status/162793217425801216"&gt;.NET developers&lt;/a&gt; and &lt;a href="http://martinfowler.com/bliki/gotoAarhus2011.html"&gt;other gurus&lt;/a&gt; are not so thrilled by the prospect of omnipresent JavaScript.&lt;br /&gt;
&lt;br /&gt;
Of course another interesting thing will be to see how Metro style apps will change the architecture of future desktop applications. I think some concepts from web development will get adopted into desktop development. A stricter enforcement of separation between UI- and backend-components within a single application will most probably be a result (i.e. there seems to be no notion of traditional data-access in WinRT).&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="color: #444444;"&gt;
&lt;span style="font-size: x-small;"&gt;PS: This is my first cross-post between &lt;a href="http://blog.jonasbandi.net/"&gt;my blog&lt;/a&gt; and &lt;a href="http://www.planetgeek.ch/"&gt;planetgeek.ch&lt;/a&gt;. Thanks &lt;a href="https://twitter.com/#%21/danielmarbach"&gt;@danielmarbach&lt;/a&gt; for inviting me.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="clear: right; font-size: 10px;"&gt;
&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border: 0 none; margin: 0px;" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/GlFy670vYzc" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 02 Feb 2012 21:48:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/8925773607085274690/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="3 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=8925773607085274690" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8925773607085274690?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/8925773607085274690?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-02-03T11:35:54+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;div class="x_separator" style="float:right; text-align:right"&gt;&lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-SYscWhKil2c/Tyl7VBWFEEI/AAAAAAAABJI/67C2IzYjHGg/s1600/js.jpg" style="border:medium none"&gt;&lt;/a&gt;&lt;/div&gt;
Of course I am only &lt;a href="http://davybrion.com/blog/2011/06/you-might-want-to-start-taking-javascript-seriously/"&gt;
repeating what others&lt;/a&gt; are preaching about the recent &lt;a href="http://dannorth.net/2011/12/19/the-rise-and-rise-of-javascript/"&gt;
rise of JavaScript&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
But I think the movement is significant and can't be overstated. And recent developments are really even making it more and more interesting.&lt;br&gt;
&lt;br&gt;
Nobody can deny hat &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; is the de facto programming language of Html5. Every other language trying to bolt itself onto Html5 looks like pure friction so far. And Html5 is looking upon a prospering
 future.&lt;br&gt;
&lt;br&gt;
Today we are used to some established JavaScript frameworks that make working with JavaScript more fun and productive.
&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; seems to emerge as the clear leader by popularity here.&lt;br&gt;
&lt;br&gt;
More recently&lt;a href="http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/"&gt; tons of javascript application frameworks&lt;/a&gt; (so called MVC frameworks) are emerging, that facilitate programming complex applications inside the browser and
 taking most of the traditional presentation-logic away from the server.&lt;br&gt;
&lt;br&gt;
&lt;div class="x_separator" style="clear:both; text-align:center"&gt;&lt;a href="http://nodejs.org/" style="clear:left; float:left; margin-bottom:0px; margin-right:1em"&gt;&lt;img border="0" height="100" src="http://2.bp.blogspot.com/-paluGXhk-8s/Tym6PfvGp9I/AAAAAAAABJY/Ehjgd7UWack/s320/nodejs.png" width="220" style="border:none"&gt;&lt;/a&gt;&lt;/div&gt;
On the other hand we have the &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt; ecosystem that takes JavaScript to the server and allows us to use the same language, concepts, libraries and tools for the full application development stack.&lt;br&gt;
And that ecosystem is thriving! JavaScript is the &lt;a href="https://github.com/languages"&gt;
most popular langage on GitHub&lt;/a&gt; ... and have a look at the impressive &lt;a href="https://github.com/joyent/node/wiki/modules"&gt;
node modules list&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
Now this is all well and &lt;a href="http://martinfowler.com/bliki/AlphaGeek.html"&gt;alpha-geeky&lt;/a&gt;, but there are showing up the first &amp;quot;real-world&amp;quot; success stories:
&lt;a href="http://www.theregister.co.uk/2011/03/01/the_rise_and_rise_of_node_dot_js/"&gt;
Voxer&lt;/a&gt;, &lt;a href="http://venturebeat.com/2012/01/24/why-walmart-is-using-node-js/"&gt;
Walmart&lt;/a&gt;, &lt;a href="http://venturebeat.com/2011/08/16/linkedin-node/"&gt;LinkedIn&lt;/a&gt; ...&lt;br&gt;
&lt;br&gt;
Of course there are &lt;a href="http://teddziuba.com/2011/10/node-js-is-cancer.html"&gt;
the critics&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
Surprisingly Microsoft recently positioned itself to become one of the most influencing conveyor of the JavaScript hype. It seems that they are investing heavily into JavaScript on different frontiers:&lt;br&gt;
&lt;br&gt;
Microsoft was &lt;a href="http://blog.nodejs.org/2011/06/23/porting-node-to-windows-with-microsoft%E2%80%99s-help/"&gt;
pushing node.js onto the the Windows environment&lt;/a&gt;.&lt;br&gt;
Now they are &lt;a href="http://www.windowsazure.com/en-us/develop/nodejs/"&gt;pushing it into their Azure cloud platform&lt;/a&gt;. And
&lt;a href="http://www.windowsazure.com/en-us/develop/nodejs/tutorials/deploying-with-cloud9/"&gt;
evolving a 3rd party ecosystem around that&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;div class="x_separator" style="float:right; text-align:center"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-GyiFQw-SVLc/Tyl7te9DLfI/AAAAAAAABJQ/19iB-ne5kIE/s320/w8.jpg" width="200" style="border:none"&gt;&lt;/div&gt;
But probably the biggest step for the future of JavaScript is the new strategy of Microsoft for
&lt;a href="http://en.wikipedia.org/wiki/Windows_8"&gt;Windows 8&lt;/a&gt; desktop and tablet applications (Metro style apps). While there are several options for developing Metro style apps,
&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx"&gt;JavaScript seems to become a major pillar&lt;/a&gt;.&lt;br&gt;
This move opens up yet another area for JavaScript and JavaScript developers, completely adjacent to the web.&lt;br&gt;
Developing for the desktop (or tablet) will most likely always be pretty different than for the web. For Metro style apps there will be a lot of new concepts, libraries and tools that are different to the ones that are used in web development (just have a look
 at &lt;a href="http://en.wikipedia.org/wiki/Windows_Runtime"&gt;WinRT&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465493.aspx"&gt;
WinJS&lt;/a&gt; ...).&lt;br&gt;
But the desktop- and the web-stack will move closer together and JavaScript with HTML5 and CSS will be the common denominator. Which I think is a very interesting evolution.&lt;br&gt;
For instance look at this &lt;a href="http://code.msdn.microsoft.com/windowsapps/Groove-Drum-Sequencer-cc6028ec"&gt;
example of a drum sequencer&lt;/a&gt; (a traditional client application) that is using JavaScript and jQuery for its UI.&lt;br&gt;
The prospect of reusing code and knowhow between desktop-ui- and web-ui-programming seems tempting ... even if a lot of
&lt;a href="https://twitter.com/#%21/ursenzler/status/162793217425801216"&gt;.NET developers&lt;/a&gt; and
&lt;a href="http://martinfowler.com/bliki/gotoAarhus2011.html"&gt;other gurus&lt;/a&gt; are not so thrilled by the prospect of omnipresent JavaScript.&lt;br&gt;
&lt;br&gt;
Of course another interesting thing will be to see how Metro style apps will change the architecture of future desktop applications. I think some concepts from web development will get adopted into desktop development. A stricter enforcement of separation between
 UI- and backend-components within a single application will most probably be a result (i.e. there seems to be no notion of traditional data-access in WinRT).&lt;br&gt;
&lt;div style="color:#999999"&gt;&lt;span style="font-size:x-small"&gt;&lt;br&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="color:#444444"&gt;&lt;span style="font-size:x-small"&gt;PS: This is my first cross-post between
&lt;a href="http://blog.jonasbandi.net/"&gt;my blog&lt;/a&gt; and &lt;a href="http://www.planetgeek.ch/"&gt;
planetgeek.ch&lt;/a&gt;. Thanks &lt;a href="https://twitter.com/#%21/danielmarbach"&gt;@danielmarbach&lt;/a&gt; for inviting me.&lt;/span&gt;&lt;br&gt;
&lt;span style="font-size:x-small"&gt;&lt;br&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border:0 none; margin:0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=GlFy670vYzc:bRxfiQubEpQ:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=GlFy670vYzc:bRxfiQubEpQ:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/GlFy670vYzc" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-03T11:35:54.750+01:00</app:edited>
      <media:thumbnail url="http://3.bp.blogspot.com/-SYscWhKil2c/Tyl7VBWFEEI/AAAAAAAABJI/67C2IzYjHGg/s72-c/js.jpg" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/02/future-smells-like-javascript.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1154</guid>
      <link>http://blog.eweibel.net/?p=1154</link>
      <category>.NET</category>
      <category>Good practices</category>
      <title>TF.exe or maybe the most useful tool for TFS</title>
      <description>When you’ve to use TFS, then there are moments when you’re missing some features in the UI tools in Visual Studio. In those situations the console tool tf.exe is very useful. In this short blog post I summarized the commands I used the most. Update an
 old version of a branch It could happen, that [...]</description>
      <pubDate>Tue, 31 Jan 2012 22:51:17 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1154#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;a href="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/visualstudio.png" rel="lightbox[1154]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="visualstudio" border="0" alt="visualstudio" align="right" src="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/visualstudio_thumb.png?resize=181%2C54" data-recalc-dims="1" /&gt;&lt;/a&gt;When you&amp;#8217;ve to use &lt;a href="http://en.wikipedia.org/wiki/Team_Foundation_Server" target="_blank"&gt;TFS&lt;/a&gt;, then there are moments when you&amp;#8217;re missing some features in the UI tools in Visual Studio. In those situations the console tool &lt;a href="http://msdn.microsoft.com/en-us/library/z51z7zy0.aspx" target="_blank"&gt;tf.exe&lt;/a&gt; is very useful. In this short blog post I summarized the commands I used the most.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update an old version of a branch&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It could happen, that the production branch or an older feature branch isn&amp;#8217;t up-to-date, because somebody forgot one or several merges from the main branch. To fix that, there could be used the following statement:&lt;/p&gt;
&lt;p&gt;tf.exe merge /recursive /force /version:T $/Project/Main/Source $/Project/Production/Source&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Delete a branch permanently&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a while the number of merged feature branches increase. Normally, you would delete the merged feature branches, so they aren&amp;#8217;t any longer visible in Visual Studio. But in my case, I display also the deleted items and this means, that I see all the deleted feature branches. To remove the old merged feature branches, there could be used the following statement:&lt;/p&gt;
&lt;p&gt;tf.exe destroy $/Project/Development/FeatureX&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1154&amp;amp;title=TF.exe%20or%20maybe%20the%20most%20useful%20tool%20for%20TFS" id="wpa2a_16"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=622' rel='bookmark' title='Branching practices'&gt;Branching practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=1082' rel='bookmark' title='Branch or not to branch'&gt;Branch or not to branch&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1154</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634636296000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634636296000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634636296000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Einführung in die Azure Plattform mit Kay Herzam</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Dienstag, 31. Januar 2012 (18:00&amp;nbsp;bis 21:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Einführung in die Azure Plattform mit Kay Herzam&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;Im November 2011 haben wir einen Anlass zum Thema HTML, Javascript und Azure mit Tim Fischer durchgeführt. Diese Themen wollen wir im Jahr 2012 intensivieren und mit einen vertieften Blick auf Azure beginnen. Im ersten Teil der Serie werden wir uns mit den
 Konzepten und wichtigsten Bestandteilen beschäftigen. &lt;/p&gt;
&lt;strong&gt;Abstract:&lt;/strong&gt;
&lt;p&gt;Im ersten Vortrag werden die verschiedenen Bestandteile der Azure Plattform und die grundlegenden Konzepte dahinter vorgestellt. Nebst einer technischen Übersicht der einzelnen Komponenten werden auch Themen wie die Kosten einer Cloud Applikation, sowie
 die technischen und architektonischen Herausforderungen an den Cloud Entwickler beleuchtet.
&lt;/p&gt;
&lt;strong&gt;Über Kay Herzam&lt;/strong&gt;
&lt;p&gt;Kay Herzam arbeitet seit über 14 Jahren in der Software Entwicklung. Er hat in verschiedenen Positionen im Engineering, der Entwicklung und Teamleitung und im Consulting mit diversen Technologien und Plattformen gearbeitet. Seit 2007 leitet er seine eigene
 Firma in Bern. &lt;/p&gt;
&lt;strong&gt;Anmeldung&lt;/strong&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/einfuhrung-azure-plattform-kay-herzam-849285" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.
&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbeaz1&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt;&amp;nbsp;betrachtet werden. &lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme! &lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold &lt;/p&gt;
</description>
      <pubDate>Tue, 31 Jan 2012 18:00:00 +0100</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1150</guid>
      <link>http://blog.eweibel.net/?p=1150</link>
      <category>Good practices</category>
      <title>Education in companies</title>
      <description>I do a lot of trainings and courses in the company where I work currently. And I was also in a lot of courses too. But I think, that those courses or trainings don’t work really. The reason, why is that they are just so called &amp;quot;sheep dips&amp;quot;. Sheep dip training
 doesn’t work The first [...]</description>
      <pubDate>Tue, 31 Jan 2012 17:00:00 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1150#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
&lt;p&gt;&lt;a href="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/image19.png" rel="lightbox[1150]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/image_thumb19.png?resize=191%2C231" data-recalc-dims="1" /&gt;&lt;/a&gt;I do a lot of trainings and courses in the company where I work currently. And I was also in a lot of courses too. But I think, that those courses or trainings don&amp;#8217;t work really. The reason, why is that they are just so called &amp;quot;sheep dips&amp;quot;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sheep dip training doesn’t work&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first time when I heard the expression &amp;quot;sheep dip&amp;quot; was in the excellent book &amp;quot;&lt;a href="http://www.amazon.de/gp/product/1934356050/ref=as_li_tf_tl?ie=UTF8&amp;#038;tag=assumptiofadv-21&amp;#038;linkCode=as2&amp;#038;camp=1638&amp;#038;creative=6742&amp;#038;creativeASIN=1934356050" title="Pragmatic Thinking &amp;#038; Learning" target="_blank"&gt;Pragmatic Thinking and Learning&lt;/a&gt;&amp;quot;. It means a training where a lot of people receive a lot of information, mostly just by sitting, listening and watching a lot of PowerPoint slides.&lt;/p&gt;
&lt;p&gt;A sheep dip is in real the following (from &amp;quot;Pragmatic Thinking &amp;amp; Learning&amp;quot;):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A sheep dip (for real) is a large tank in which you dunk the unsuspecting &lt;br /&gt;sheep to clean them up and rid them of parasites (see picture). The sheep line up (as sheep do) you grab one and dunk in the tank for an intensive, alien, and largely toxic experience. It wears off, of course, so you have to dip them again.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem is the exact same with the education trainings in companies. A lot of employees spend time and the revenue is very, very little.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Doing it better&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The question is &amp;quot;How can we do education better?&amp;quot;. In my experience there are some better ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pair programming &lt;/li&gt;
&lt;li&gt;Little workshops (just the team) &lt;/li&gt;
&lt;li&gt;Collaboration platforms &lt;/li&gt;
&lt;li&gt;Good documentation &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the best ways to learn is to get feedback fast. In a &amp;quot;sheep dip&amp;quot; training/course there is nearly no chance to have a such feedback. Therefor pair programming is very good, but hard to do. At least one of the two developers has to be experienced, so the knowledge transfer could happen.&lt;/p&gt;
&lt;p&gt;Another way I like very much are little workshops. Normally I ask a developer team, if they are interested in some kind of workshops (reviews, designing, architecture, etc.) based on some reviews of their outcome. The feedback what I received so far is very positive.&lt;/p&gt;
&lt;p&gt;I think collaboration platforms, like wikis or OneNote, are still underestimated in corporate environments. But I had a chance to participate in a team where they used OneNote. It was really great, because they added all little tricks and tips how to handle problems with the frameworks and tools in this collaborative platform.&lt;/p&gt;
&lt;p&gt;The last way is a good documentation. But what is a good documentation? Well, for me it has to be up-do-date, clear, short, contains examples and easy to read. Another point is, that the documentation has to be searchable. It should be easy to find things fast and just in one place.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1150&amp;amp;title=Education%20in%20companies" id="wpa2a_18"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1150</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments>
    </item>
    <item>
      <guid isPermaLink="true">http://blog.eweibel.net/?p=1143</guid>
      <link>http://blog.eweibel.net/?p=1143</link>
      <category>Private</category>
      <title>Services and customer orientation</title>
      <description>Usually I don’t blog here about personal topics. But as some friends know, I was some days ago in the united states – to be more precise, at the west coast. I visited the cities San Francisco, Las Vegas and Los Angeles. I was a great trip and I enjoyed
 the cities, the landscape (Grand [...]</description>
      <pubDate>Tue, 31 Jan 2012 16:30:00 Z</pubDate>
      <comments>http://blog.eweibel.net/?p=1143#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Patrick</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&lt;a href="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/GrandCanyon.jpg" rel="lightbox[1143]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="GrandCanyon" border="0" alt="GrandCanyon" align="right" src="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/GrandCanyon_thumb.jpg?resize=318%2C213" data-recalc-dims="1" /&gt;&lt;/a&gt;Usually I don&amp;#8217;t blog here about personal topics. But as some friends know, I was some days ago in the united states &amp;#8211; to be more precise, at the west coast. I visited the cities San Francisco, Las Vegas and Los Angeles. I was a great trip and I enjoyed the cities, the landscape (&lt;a href="http://en.wikipedia.org/wiki/Grand_Canyon" target="_blank"&gt;Grand Canyon&lt;/a&gt;) and a lot more.&lt;/p&gt;
&lt;p&gt;To be honest, one of the most things which impressed me on the trip was the service and customer orientation of the staff in the hotels, restaurants or taxis. I think there is a gap between what Europe (specially Switzerland) and the USA regarding services and customer orientation. The old world &amp;#8211; or Europe &amp;#8211; could learn one or more things from the USA.&lt;/p&gt;
&lt;p&gt;In the following chapters I try to describe some experiences and conclusion about my experiences during the trip.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be professional&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When I did the helicopter flight to the Grand Canyon, the whole service chain (chauffeur from the hotel, the pilot, the service staff) was just perfect and everything works. They know what they are doing and how the whole process works.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a great experience for a customer when he feels, when a service provider has everything under control and his a master at what he&amp;#8217;s doing. Such an experience builds also trust and the customer will return again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be personal&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This point is where I think the biggest gap between Europe and the USA is. For example at Starbucks they ask you for your first name so they call you when they finished the coffee or bagels. In Switzerland for example you have to guess if the coffee which was finished is for you or not.&lt;/p&gt;
&lt;p&gt;One of the most important things to do as a service provider is to make the customer happy. For that you have to build trust and make him feel safe. To build trust, the customer has to know you, so it isn&amp;#8217;t unprofessional to speak not only about things which are work related.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It was a great experience to see another way of customer orientation. But there were also some problems, which also exists in Europe. As a service provider you need very good and competent staff. Unfortunately, in some hotels I met a concierge, which wasn&amp;#8217;t able to help or understand my need really. And that is what destroy trust, which is unfortunately a really fragile thing.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1143&amp;amp;title=Services%20and%20customer%20orientation" id="wpa2a_20"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1143</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=539</guid>
      <link>http://schaedlerdaniel.wordpress.com/2012/01/31/wcf-service-uber-jquery-ansprechen-leicht-gemacht/</link>
      <category>ASP.NET /AJAX /ASP.NET MVC</category>
      <category>WCF</category>
      <category>JQuery AJAX</category>
      <category>WCF ImageGallery</category>
      <category>WCF und ASP.NET</category>
      <category>WCF und JQuery</category>
      <title>WCF Service über JQuery ansprechen leicht gemacht</title>
      <description>Zur Zeit bin ich an einer Weiterbildung für die Verwendung von .NET im Grossfirmenumfeld. Ein Thema darin ist ist Windows Communication Foundation (kurz WCF genannt). Da ich aus der Ecke der Webprogrammierer komme interessiert es mit primär, wie ich einen
 WCF-Service von einer Webseite her ansprechen kann. Was brauchen wir denn für einen Service der [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=539&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Tue, 31 Jan 2012 13:13:13 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2012/01/31/wcf-service-uber-jquery-ansprechen-leicht-gemacht/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Zur Zeit bin ich an einer Weiterbildung für die Verwendung von .NET im Grossfirmenumfeld. Ein Thema darin ist ist &lt;a href="http://msdn.microsoft.com/de-de/library/dd456779.aspx" target="_blank"&gt;Windows Communication Foundation (kurz WCF genannt)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Da ich aus der Ecke der Webprogrammierer komme interessiert es mit primär, wie ich einen WCF-Service von einer Webseite her ansprechen kann.&lt;/p&gt;
&lt;p&gt;Was brauchen wir denn für einen Service der auf der Basis der WCF für einen Webseitenzugriff konfiguriert ist?&lt;/p&gt;
&lt;h3&gt;Vorbereitungen&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Erstellen eines neues ASP.NET Projektes über den Menüpunkt &amp;#8220;Neues Projekt erstellen&amp;#8230;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Mit &lt;a href="" target="_blank"&gt;NuGet&lt;/a&gt; zuerst die JQueryUI und dann die JQuery&lt;br /&gt;
            Libraries hinzufügen&lt;/li&gt;
&lt;li&gt;Erstellen Sie einen Ordner Services in der Solution&lt;/li&gt;
&lt;li&gt;In den zuvor erstellten Service fügen Sie ein neues Item hinzu (Vorlage für einen&lt;br /&gt;
            WCF-Service) und benennen Sie diesen mit &amp;#8220;ImageService&amp;#8221;&lt;/li&gt;
&lt;li&gt;Visual Studio erstellt uns eine .svc und ein entsprechendes Interface ImageService.cs.&lt;br /&gt;
            Hier stehen noch nicht allzu viele Sachen drin sodass wir die DoWork Methode im&lt;br /&gt;
            Interface ein wenig anpassen. Nach dem Hinzufügen des Service sollte die Solution&lt;br /&gt;
            mit den aktuellen JQuery Referenzen ausgestattet sein und folgende .NET Dll’s als&lt;br /&gt;
            Referenz aufweisen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System.Service.Model&lt;/li&gt;
&lt;li&gt;System.Runtime.Serializatin&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;h3&gt;WCF Konfiguration&lt;/h3&gt;
&lt;p&gt;Soweit so gut. Wir sind bereit den WCF Service zu implementieren. Hierzu wird in die Solution noch ein Verzeichnis Images hinzugefügt, dass einfach mit den Beispiel Bildern von Windows befüllt wird. Zuerst fangen wir mit der Konfiguration der Web.Config für unseren Dienst an.&lt;/p&gt;
&lt;p&gt;Konfiguration der Web.Config mit dem „WCF Service Configurator“ (Finden Sie unter Tools bei Visual Studio 2010)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Erstellen eines neuen Services &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/01_wcfservicekonfigurieren.jpg"&gt;&lt;br /&gt;
            &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/01_wcfservicekonfigurieren.jpg?w=595" alt="" title="WCF Service konfigurieren"   class="aligncenter size-full wp-image-553" /&gt;&lt;/a&gt;
        &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Auswahl der DLL von welcher her der Service generiert werden soll. Sollte im bin&lt;br /&gt;
            Verzeichnis keine DLL vorliegen so kann man dies mit dem „Erstellen der Solution“&lt;br /&gt;
            beheben&lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/02_wcfservicekonfigurieren.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/02_wcfservicekonfigurieren.jpg?w=595" alt="" title="DLL Auswählen"   class="aligncenter size-full wp-image-556" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Den Vertrag (Contract) können wir stehen lassen und weiter klicken. &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/03_wcfservicekonfigurieren.jpg"&gt;&lt;br /&gt;
            &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/03_wcfservicekonfigurieren.jpg?w=595" alt="" title="Contract Auswahl"   class="aligncenter size-full wp-image-561" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Da wir einen ImageService für’s Internet bereitstellen wollen, lassen wir die Konfiguration&lt;br /&gt;
                auf http sein. &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/04_wcfservicekonfigurieren.jpg"&gt;&lt;br /&gt;
                    &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/04_wcfservicekonfigurieren.jpg?w=595" alt="" title="Protokoll Auswahl"   class="aligncenter size-full wp-image-562" /&gt;&lt;/a&gt;
                &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Auch weitere Optionen belassen wir auf dem Standard. Wir wollen einen einfachen&lt;br /&gt;
                    ImageService ohne Duplex Funktion und lassen den Vorschlag des Assistenten so wie&lt;br /&gt;
                    er ist. &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/05_wcfservicekonfigurieren.jpg"&gt;&lt;br /&gt;
                        &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/05_wcfservicekonfigurieren.jpg?w=595" alt="" title="Interopabilität wählen"   class="aligncenter size-full wp-image-563" /&gt;&lt;/a&gt;
                &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Zum Schluss erstellen wir die Endpunkt-Adresse über welche der Service erreicht&lt;br /&gt;
                    werden soll. &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/06_wcfservicekonfigurieren.jpg"&gt;&lt;br /&gt;
                        &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/06_wcfservicekonfigurieren.jpg?w=595" alt="" title="Endpunkt Konfiguration"   class="aligncenter size-full wp-image-564" /&gt;&lt;/a&gt;
                &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Wir haben einen neuen Service erstellt, wie uns der Assistent nun mitteilt. &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/07_wcfservicekonfigurieren.jpg"&gt;&lt;br /&gt;
                    &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/07_wcfservicekonfigurieren.jpg?w=595" alt="" title="Finish Wizard Dialog"   class="aligncenter size-full wp-image-565" /&gt;&lt;/a&gt;
                &lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Anpassen des WCF Service für unsere Bedürfnisse&lt;/h3&gt;
&lt;p&gt;Nun haben wir den Service deklarativ in der Web.Config erstellt. Nun müssen wir noch Anpassungen vornehmen, damit der Service auch mit einer &lt;a href="http://msdn.microsoft.com/de-de/library/system.servicemodel.webhttpbinding.aspx" target="_blank"&gt;WebHttpBinding&lt;/a&gt; angesprochen werden kann (das Programmiermodell http von WCF).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anpassen des erstellten Service für die Verwendung mit ASP.NET (WCF Service Configurator).&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Selektieren Sie den zuvor erstellten Endpunkt &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/01_enpointanpassen.jpg"&gt;&lt;br /&gt;
            &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/01_enpointanpassen.jpg?w=595" alt="" title="Endpunkt anpassen"   class="aligncenter size-full wp-image-566" /&gt;&lt;/a&gt;
        &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Das Binding muss mit der DropDownListe auf webHttpBinding gewechselt werden.
        &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Nun müssen wir dem Binding noch eine Konfiguration zuordnen. Dies können wir tun&lt;br /&gt;
            indem wir den Punkt „Bindings“ auswählen und ein neues hinzufügen. &lt;strong&gt;ACHTUNG&lt;/strong&gt;:&lt;br /&gt;
            Man muss das WebHttpBinding auswählen, damit die erstellte Konfiguration darauf&lt;br /&gt;
            wirkt. &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Wir geben der neu erstellen Konfiguration einen Namen und belassen die Standardwerte&lt;br /&gt;
            so wie sie sind (Die Ausnahmen werden nachstehend aufgelistet).&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
                        &lt;strong&gt;Konfigurationselement&lt;/strong&gt;
                    &lt;/th&gt;
&lt;th&gt;
                        &lt;strong&gt;Wert&lt;/strong&gt;
                    &lt;/th&gt;
&lt;th&gt;
                        &lt;strong&gt;Grund&lt;/strong&gt;
                    &lt;/th&gt;
&lt;tr&gt;
&lt;td&gt;
                            ByPassProxyOnLocal
                        &lt;/td&gt;
&lt;td&gt;
                            True
                        &lt;/td&gt;
&lt;td&gt;
                            Lokale Adressen werden nicht über einenProxy-Server aufgelöst.
                        &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
                            CrossDomainScriptAccessEnabled
                        &lt;/td&gt;
&lt;td&gt;
                            True
                        &lt;/td&gt;
&lt;td&gt;
                            Zugriff von überall her möglich per Script (Internet Service).
                        &lt;/td&gt;
&lt;/tr&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Nun wechseln wir wieder zu den Endpunkten und wählen unseren erstellten Endpunkt&lt;br /&gt;
            aus. Danach können wir in der Bindungskonfiguration die neu erstellte Bindung auswählen.&lt;br /&gt;
            &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/02_enpointanpassen.jpg"&gt;&lt;br /&gt;
                &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/02_enpointanpassen.jpg?w=595" alt="" title="02_EnpointAnpassen"   class="aligncenter size-full wp-image-568" /&gt;&lt;/a&gt;
        &lt;/li&gt;
&lt;p&gt;
    &lt;/ol&gt;
&lt;/p&gt;
&lt;h3&gt;Den WCF Service zum Leben erwecken&lt;/h3&gt;
&lt;p&gt;Wir erstellen uns eine Global.asax die für das Starten und Beenden der WebApplikationen die entsprechenden Methoden bereitstellt. Interessant sind die Methoden Application_Start und die Application_End.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wir fügen unserem Webprojekt eine Global.asax mit dem Befehl Add new Item… hinzu.
        &lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;Damit wir webHttp verwenden können müssten wir System.ServiceModel.Web referenzieren&lt;br /&gt;
            damit wir ein Objekt vom Typ WebserviceHost erstellen können. &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
                Die Global.asax sieht dann wie folgt aus:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: csharp; title: ; notranslate"&gt; using System; using System.ServiceModel.Web; using
                Sample.WebHttpImageService.Services; namespace Sample.WebHttpImageService { public
                class Global : System.Web.HttpApplication { ///
                &amp;lt;summary&amp;gt;
        /// Host is declared here to not been removed by
        /// the carbage collector.
        /// &amp;lt;/summary&amp;gt;
                private static WebServiceHost host = new WebServiceHost(typeof(ImageService), new
                Uri(&amp;quot;http://localhost:8099&amp;quot;)); ///
                &amp;lt;summary&amp;gt;
        /// Occurs when application is staring up.
        /// &amp;lt;/summary&amp;gt;
                ///
                &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
                ///
                &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
                protected void Application_Start(object sender, EventArgs e) { try { host.Open();
                } catch (Exception exception) { host.Abort(); } } ///
                &amp;lt;summary&amp;gt;
        /// Occurs at application shutdown.
        /// &amp;lt;/summary&amp;gt;
                ///
                &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
                ///
                &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
                protected void Application_End(object sender, EventArgs e) { host.Close(); } } }
                &lt;/pre&gt;
&lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
                Startet man nun das Projekt kann unter Umständen die Fehlermedung kommen, dass man&lt;br /&gt;
                eine nicht registrierte URL versucht aufzurufen. Abhilfe schafft hier das Visual&lt;br /&gt;
                Studio als Administrator zu starten (generell mit WCF zu empfehlen).&lt;/p&gt;
&lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
                Nun wollen wir prüfen ob der Service mit der Methode GetImages angesprochen werden&lt;br /&gt;
                kann. Die machen wir indem wir &lt;a href="http://localhost:8099/ImageService/GetImages" rel="nofollow"&gt;http://localhost:8099/ImageService/GetImages&lt;/a&gt; in den&lt;br /&gt;
                Browser eingeben. Wir eine Fehlermeldung, die besagt dass die Methode nicht ausgeführt&lt;br /&gt;
                werden kann.
            &lt;/p&gt;
&lt;p&gt;
                Ist ja eigentlich logisch, denn unsere momentane Service Methode erwartet einen&lt;br /&gt;
                Parameter der über Web „GET“ übermittelt wird. Dies wurde noch nicht implementiert.
            &lt;/p&gt;
&lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
                Ist das Attribut im Interface angegeben können wir zum Beispiel mit dem Auftruf&lt;br /&gt;
                &lt;a href="http://localhost:8099/ImageService/GetAllImages?path=Test" rel="nofollow"&gt;http://localhost:8099/ImageService/GetAllImages?path=Test&lt;/a&gt; einen Methodenaufruf machen&lt;br /&gt;
                und erhalten das folgende Beispiel Resultat.&lt;/p&gt;
&lt;p&gt;            &lt;a href="http://schaedlerdaniel.files.wordpress.com/2012/01/resultatnachwebget.jpg"&gt;&lt;br /&gt;
                &lt;img src="http://schaedlerdaniel.files.wordpress.com/2012/01/resultatnachwebget.jpg?w=595" alt="" title="ResultatNachWebGET"   class="aligncenter size-full wp-image-571" /&gt;&lt;/a&gt;
        &lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Anpassen der WCF Methode GetImages&lt;/h3&gt;
&lt;p&gt;Nun wollen wir doch, dass der Service über einen AJAX Aufruf per JQuery angesprochen werden kann. Hierzu gehen wir wie folgt vor. Da die Service-Methode noch nicht so tut wie wir das gerne wollen, dekorieren wir die Methode im Interface mit dem Attribute WebGet. Das Interface sieht nun wie folgt aus:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
[ServiceContract]
public Interface IImageService{
[OperationContract]
[WebGet]
public List&amp;lt;string&amp;gt; GetImages(string path);
}
&lt;/pre&gt;
&lt;p&gt;Die Implementierungsklasse sieht dann so aus:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
public class ImageService : IImageService{
public List&amp;lt;string&amp;gt; GetImages(string path){
List&amp;lt;string&amp;gt; result = new List&amp;lt;string&amp;gt;(){ &amp;quot;Hello WCF&amp;quot;};
return result;
}
}
&lt;/pre&gt;
&lt;/p&gt;
&lt;h3&gt;Clientseitige Implementierung&lt;/h3&gt;
&lt;p&gt;Nun kommen wir auf die Clientseite. Wir fügen, falls es nicht schon getan wurde, ein Default.aspx WebForms zur Solution hinzu.&lt;/p&gt;
&lt;p&gt;
Hierzu erstellen wir uns unter dem Verzeichnis (Scripts) ein Unterverzeichnis mit dem Namen „Custom“ und fügen uns dort eine ImageService.js Datei hinzu, die folgenden Inhalt aufweist. (Vergessen Sie nicht die JQuery Scriptreferenz im Header der Default.aspx hinzuzufügen).
&lt;/p&gt;
&lt;p&gt;Unser erstelltes Clientscript sieht dann so aus:&lt;/p&gt;
&lt;pre class="brush: jscript; title: ; notranslate"&gt;
$(document).ready(function () {
    var imagesUri = &amp;quot;http://localhost:7777/Images/&amp;quot;;

    jQuery.support.cors = true;

    $.ajax({

        type: &amp;quot;GET&amp;quot;,
        url: &amp;quot;http://localhost:8099/ImageService/GetImages?path=&amp;quot; + imagesUri,
        dataType: &amp;quot;text&amp;quot;,
        contentType: &amp;quot;application/text; charset=utf-8&amp;quot;,
        success: function (message) {
            //$('#Result').append(message);
            var xmlDocument = jQuery.parseXML(message);
            var images = xmlDocument.getElementsByTagName(&amp;quot;string&amp;quot;);

            for (var index = 0; index &amp;lt;= images.length - 1; index++) {

                $('#Result').append(&amp;quot;&amp;lt;img src=\'&amp;quot; + images[index].textContent + &amp;quot;\' /&amp;gt;&amp;quot;);

            }
        },
        error: function (message) {

        }
    });

});
&lt;/pre&gt;
&lt;p&gt;
Die Default.aspx braucht dann nur noch eine Script-Referenz auf diese Datei.
&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;
    &amp;lt;title&amp;gt;Zugreifen auf WCF mittels JQuery&amp;lt;/title&amp;gt;  
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; language=&amp;quot;javascript&amp;quot; src=&amp;quot;Scripts/jquery-1.7.1.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;  
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; language=&amp;quot;javascript&amp;quot; src=&amp;quot;Scripts/Custom/ImageService.js&amp;quot; &amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Der httpQuery muss mit dem Parameter der im Inteface für die Servicedefinition festgelegt worden ist übereinstimmen. Nun ist es nicht wirklich ansprechend ein Hallo reinzugeben und dann als Resultat Hallo WCF, mit den geschweiften Klammern zu erhalten.&lt;/p&gt;
&lt;p&gt;
 Wichtig hierfür ist das JQuery für CrossDomain zugriff konfiguriert wird. Dies geschieht wie folgt:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: jscript; title: ; notranslate"&gt;
	jQuery.support.cors = true;
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Nun da WCF und ASP.NET nicht im gleichen Kontext beheimatet sind kann die Grundlage beider genommen werden. Beide bauen auf System.Web.Hosting auf. Folgenes Beispiel lässt alle Bilder die vom Pfad übergeben worden sind mit dem &lt;a href="http://msdn.microsoft.com/de-de/library/system.io.directoryinfo(v=vs.100).aspx" target="_blank"&gt;DirectoryInfo&lt;/a&gt; suchen und finden.
&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
using System;
using System.Collections.Generic;
using System.IO;
using System.Web.Hosting;
using System.Linq;

namespace Sample.WebHttpImageService.Services
{
    /// &amp;lt;summary&amp;gt;
    /// Get's the images from the path given by parameter.
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&amp;quot;path&amp;quot;&amp;gt;ImagePath to look for images.&amp;lt;/param&amp;gt;
    public class ImageService : IImageService
    {
        public string[] GetImages(string path)
        {
            List&amp;lt;string&amp;gt; result = new List&amp;lt;string&amp;gt;();
            
            Uri uri = new Uri(path, UriKind.Absolute);
            
            FileInfo[] images = new DirectoryInfo(HostingEnvironment.MapPath(uri.LocalPath)).GetFiles();

            images.ToList().ForEach(image =&amp;gt;
                                        {
                                            string imageUrl = string.Format(@&amp;quot;{0}{1}&amp;quot;, path, image.Name);
                                            result.Add(imageUrl);
                                        });

            return result.ToArray();
        }   
&lt;/pre&gt;
&lt;p&gt;
Unser Image Service muss so dann nicht im ApsNetCompatibilityMode betrieben werden und wir können trotzdem auf Files auf dem WebServer zugreifen. Nähere Details können hier gefunden werden &lt;a href="http://msdn.microsoft.com/en-us/library/aa702682.aspx" target="_blank"&gt;WCF Service and ASP.NET&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Zu guter Letzt Verarbeiten wir Client-seitig das XML das wir vom Server zurück erhalten und zeigen die Bilder an.&lt;/p&gt;
&lt;p&gt;
Das Bilder anzeigen haben wir ja in die ImageService.js ausgelagert.
&lt;/p&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;
&lt;p&gt;Mit eigentlich ganz wenig Aufwand ist es möglich einen Service zur Verfügung zu stellen der von allen Interessierten konsumiert werden kann. Trickreich an den ganzen Recherchen war auf jeden Fall das Zusammenspiel zwischen ASP.NET und der WCF die ja nicht im gleichen Kontext laufen, ohne dass man das AspNetCompatibilityReruirement Attribut braucht, oder den WCF-Service im Kompatibilitätsmodus laufen lässt. Weiter werde ich versuchen in den nächsten Wochen ein wenig mehr um die Daten die ausgetauscht werden, zu beleuchten.&lt;/p&gt;
&lt;p&gt;Wenn Ihnen dieser Artikel gefallen hat, würde ich mich über einen Kick freuen und bin auch empfänglich für Rückmeldungen und Kritik.&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f01%2f31%2fwcf-service-uber-jquery-ansprechen-leicht-gemacht%2f"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f01%2f31%2fwcf-service-uber-jquery-ansprechen-leicht-gemacht%2f" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/539/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/539/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=539&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2012/01/31/wcf-service-uber-jquery-ansprechen-leicht-gemacht/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/01_wcfservicekonfigurieren.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">WCF Service konfigurieren</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/02_wcfservicekonfigurieren.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">DLL Auswählen</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/03_wcfservicekonfigurieren.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Contract Auswahl</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/04_wcfservicekonfigurieren.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Protokoll Auswahl</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/05_wcfservicekonfigurieren.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Interopabilität wählen</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/06_wcfservicekonfigurieren.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Endpunkt Konfiguration</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/07_wcfservicekonfigurieren.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Finish Wizard Dialog</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/01_enpointanpassen.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">Endpunkt anpassen</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/02_enpointanpassen.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">02_EnpointAnpassen</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2012/01/resultatnachwebget.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">ResultatNachWebGET</media:title>
      </media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2012%2f01%2f31%2fwcf-service-uber-jquery-ansprechen-leicht-gemacht%2f" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item p3:etag="W/&quot;D0YEQ38-eip7ImA9WhRUF00.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-9023796769115264470</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/PlnlRCK1hnc/vacation-books-and-screencasts.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">books</category>
      <title>Vacation Books and Screencasts</title>
      <description>I am looking forward to spend another &lt;a href="http://www.youtube.com/watch?v=4UjJVsIFYh4"&gt;vacation mostly under water&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For the travel and the time above the water I am filling my Kindle and my iPad with the following material:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="border: none; text-align: center;"&gt;&lt;a href="http://www.amazon.de/gp/product/0321712471/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=cl00-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=0321712471"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-DXT2Iun0dNo/TyMekIuZ0TI/AAAAAAAABHM/dyXVPEQyOus/s320/management%2B3.0%2Bleading%2Bagile%2Bdevelopers%2Bdeveloping%2Bagile%2Bleaders%2Bfree%2Bdownload.jpg" style="border: none;" width="150" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.de/gp/product/3593393581/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=cl00-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=3593393581"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-usvVTk8htMI/TyMesEakCDI/AAAAAAAABHY/OyzpE9xYeFA/s320/9783593393582.jpg" style="border: none;" width="150" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.de/gp/product/0596806752/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=cl00-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=0596806752"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-Tvfr4uzLBQc/TyMhIY4CZ4I/AAAAAAAABII/rfyN8weqRYw/s320/cat.gif" style="border: none;" width="150" /&gt;&lt;/a&gt;&lt;a href="http://pragprog.com/book/vspcon/programming-concurrency-on-the-jvm"&gt;&lt;img border="0" style="border: none;" height="200" src="http://2.bp.blogspot.com/-YFagGj7ssqk/TyMmmtZ-nsI/AAAAAAAABIg/wZdsDJ_sc70/s320/vspcon_xlargecover.jpg" width="150" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://tekpub.com/productions/js_uptospeed"&gt;&lt;img border="0" height="100" src="http://4.bp.blogspot.com/-sXNm-bniUd8/TyMg45rz8FI/AAAAAAAABHk/pxWxXkg9kvA/s320/js_uptospeed_slide.png" style="border: none;" width="170" /&gt;&lt;/a&gt;&lt;a href="http://tekpub.com/hanselman"&gt;&lt;img border="0" height="100" src="http://4.bp.blogspot.com/-WlzBMTEmWTw/TyMg8tA4zMI/AAAAAAAABHw/E3ERWvHLfSk/s320/ft_speaker_slide.png" style="border: none;" width="170" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://peepcode.com/products/advanced-git"&gt;&lt;img border="0" height="100" src="http://2.bp.blogspot.com/-W_o3u27mf2Y/TyMhCzxFTAI/AAAAAAAABH8/frARvIaSl2M/s320/peepcode-advanced-git-cover.png" style="border: none;" width="170" /&gt;&lt;/a&gt;&lt;a href="https://peepcode.com/products/backbone-iii"&gt;&lt;img border="0" height="100" src="http://4.bp.blogspot.com/-PHoDBFzSUrY/TyMjaEmysMI/AAAAAAAABIU/_9bkFYe_aLk/s320/peepcode-backbone-iii-cover.png" style="border: none;" width="170" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;Thanks to &lt;a href="https://twitter.com/#%21/bertolami"&gt;bertolami&lt;/a&gt;, &lt;a href="https://twitter.com/#%21/mbaumeler"&gt;mbaumeler&lt;/a&gt; and &lt;a href="https://twitter.com/#%21/@j_graber/"&gt;j_graber&lt;/a&gt; for the recommendations.&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/PlnlRCK1hnc" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 27 Jan 2012 23:52:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/9023796769115264470/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=9023796769115264470" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/9023796769115264470?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/9023796769115264470?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-01-27T23:58:22+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">I am looking forward to spend another &lt;a href="http://www.youtube.com/watch?v=4UjJVsIFYh4"&gt;
vacation mostly under water&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
For the travel and the time above the water I am filling my Kindle and my iPad with the following material:&lt;br&gt;
&lt;br&gt;
&lt;div style="border:none; text-align:center"&gt;&lt;a href="http://www.amazon.de/gp/product/0321712471/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=cl00-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=0321712471"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-DXT2Iun0dNo/TyMekIuZ0TI/AAAAAAAABHM/dyXVPEQyOus/s320/management%2B3.0%2Bleading%2Bagile%2Bdevelopers%2Bdeveloping%2Bagile%2Bleaders%2Bfree%2Bdownload.jpg" width="150" style="border:none"&gt;&lt;/a&gt;&lt;a href="http://www.amazon.de/gp/product/3593393581/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=cl00-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=3593393581"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-usvVTk8htMI/TyMesEakCDI/AAAAAAAABHY/OyzpE9xYeFA/s320/9783593393582.jpg" width="150" style="border:none"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.amazon.de/gp/product/0596806752/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=cl00-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=0596806752"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-Tvfr4uzLBQc/TyMhIY4CZ4I/AAAAAAAABII/rfyN8weqRYw/s320/cat.gif" width="150" style="border:none"&gt;&lt;/a&gt;&lt;a href="http://pragprog.com/book/vspcon/programming-concurrency-on-the-jvm"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-YFagGj7ssqk/TyMmmtZ-nsI/AAAAAAAABIg/wZdsDJ_sc70/s320/vspcon_xlargecover.jpg" width="150" style="border:none"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;a href="http://tekpub.com/productions/js_uptospeed"&gt;&lt;img border="0" height="100" src="http://4.bp.blogspot.com/-sXNm-bniUd8/TyMg45rz8FI/AAAAAAAABHk/pxWxXkg9kvA/s320/js_uptospeed_slide.png" width="170" style="border:none"&gt;&lt;/a&gt;&lt;a href="http://tekpub.com/hanselman"&gt;&lt;img border="0" height="100" src="http://4.bp.blogspot.com/-WlzBMTEmWTw/TyMg8tA4zMI/AAAAAAAABHw/E3ERWvHLfSk/s320/ft_speaker_slide.png" width="170" style="border:none"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://peepcode.com/products/advanced-git"&gt;&lt;img border="0" height="100" src="http://2.bp.blogspot.com/-W_o3u27mf2Y/TyMhCzxFTAI/AAAAAAAABH8/frARvIaSl2M/s320/peepcode-advanced-git-cover.png" width="170" style="border:none"&gt;&lt;/a&gt;&lt;a href="https://peepcode.com/products/backbone-iii"&gt;&lt;img border="0" height="100" src="http://4.bp.blogspot.com/-PHoDBFzSUrY/TyMjaEmysMI/AAAAAAAABIU/_9bkFYe_aLk/s320/peepcode-backbone-iii-cover.png" width="170" style="border:none"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;div style="text-align:left"&gt;Thanks to &lt;a href="https://twitter.com/#%21/bertolami"&gt;
bertolami&lt;/a&gt;, &lt;a href="https://twitter.com/#%21/mbaumeler"&gt;mbaumeler&lt;/a&gt; and &lt;a href="https://twitter.com/#%21/@j_graber/"&gt;
j_graber&lt;/a&gt; for the recommendations.&lt;/div&gt;
&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=PlnlRCK1hnc:8-nu5oK2NYw:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=PlnlRCK1hnc:8-nu5oK2NYw:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/PlnlRCK1hnc" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T23:58:22.152+01:00</app:edited>
      <media:thumbnail url="http://3.bp.blogspot.com/-DXT2Iun0dNo/TyMekIuZ0TI/AAAAAAAABHM/dyXVPEQyOus/s72-c/management%2B3.0%2Bleading%2Bagile%2Bdevelopers%2Bdeveloping%2Bagile%2Bleaders%2Bfree%2Bdownload.jpg" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/01/vacation-books-and-screencasts.html</feedburner:origLink>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634626792000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634626792000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634626792000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Themenwahl Git oder MSpec mit Alexander Groß</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2&gt;Freitag, 20. Januar 2012 (18:00 bis 22:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Themenwahl Git oder MSpec mit Alexander Groß&lt;/h3&gt;
&lt;p&gt;Im neuen Jahr werden wir uns, Dank der Zusammenarbeit mit der &lt;a href="http://www.dotnet-zentral.ch/" target="_blank"&gt;
.NET User Group Zentralschweiz&lt;/a&gt;, spontan etwas früher treffen können. Du hast die Möglichkeit mitzuentscheiden welches Thema Du gerne hören möchtest. Git, MSpec oder sogar beides? Zur Person benötigen wir wohl keine weiteren Erläuterungen. ;-)
&lt;/p&gt;
&lt;strong&gt;Abstract Git:&lt;/strong&gt;
&lt;p&gt;Git ist ein fortschrittliches und äusserst flexibles Tool zur Verwaltung von Quellcode. Alexander zeigt alles was Du für den Einstieg benötigst: Beginnend beim grundlegenden Einsatz von Git-Befehlen, über die Arbeit mit Entwicklungszweigen (Branches) bis
 hin zu Tools für die Kommandozeile, für Visual Studio und zum Lösen von Merge-Konflikten.
&lt;/p&gt;
&lt;strong&gt;Abstract MSPec&lt;/strong&gt;
&lt;p&gt;Machine.Specifications (MSpec) ist ein Context/Specification-Framework für den Einsatz bei TDD und BDD das sich durch eine einfache API und Prägnanz bei der Benamung von Spezifikationen auszeichnet. Alexander zeigt in seinem Vortrag Einsatzmöglichkeiten
 von MSpec und spricht über die Vorteile die man aus der Verwendung von MSpec ziehen kann.
&lt;/p&gt;
&lt;strong&gt;Über Alexander Groß&lt;/strong&gt;
&lt;p&gt;&lt;a href="http://therightstuff.de/" target="_blank"&gt;Alexander Groß&lt;/a&gt; ist freiberuflicher Softwareentwickler und Berater. Seine Spezialgebiete sind Backend-Systeme und Tools zur Verbesserung des Entwicklungsprozesses. Seit 2006 leitet er gemeinsam mit Torsten
 Weber die .NET User Group Leipzig und organisiert den jährlich stattfindenden .NET Open Space in seiner Heimatstadt. In seiner Freizeit schärft er gern seine Kochmessersammlung und trägt die eine oder andere Zeile Code zu Open Source-Projekten bei.
&lt;/p&gt;
&lt;strong&gt;Anmeldung&lt;/strong&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/themenwahl-git-mspec-alexander-848785?sc_o=as_e" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. Ohne Xing-Konto kannst Du auch unser Kontaktformular nutzen.
&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbetw&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Die Aktivitäten können während der Veranstaltung &lt;a href="http://dnug-bern.ch/TwitterWall.aspx" target="_blank"&gt;
hier&lt;/a&gt;&amp;nbsp;betrachtet werden. &lt;/p&gt;
&lt;p&gt;Wir freuen uns auf Deine Teilnahme! &lt;/p&gt;
&lt;p&gt;Martin Affolter, Kay Herzam und René Leupold &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Fri, 20 Jan 2012 18:00:00 +0100</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2012/01/15/entity-framework-43-schema-migrations-fuer-code-first-dbcontext.html</guid>
      <link>http://www.databinding.net/blog/post/2012/01/15/entity-framework-43-schema-migrations-fuer-code-first-dbcontext.html</link>
      <author> (René)</author>
      <title>Entity Framework 4.3 - Schema Migrations für Code First (DbContext)</title>
      <description>Eine Anwendung lebt bekanntlich von Änderungen. Nicht selten haben diese Änderungen auch Auswirkungen auf das Datenbankmodell. Das Entity Framework unterstützt mittlerweile DB First, Model First und ...</description>
      <pubDate>Sun, 15 Jan 2012 22:47:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Eine Anwendung lebt bekanntlich von Änderungen. Nicht selten haben diese Änderungen auch Auswirkungen auf das Datenbankmodell. Das Entity Framework unterstützt mittlerweile DB First, Model First und Code First. Für DB First und Model First ist es kein grösseres Problem Änderungen auf der Datenbank nachzuführen, mit ein paar Tricks und Tools sind sogar Roundtrips zwischen Datenbank und Modell möglich. &lt;/p&gt; &lt;p&gt;Die möglichen Vorgehensweisen sind in der &lt;a href="http://www.databinding.net/blog/post/2011/09/07/entity-framework-praesentationen.html" title="Zum Beitrag der Präsentationen der TechDays 2011"&gt;Präsentation Tipps und Tricks &lt;/a&gt; Entity Framework ersichtlich. &lt;/p&gt; &lt;p&gt;Bei Code First war dieser Ansatz bisher ein Ding der Unmöglichkeit. Lediglich mit Zusatztools wie SQL Delta und einer ITIL-konformen Umgebung konnten die Änderungen vorgenommen werden, ohne dass die produktiven Daten negativ beeinflusst wurden. Der Störfaktor war jedoch immer der Modelhash in der Tabelle EdmMetadata. Entweder hat man diesen Eintrag mit aktualisiert oder aber die Konvention entfernt. &lt;/p&gt; &lt;p&gt;Seit ein paar Tagen ist nun die Beta 1 vom Entity Framework 4.3 draussen und ich wollte natürlich auch gleich die Anpassungen ausprobieren. Die Pakete gibt es über NuGet und die Unterstützung für die Installation von Vorabversionen benötigt im minium die Version 1.6. Ich musste zuvor auf diese Version aktualisieren. Die ältere Version Entity Framework.Migrations muss noch vom System entfernt werden (erfordert einen Neustart von Visual Studio). &lt;/p&gt; &lt;p&gt;Nach diesem Update besteht die Möglichkeit die Vorabversion mit dem Befehl: &lt;/p&gt; Abbildung 1 Install-Package Entity Framework -IncludePreRelease &lt;a href="http://www.databinding.net/uploads/pics/01_InstallPackage.PNG" title="Abbildung 1 Install-Package Entity Framework -IncludePreRelease" rel="lightbox[lb734]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/2e6b7e858c.png" width="500" height="158" border="0" alt="Abbildung 1" /&gt; &lt;/a&gt; &lt;p&gt;auf dem System zu installieren. &lt;/p&gt; &lt;p&gt;Also beginne ich mit einem kleinen Beispiel: &lt;/p&gt; public abstract class Product { public int Id { get; set; } [StringLength(50)] [Required] public string Name { get; set; } [StringLength(400)] public string Description { get; set; } } public class Book : Product { [StringLength(10)] [Required] public string ISBN10 { get; set; } [StringLength(13)] [Required] public string ISBN13 { get; set; } public int LanguageCD { get; set; } [Required] public int Pages { get; set; } } public class EBook : Book { [Required] public string Filename { get; set; } } public class Hardcover : Book { [StringLength(20)] [Required] public string Size { get; set; } [Required] public double Weight { get; set; } } public class BookInheritanceContext : DbContext { public BookInheritanceContext() : base(&amp;quot;EfCodeFirstMigrations&amp;quot;) { } public IDbSet&amp;lt;Product&amp;gt; Products { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // TPH ist Standardkonvention, da beste Performance. // Für Individual-Lösungen macht das auch durchaus Sinn , wenn // jedoch die Release-Tauglichkeit gewährleistet werden muss // ist TPT die bessere Wahl. // Mapping für benutzerdefinierten Diskriminator // // const string discriminator = &amp;quot;ProductTypeNbr &amp;quot;; // // modelBuilder . Entity &amp;lt;Product &amp;gt;( ) //// .Map&amp;lt;Book&amp;gt;(m =&amp;gt; m.Requires(discriminator).HasValue(2)) //// .Map&amp;lt;EBook&amp;gt;(m =&amp;gt; m.Requires(discriminator).HasValue(3)) //// .Map&amp;lt;Hardcover&amp;gt;(m =&amp;gt; m.Requires(discriminator).HasValue(4)) //// .ToTable(&amp;quot;Product&amp;quot;); base.OnModelCreating(modelBuilder); } } &lt;p&gt;Nun beginnt die Phase der Erweiterung. In diesem Zusammenhang ist es wichtig zu akzeptieren, dass die Arbeit mit NuGet ein wenig intensiver wird. Im neuen Release sollen nun ein paar Erweiterungen vorgenommen werden, die Auswirkungen auf das Datenmodell haben werden. &lt;/p&gt; &lt;p&gt;Der erste Schritt ist nun das öffnen der NuGet-Konsole und die Eingabe von: &lt;/p&gt; Abbildung 2 Enable-Migrations &lt;a href="http://www.databinding.net/uploads/pics/02_EnableMigrations.PNG" title="Abbildung 2 Enable-Migrations" rel="lightbox[lb737]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/447377717f.png" width="500" height="174" border="0" alt="Abbildung 2" /&gt; &lt;/a&gt; &lt;p&gt;auszuführen. Nach dieser Aktion befindet sich ein neuer Ordner Migrations im Projekt. &lt;/p&gt; Abbildung 3 Neuer Ordner Migrations &lt;a href="http://www.databinding.net/uploads/pics/03_Migrations.PNG" title="Abbildung 3 Neuer Ordner Migrations" rel="lightbox[lb738]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/76a68c27ac.png" width="200" height="44" border="0" alt="Abbildung 3" /&gt; &lt;/a&gt; &lt;p&gt;Ich beginne nun mit meinen Anpassungen an der Klasse EBook. In der neuen Version soll die Möglichkeit bestehen, dass pro Buch mehrere Dateien für alternative Dateiformate (mobi, epub, pdf usw.) hinterlegt werden können. &lt;/p&gt; public class EBook : Book { [Required] public string Filename { get; set; } [Required] public ICollection&amp;lt;BookFile&amp;gt; AlternativeFiles { get; internal set; } } public class BookFile { public int Id { get; set; } public int Type { get; set; } public int Filename { get; set; } } &lt;p&gt;Nach der Fertigstellung geht es nun darum das Update der Datenbank vorzunehmen. Auch hier ist die primäre Schaltzentrale die NuGet-Konsole. Zuerst muss jedoch eine kleine Anpassung in der Configuration-Klasse vorgenommen werden. Im Konstruktur muss der Wert von AutomaticMigrationsEnabled auf true gesetzt werden. &lt;/p&gt; &lt;p&gt;Kommen wir zurück auf die NuGet-Konsole, mit dem Befehl: &lt;/p&gt; Abbildung 4 Update-Database -Script &lt;a href="http://www.databinding.net/uploads/pics/04_updatescript.PNG" title="Abbildung 4 Update-Database -Script" rel="lightbox[lb740]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/bb0709b707.png" width="500" height="177" border="0" alt="Abbildung 4" /&gt; &lt;/a&gt; &lt;p&gt;wird ein SQL-Skript mit den notwendigen Änderungen auf der Datenbank erstellt. &lt;/p&gt; &lt;p&gt;Der Output für dieses Beispiel: &lt;/p&gt; CREATE TABLE [BookFiles] ( [Id] [int] NOT NULL IDENTITY, [Type] [int] NOT NULL, [Filename] [int] NOT NULL, [EBook_Id] [int], CONSTRAINT [PK_BookFiles] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_EBook_Id] ON [BookFiles]([EBook_Id])
ALTER TABLE [BookFiles] ADD CONSTRAINT [FK_BookFiles_Products_EBook_Id] FOREIGN KEY ([EBook_Id]) REFERENCES [Products] ([Id])
CREATE TABLE [__MigrationHistory] ( [MigrationId] [nvarchar](255) NOT NULL, [CreatedOn] [datetime] NOT NULL, [Model] [varbinary](max) NOT NULL, [ProductVersion] [nvarchar](32) NOT NULL, CONSTRAINT [PK___MigrationHistory] PRIMARY KEY ([MigrationId])
)
BEGIN TRY EXEC sp_MS_marksystemobject '__MigrationHistory'
END TRY
BEGIN CATCH
END CATCH
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion]) VALUES ('201201151955537_AutomaticMigration', '2012-01-15T19:55:54.189Z', 0x1F8B...EDMX-Modell...0, '4.3.0-beta1') &lt;p&gt;Neben den Tabellen wird neu auch für die Fremdschlüssel-Spalten ein Fremdschlüsselindex erstellt. Bisher war das ein &lt;a href="http://www.databinding.net/blog/post/2011/07/28/entity-framework-41-code-model-first-und-die-unterschiede-einer-gemeinsamkeit.html" title="Der Unterschied einer Gemeinsamkeit"&gt;negativer Unterschied &lt;/a&gt; zum Model First - Ansatz, der mit der Version EF 4.3 der Vergangenheit angehören wird. &lt;/p&gt; &lt;p&gt;Was auch auffällt ist die Systemtabelle __MigrationHistory, in der das aktuelle Abbild des Modells gespeichert wird. Die Tabelle EdmMetadata existiert nicht mehr. Mit EF 4.3 gehört diese ebenfalls der Vergangenheit an. Bei bestehenden Modellen wird diese jedoch erst entfernt, wenn die Datenbank neu erstellt wird. Ein Detail, welches sich daraus ergibt: Migrations funktionieren nur mit dem SQL-Server!!!! &lt;/p&gt; &lt;p&gt;Ohne den Swich &amp;quot;-Script&amp;quot; lassen sich die Änderungen direkt an die Datenbank übertragen. Bei dem automatischen Ansatz würde ich persönlich darauf verzichten, da es keine Möglichkeit der Versionierung gibt. Dieser Teil lässt sich mit dem Speichern der SQL-Skripts jedoch organisatorisch in den Griff bekommen. Beim codebasierten Ansatz ist es ein wenig eleganter gelöst, jedoch sind die Möglichkeiten auch hier begrenzt. &lt;/p&gt; &lt;p&gt;Bei dieser Beta soll es sich um die Letzte handeln, sodass im Laufe des ersten Quartals die finale Version Entity Framework 4.3 zur Verfügung stehen wird. &lt;/p&gt; &lt;p&gt;Ich finde diesen Ansatz sehr interessant, da nun auch beim codezentrierten Ansatz mit dem Entity Framework Schema-Migrations möglich werden. Als Entwickler muss man jedoch berücksichtigen, dass diese nur mit dem SQL-Server funktionieren. Zudem ist ein Round-Trip nicht, bzw. nur mit einem nicht im Verhältnis stehenden Aufwand möglich. (Stichwort: Meet in the Middle). Hier beginnt das Problem aber häufig&amp;nbsp;mit der Planung. &lt;/p&gt; &lt;p&gt;Weitere nützliche Informationen befinden sich in den Blogs vom ADO.NET&amp;nbsp;- Team unter: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx" class="external-link-new-window"&gt;Neue Konfigurationsmöglichkeiten &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-beta-1-automatic-migrations-walkthrough.aspx" class="external-link-new-window"&gt;Automatische Schema Migrationen &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-beta-1-code-based-migrations-walkthrough.aspx" class="external-link-new-window"&gt;Codebasierte Schema Migrationen &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://blog.oneunicorn.com/2012/01/13/ef-4-3-beta-1-what-happened-to-that-edmmetadata-table/" class="external-link-new-window"&gt;Wo ist die Tabelle EdmMetadata &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; </content:encoded>
    </item>
    <item p3:etag="W/&quot;C0AAQXY5eyp7ImA9WhRWFU8.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-6531045585136271854</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/qHempns4LC0/presentation-can-javascript-be-elegant.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">javascript</category>
      <category domain="http://www.blogger.com/atom/ns#">presentation</category>
      <title>Presentation: Can JavaScript be elegant?</title>
      <description>&lt;div style="width: 70%; float: left;"&gt;Last month I was invited &lt;a href="http://blog.jonasbandi.net/2010/12/sbb-developer-days-2010.html"&gt;again&lt;/a&gt; to speak at the &lt;a href="http://www.sbb.ch/sbb-konzern.html"&gt;SBB&lt;/a&gt; Developer Day 2011. Here is the presentation I held about JavaScript:&lt;/div&gt;
&lt;img style="padding-left: 10px; border: none; float: right" src="https://lh5.googleusercontent.com/-tNSDsPu2omw/SHugkpqvAUI/AAAAAAAAARI/vHucMXDAvvs/s144/image_thumb.png" alt="" height="50px" /&gt;
&lt;p style="clear: both;"&gt; &lt;/p&gt;
&lt;div id="__ss_10763521" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a title="Kann JavaScript elegant sein?" href="http://www.slideshare.net/jbandi/kann-javascript-elegant-sein" target="_blank"&gt;Kann JavaScript elegant sein?&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10763521" width="410" height="330" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;
&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/jbandi" target="_blank"&gt;jbandi&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I enjoyed the event very much, and I hope to be invited again next time.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/qHempns4LC0" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 02 Jan 2012 16:50:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/6531045585136271854/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="2 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=6531045585136271854" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/6531045585136271854?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/6531045585136271854?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2012-01-02T17:29:00+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;div style="width:70%; float:left"&gt;Last month I was invited &lt;a href="http://blog.jonasbandi.net/2010/12/sbb-developer-days-2010.html"&gt;
again&lt;/a&gt; to speak at the &lt;a href="http://www.sbb.ch/sbb-konzern.html"&gt;SBB&lt;/a&gt; Developer Day 2011. Here is the presentation I held about JavaScript:&lt;/div&gt;
&lt;img src="https://lh5.googleusercontent.com/-tNSDsPu2omw/SHugkpqvAUI/AAAAAAAAARI/vHucMXDAvvs/s144/image_thumb.png" alt="" height="50px" style="padding-left:10px; border:none; float:right"&gt;
&lt;p style="clear:both"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="x___ss_10763521" style="width:425px"&gt;&lt;strong style="display:block; margin:12px 0 4px"&gt;&lt;a title="Kann JavaScript elegant sein?" href="http://www.slideshare.net/jbandi/kann-javascript-elegant-sein" target="_blank"&gt;Kann JavaScript elegant sein?&lt;/a&gt;&lt;/strong&gt;
&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;
presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/jbandi" target="_blank"&gt;
jbandi&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I enjoyed the event very much, and I hope to be invited again next time.&lt;/p&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=qHempns4LC0:hB2rN9sGKHI:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=qHempns4LC0:hB2rN9sGKHI:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/qHempns4LC0" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T17:29:00.823+01:00</app:edited>
      <media:thumbnail url="https://lh5.googleusercontent.com/-tNSDsPu2omw/SHugkpqvAUI/AAAAAAAAARI/vHucMXDAvvs/s72-c/image_thumb.png" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2012/01/presentation-can-javascript-be-elegant.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/12/23/sharepoint-2010-business-prozesse-mit-workflows.html</guid>
      <link>http://www.databinding.net/blog/post/2011/12/23/sharepoint-2010-business-prozesse-mit-workflows.html</link>
      <author> (René)</author>
      <title>Sharepoint 2010 - Business Prozesse mit Workflows</title>
      <description>In meinen ersten Beitrag habe ich ja schon über die interessanten Nebeneffekte von Sharepoint berichtet. Auch diese Woche hatte ich wieder Nebeneffekte, die schon arg Grenzwertig waren. Eine Technolg...</description>
      <pubDate>Fri, 23 Dec 2011 21:14:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;In meinen ersten Beitrag habe ich ja schon über die interessanten Nebeneffekte von Sharepoint berichtet. Auch diese Woche hatte ich wieder Nebeneffekte, die schon arg Grenzwertig waren.&amp;nbsp;Eine Technolgie, die sich&amp;nbsp;als Zeitfresser entpuppte&amp;nbsp;war Linq to Sharepoint. &lt;/p&gt; &lt;p&gt;Meine &lt;b&gt;Best Practice - Empfehlung &lt;/b&gt;: &lt;b&gt;Nicht einsetzen &lt;/b&gt; für Business-Anwendungen, die ihren Namen gerecht werden wollen und auch einiges an Daten zu verwalten haben. &lt;/p&gt; &lt;p&gt;Details und Workaround-Frickelein werden folgen. &lt;/p&gt; &lt;p&gt;Zurzeit bin ich immer noch in der dritten Phase und ich glaube, dass es nach dieser Phase&amp;nbsp;drei mögliche Wege gibt, die von Entwicklern eingeschlagen werden. Aktuell&amp;nbsp;gehe ich tiefer in die Materie&amp;nbsp;zu Workflows ein. Seit der PDC 2008 habe ich mich dazu entschieden, Microsoft-Technologien nur noch systematisch anzugehen, da der pragmatische Weg in meinen Augen unkontrollierbar&amp;nbsp;geworden ist. Linq to Sharepoint hat mich zusätzlich darin bestärkt, hier habe ich zu sehr auf die Aussagen von Sharepoint MVP´s vertraut. Kommt nicht wieder vor. &lt;/p&gt; &lt;p&gt;Im Bereich der Workflows habe ich die möglichen Ansetze und Varianten im&amp;nbsp;nachfolgenden Mind Map festgehalten. Hier muss ich zugeben, dass mich dieser Bereich von Sharepoint sehr&amp;nbsp;interessiert.&amp;nbsp;&amp;nbsp; &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=494</guid>
      <link>http://schaedlerdaniel.wordpress.com/2011/12/23/entity-framework-ein-pragmatischer-ansatz/</link>
      <category>Entity Framework</category>
      <category>Creating query depending on properties in search object Entity Framework</category>
      <category>Custom Query</category>
      <category>Entity Framework one Method to get all object types</category>
      <category>Generic Query</category>
      <title>Entity Framework ein pragmatischer Ansatz</title>
      <description>Was meine ich damit? Ganze einfach, da ich recht pragmatisch bin und nicht gerne all zu viel schreibe, dachte ich mir es muss doch eine Möglichkeit geben, dass ich genau eine Methode habe, die mir aufgrund eines übergebenen Typ’s die Resultate der Datenbank
 zurückliefert. Normalerweise hätte ich das mit einer Vererbung gelöst. 1.) Eine BaseEntität [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=494&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Fri, 23 Dec 2011 11:49:48 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2011/12/23/entity-framework-ein-pragmatischer-ansatz/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;h3&gt;Was meine ich damit?&lt;/h3&gt;
&lt;p&gt;Ganze einfach, da ich recht pragmatisch bin und nicht gerne all zu viel schreibe, dachte ich mir es muss doch eine Möglichkeit geben, dass ich genau eine Methode habe, die mir aufgrund eines übergebenen Typ&amp;#8217;s die Resultate der Datenbank zurückliefert.&lt;/p&gt;
&lt;p&gt;Normalerweise hätte ich das mit einer Vererbung gelöst.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1.) Eine BaseEntität erstellen&lt;/li&gt;
&lt;li&gt;2.) Alle anderen Entitäten erben von dieser Basis-Entität.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So ist es mir möglich mit folgendem Code die entsprechenden Tabellen anzusprechen.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
using(MyContext context = new Context())
{
      context.BaseEntity.OfType&amp;lt;Person&amp;gt;().ToList();
}
&lt;/pre&gt;
&lt;p&gt;Nun der Ansatz ist nicht schlecht, hat aber seine Tücken, nähmlich dann wenn man grosse Datenmengen verarbeiten muss, dann muss er zuerst alle Daten die dem übergebenen Typ in der BaseEntität entsprechen laden und nochmals die der vererbten Entität.&lt;/p&gt;
&lt;h3&gt;Was wäre die Lösung?&lt;/h3&gt;
&lt;p&gt;Keine Vererbung. Gibt natürlich ein wenig mehr zu tun, man hat aber bei einem nicht bekannten Mengengerüst den Vorteil, dass die Datenbank schneller wachsen kann, ohne dass man ein Refactoring am Code vornehmen müsste.&lt;/p&gt;
&lt;p&gt;Das ganze einfache Model sieht man nachstehend.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2011/12/blogmodel.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2011/12/blogmodel.jpg?w=400" alt="" title="BlogModel" width="400" class="aligncenter" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Jetzt kommt aber der entscheidende Punkt, den man beim Desing der Eintitäten beachten soll. Das Entity FrameWork kann mit dem EntitySet Namen umgehen. Wenn wir den EntitSet Namen gleich wie die Entität erfassen, so kann man ohne Probleme mit&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt; myEntity.GetType().Name; &lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt; das EntitySet so angeben. Wenn man aber den generierten Namen lassen möchte, muss man bewusst sein, dass man sich dann den EntitySet-Name, bestehend aus dem Objekt-Typ Namen und einem Postfix vor einer Abfrage erstellen sollte.&lt;/p&gt;
&lt;p&gt;Ich habe den ersten Weg gewählt und mir den EntitySet Namen gleichgesetzt wie der EntityName (im Grunde weiss ich ja dass die Tabelle Person heisst, die Menge aber Personen sind).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schaedlerdaniel.files.wordpress.com/2011/12/entitydesigner.jpg"&gt;&lt;img src="http://schaedlerdaniel.files.wordpress.com/2011/12/entitydesigner.jpg?w=400" alt="" title="EntityDesigner" width="400" class="aligncenter" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;Wie sieht den nun der Ansatz aus?&lt;/h3&gt;
&lt;p&gt;Zu diesem Zweck habe ich mir einen ContextHelper erstellt. Interssant ist hier die Methode Get, die anhand eines &lt;a href="http://msdn.microsoft.com/de-de/library/bb738995.aspx" target="_blank"&gt;ObjectQuery&lt;/a&gt; die Abfrage an den Kontext sendet.&lt;/p&gt;
&lt;p&gt;Was brauchen wir dazu?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; 1.) Ein ObjectQuery mit entsprechenden &lt;a href="http://msdn.microsoft.com/de-de/library/system.data.objects.objectparameter.aspx" target="_blank"&gt;ObjectParametern&lt;/a&gt; dass sich aus dem übergebenen Objekt und dessen Eigenschaften zusammensetzt.&lt;/li&gt;
&lt;li&gt; 2.) Ein string Query, welches die die Parameter aufnimmt und anhand des übergebenen Objekts erstellt wird. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;Die Get Methode sind dann so aus:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Get method for deleting a row in the database.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;Type of object to get.&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The search object which has to retrieve all matching entires in the database.&amp;lt;/param&amp;gt;
        public static IEnumerable&amp;lt;T&amp;gt; Get&amp;lt;T&amp;gt;(T entity) where T : EntityObject
        {
            IEnumerable&amp;lt;T&amp;gt; result = null;
            using (BlogModelContainer container = new BlogModelContainer())
            {
                string queryCommand = string.Format(&amp;quot;SELECT VALUE {1} FROM {0}.{1} WHERE 1=1&amp;quot;, container.DefaultContainerName, entity.GetType().Name);

                // Creating the query, depending on how much of the properties in the given object are filled out
                // In this case only string properties will be read.
                queryCommand = CreateQueryString&amp;lt;T&amp;gt;(entity, queryCommand);

                ObjectQuery&amp;lt;T&amp;gt; entityQuery = new ObjectQuery&amp;lt;T&amp;gt;(queryCommand, container);
                CreateParameters&amp;lt;T&amp;gt;(entity).ForEach(entityQuery.Parameters.Add);

                result = entityQuery.ToList();
            }

            return result;
        }
&lt;/pre&gt;
&lt;p&gt;Damit diese Methode bedient werden kann sind drei weitere notwendig.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1.) Eine die nur &lt;a href="http://msdn.microsoft.com/de-de/library/system.reflection.propertyinfo(v=VS.100).aspx" target="_blank"&gt;PropertyInfo&amp;#8217;s&lt;/a&gt; zurückgibt welche auch einen Wert haben.&lt;/li&gt;
&lt;li&gt;2.) Eine die den QueryString anhand der PropertyInfo&amp;#8217;s abfüllt.&lt;/p&gt;
&lt;li&gt;3.) Last but not least eine Methode die anhand der PropertyInfo&amp;#8217;s die ObjectParameter erstellt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Die PropertyInfo Methode sieht wie folgt aus:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Get's all properties from an object that where
        /// filled, or they have a value and returns it.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity to look for the properties.&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;List of propertyInfos (each propertyInfo has a value)&amp;lt;/returns&amp;gt;
        private static List&amp;lt;PropertyInfo&amp;gt; GetProperty&amp;lt;T&amp;gt;(T entity) where T : EntityObject
        {
            List&amp;lt;PropertyInfo&amp;gt; result = new List&amp;lt;PropertyInfo&amp;gt;();

            entity.GetType().GetProperties().ToList().ForEach(property =&amp;gt;
            {
                if (property.PropertyType.Equals(typeof(string)))
                {
                    string propertyValue = property.GetValue(entity, new object[] { }) as string;

                    // Determining if the the property value of type string is filled out.
                    if (!string.IsNullOrWhiteSpace(propertyValue))
                    {
                        result.Add(property);
                    }
                }
            });

            return result;
        }
&lt;/pre&gt;
&lt;p&gt;Da nur PropertyInfo&amp;#8217;s zurückkommen die auch einen Wert aufweisen (momentan nur einen string-Typen, werde auch keine leeren Properties zurückgegeben.&lt;/p&gt;
&lt;p&gt;Die Methode für den QueryString sieht dann so aus: &lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Creates the appropriate querystring depending
        /// on the object that was passed.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;The specific objectType&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity to query against&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&amp;quot;queryString&amp;quot;&amp;gt;The&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        private static string CreateQueryString&amp;lt;T&amp;gt;(T entity, string queryString) where T : EntityObject
        {
            List&amp;lt;ObjectParameter&amp;gt; parameters = new List&amp;lt;ObjectParameter&amp;gt;();
            GetProperty&amp;lt;T&amp;gt;(entity).ForEach(p =&amp;gt;
            {
                string propertyValue = p.GetValue(entity, new object[] { }) as string;
                queryString += string.Format(&amp;quot; AND {0}.{1} = @{1}&amp;quot;, entity.GetType().Name, p.Name);
            });

            return queryString;
        }
&lt;/pre&gt;
&lt;p&gt;Für die ObjectParameter Erstellung wird eine ähnliche Methode verwendet:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        /// &amp;lt;summary&amp;gt;
        /// Creates the queryparameters to pass to the objectquery
        /// depending on the filled out properties in the parameter
        /// object.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;Specific objectType which must be at least of type EntityObject&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;The entity with the filled properties for use in the query.&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;The ObjectParameters Array to add it to the ObjectQuery.&amp;lt;/returns&amp;gt;
        private static List&amp;lt;ObjectParameter&amp;gt; CreateParameters&amp;lt;T&amp;gt;(T entity) where T : EntityObject
        {
            List&amp;lt;ObjectParameter&amp;gt; parameters = new List&amp;lt;ObjectParameter&amp;gt;();
            GetProperty&amp;lt;T&amp;gt;(entity).ForEach(p =&amp;gt;
            {
                string propertyValue = p.GetValue(entity, new object[] { }) as string;
                ObjectParameter parameter = new ObjectParameter(p.Name, propertyValue);
                parameters.Add(parameter);
            });

            return parameters;
        }
&lt;/pre&gt;
&lt;p&gt;Somit werden die QueryParameter und der Query generisch anhand des &amp;#8220;Suchobjektes&amp;#8221;, das an die Get-Methode übergeben wird zusammengestellt.&lt;/p&gt;
&lt;p&gt;Für Fragen, Kritik und Anregungen freue ich mich über einen Kommentar.&lt;/p&gt;
&lt;p&gt;Ich wünsche allen frohe Festtage und einen guten Rutsch ins 2012, auf dass weider viele neue Sachen im .NET 4.5 endeckt werden können.&lt;/p&gt;
&lt;p&gt;Das Beispielprojekt kann &lt;a href="http://dl.dropbox.com/u/49243648/Sample.GenericEntity.zip" target="_blank"&gt;hier&lt;/a&gt; heruntergeladen werden.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fbit.ly%2fsR6seW"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fbit.ly%2fsR6seW" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/494/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/494/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=494&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2011/12/23/entity-framework-ein-pragmatischer-ansatz/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2011/12/blogmodel.jpg?w=300" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">BlogModel</media:title>
      </media:content>
      <media:content url="http://schaedlerdaniel.files.wordpress.com/2011/12/entitydesigner.jpg" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">EntityDesigner</media:title>
      </media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fbit.ly%2fsR6seW" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/12/17/sharepoint-2010-mein-einstieg.html</guid>
      <link>http://www.databinding.net/blog/post/2011/12/17/sharepoint-2010-mein-einstieg.html</link>
      <author> (René)</author>
      <title>Sharepoint 2010 - Mein Einstieg</title>
      <description>Sharepoint gehört nun seit 2 Monaten zu einem meiner Aufgabenfelder und ich muss sagen, die Lernkurve ist aus meiner Sicht nicht zu unterschätzen. Der Hauptgrund dafür: Es kann viel, aber einiges dav...</description>
      <pubDate>Sat, 17 Dec 2011 14:07:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Sharepoint gehört nun seit 2 Monaten zu einem meiner Aufgabenfelder und ich muss sagen, die Lernkurve ist aus meiner Sicht nicht zu unterschätzen. Der Hauptgrund dafür: Es kann viel, aber einiges davon doch noch nicht so richtig oder mit interessanten Nebeneffekten. &lt;/p&gt; &lt;p&gt;Wie bereits erwähnt die Lernkurve wird dadurch unglaublich steil, wohl deshalb hat Sharepoint unter Entwicklern nicht den besten Ruf. Wenn ich in meinem Bekanntenkreis herumfrage, dann sind die Endbenutzer überwiegend zufrieden bis begeistert von Sharepoint, Entwickler dagegen nicht. Es gibt Ausnahmen, diese tragen in der Regel den Zusatz MVP oder wollen es werden. MVP bedeutet in diesem Zusammenhang &lt;b&gt;M &lt;/b&gt;arketing &lt;b&gt;V &lt;/b&gt;oll &lt;b&gt;P &lt;/b&gt;rofi. &lt;/p&gt; &lt;p&gt;Gestern habe ich mich mit einem langjährigen Sharepoint-Entwickler unterhalten und dabei auch meinen Frust abgelassen. Die Antwort darauf war: &amp;quot;Das ging mir auch so.&amp;quot; Also gehe ich davon aus, dass man als Entwickler für Sharepoint mehrere Phasen durchläuft, bis man die Macken dieser Plattform kennt und somit die Lernkurve überwunden hat. &lt;/p&gt; &lt;p&gt;Grundsätzlich gehe ich immer ohne Vorurteile eine neue Technologie an, ich wurde aber von mehreren Entwicklern vorgewarnt. Mit diesem Schritt startete ich in die erste Phase von Sharepoint. &lt;/p&gt; &lt;p&gt;In dieser ersten Phase habe ich öfter überlegt wie denn wohl die XML-Konfigurationen fehlerfrei zusammenarbeiten (es funktioniert nicht immer), also versucht ein Verständnis für diese Plattform zu entwickeln. Mit dem Kennenlernen der ersten Macken startete ich in die zweite Phase. &lt;/p&gt; &lt;p&gt;In der zweiten Phase überlegte ich, wie sich das Ganze sauber testen lässt. In einigen Bereichen bin ich immer noch auf der Suche nach einer robusten Lösung. Mit Sicherheit weiss ich aber, dass bei Sharepoint die Priorität auf den Integrationstests liegen muss, bspw. mit Testdaten in den Listen über dem Schwellenwert. So lassen sich besonders schnell Macken im System finden, gerade auch bei der Verwendung von Linq to Sharepoint. &lt;/p&gt; &lt;p&gt;Ein paar Gründe warum ich diese Meinung vertrete sind: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;die XML-Konfigurationen &lt;/li&gt; &lt;li&gt;die starken Abhängigkeiten &lt;/li&gt; &lt;li&gt;auch die Tatsache, dass der Endanwender die Möglichkeit hat, Einstellungen am System vorzunehmen, die nicht unerheblich sein können (Nebeneffekte). &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Des Weiteren kann es gelegentlich auch vorkommen, dass ContentTypes und Features ihre Arbeit verweigern. Für zukünftige Projekte möchte ich hier auch Integrationstests als Frühwarnsysteme einsetzen können, auch um zu sehen, ob es die Konfiguration zerhauen hat. In ein paar Bereichen wird mir T4 ein wenig Arbeit abnehmen können. &lt;/p&gt; &lt;p&gt;Zurück zu den Phasen, nach meinem gestrigen Gespräch ist es wohl die dritte Phase, in der ich mich aktuell befinde, denn auch langjährige Sharepoint-Entwickler hatten mit dem Kopf genickt und sagten, das Gefühl hatten sie auch schon. &lt;/p&gt; &lt;p&gt;In der dritten Phase verspürt man den Wunsch danach, mal eine Person aus dem Sharepoint-Team hauen zu dürfen. Die abgeschwächte Form könnte auch die Frage zu sich selbst sein: Was haben die geraucht? Wie lange diese Phase andauert kann ich jetzt noch nicht sagen und welche Phase danach kommt auch noch nicht. Ich glaube aber, dass es in dieser Phase eine sehr hohe Absprungrate gibt und die zukünftige Meinungsbildung über Sharepoint stattfindet. &lt;/p&gt; &lt;p&gt;Grundsätzlich finde ich den Ansatz von Sharepoint nicht schlecht. Das zum Beispiel die funktionale Ausgestaltung simpler Workflows, mit Hilfe des Sharepoint Designers, durch einen Poweruser erfolgen kann, hat in einigen Situationen sicherlich positive Auswirkungen auf die Unternehmensarchitektur. &lt;/p&gt; &lt;p&gt;Die Herausforderung liegt aber auf der Überprüfung der Funktionalität. Ein weiteres Problem kann sein, dass sich ein Poweruser zuviel zutraut und bei Anpassungen den Bock der Böcke schiesst, was wieder negative Auswirkungen auf das Daily Business haben kann. Es gibt immer Vor- und Nachteile, hier muss im Vorfeld abgewogen werden können, ob der Weg sinnvoll ist. &lt;/p&gt; &lt;p&gt;Ich persönlich interessiere mich primär für die Bereiche Workflows, WCF, WIF und BI mit Sharepoint. Mit CMS basierend auf Sharepoint bin ich nun auch schon in&amp;nbsp;Berührung gekommen und konnte mir mein Urteil darüber bilden. &lt;/p&gt; &lt;p&gt;Da ich nun schon einige Macken kennengelernt habe, werde ich diese in nächster Zeit veröffentlichen, falls mir Sharepoint die Zeit dafür gibt. &lt;/p&gt; &lt;p&gt;Vor allem interessiert mich auch, ob ich die dritte Phase überstehe. Falls nicht: Workflows, WCF, WIF und BI gehen ja zum Glück auch ohne Sharepoint. ;-) &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/12/10/entity-framework-41-change-tracking.html</guid>
      <link>http://www.databinding.net/blog/post/2011/12/10/entity-framework-41-change-tracking.html</link>
      <author> (René)</author>
      <title>Entity Framework 4.1 - Change Tracking</title>
      <description>Zwei Monate lang keinen Blogpost mehr verfasst. Was Sharepoint alles anrichten kann, aber das ist eine andere Geschichte.Im Bereich Change Tracking kann Code First schnell sehr langsam werden, ist in...</description>
      <pubDate>Sat, 10 Dec 2011 11:36:00 +0100</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Zwei Monate lang keinen Blogpost mehr verfasst. Was Sharepoint alles anrichten kann, aber das ist eine andere Geschichte. &lt;/p&gt; &lt;p&gt;Im Bereich Change Tracking kann Code First schnell sehr langsam werden, ist in etwa&amp;nbsp;mit Oracle&amp;nbsp;und ANSI-SQL zu vergleichen.&amp;nbsp;;-) &lt;/p&gt; &lt;p&gt;In dieser Hinsicht sind die beiden Beiträge von Arthur Vickers sehr wertvoll zum Verständnis dieser Problematik. Der &lt;a href="http://blog.oneunicorn.com/2011/12/05/entity-types-supported-by-the-entity-framework/" title="Entity types supported by the Entity Framework" class="external-link-new-window"&gt;erste Beitrag &lt;/a&gt; geht auf die unterstützten Typen für Lazy Loading und Change Tracking ein, während der &lt;a href="http://blog.oneunicorn.com/2011/12/05/should-you-use-entity-framework-change-tracking-proxies/" title="Should you use Entity Framework change-tracking proxies?" class="external-link-new-window"&gt;zweite Beitrag &lt;/a&gt; die Performance-Aspekte beleuchet.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Sehr interessant... &lt;/p&gt; </content:encoded>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634588560000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634588560000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634588560000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>.NETworking Lunch Software Design</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2 id="x_20110817"&gt;Mittwoch, 7.&amp;nbsp;Dezember 2011 (12:00 bis 14:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;.NETworking Lunch Software Design&lt;/h3&gt;
&lt;p&gt;Am 7. Dezember treffen wir uns zum zweiten und letzten .NETworking Lunch zum Thema Software Design in&amp;nbsp;diesem Jahr.
&lt;a class="x_external" title="Profil auf Xing" href="https://www.xing.com/profile/Patrick_Weibel5;key=0.0" target="_blank"&gt;
Patrick&lt;/a&gt; wird uns durch das Thema führen und&amp;nbsp;aus seiner Sicht&amp;nbsp;folgende Fragen näher beleuchten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ist Software Design heute mit modernen Frameworks überflüssig? &lt;/li&gt;&lt;li&gt;Wird Software Design eigentlich überbewertet? &lt;/li&gt;&lt;li&gt;Ist Software Design einfach nur UML? &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Diese Fragen wirken auf den ersten Blick offensichtlich falsch. Doch was ist die Aufgabe von Software Design heute wirklich? An diesem Event erklärt Patrick anhand von Praxisbeispielen und Theorie wo Software Design einen Wert zur Software Entwicklung beisteuern
 kann und wo die Risiken liegen, wenn Software Design als überbewertet angeschaut wird.
&lt;/p&gt;
&lt;p&gt;Dieser Event richtet sich an Software Entwickler, Software Architekten sowie an Projektleiter.
&lt;/p&gt;
&lt;p&gt;Dieses&amp;nbsp;Treffen findet&amp;nbsp;erneut in der Schmiedstube statt. Die Anfahrtdetails sind
&lt;a class="x_external" href="http://www.schmiedstube.com/standort.html"&gt;hier&lt;/a&gt; beschrieben.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a href="https://www.xing.com/events/networking-lunch-software-design-832440"&gt;
&lt;strong&gt;Anmeldung&lt;/strong&gt;&lt;/a&gt; erforderlich ist und gebe unter Bemerkungen und Hinweise deinen
&lt;strong&gt;Menüwunsch&lt;/strong&gt; an (Menu 1 oder Menu 2 (Vegetarisch) ca. CHF 30.-). &lt;/p&gt;
&lt;p&gt;Das Mittagessen wird von jedem Teilnehmenden direkt vom Restaurant verrechnet und muss vor Ort in bar bezahlt werden.&lt;/p&gt;
&lt;h3&gt;Abmeldung&lt;/h3&gt;
&lt;p&gt;Bei Nichterscheinen ohne Abmeldung bis 3 Arbeitstage vor dem Anlass werden allfällige Unkosten, die uns dadurch entstehen, bis CHF 50.- weiterverrechnet.&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbesd&lt;/strong&gt;. Die Aktivitäten können
&lt;a title="Zum Twitter Stream der Veranstaltung" href="http://www.dnug-bern.ch/TwitterWall.aspx"&gt;
hier&lt;/a&gt; betrachtet werden.&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf deine Teilnahme!&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Wed, 07 Dec 2011 12:00:00 +0100</pubDate>
    </item>
    <item p3:etag="W/&quot;DEMCRHo-eip7ImA9WhRRGEk.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-1291812240348997604</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/C2ic2UCeP78/opinions-scala.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">java</category>
      <category domain="http://www.blogger.com/atom/ns#">programming</category>
      <category domain="http://www.blogger.com/atom/ns#">scala</category>
      <title>Opinions: Scala</title>
      <description>&lt;p&gt;&lt;img style="float: right; margin-left: 5px; border: none;" title="240px-Yin_and_Yang.svg.png" src="http://lh3.ggpht.com/-0iELpoo_4UY/TtkIMHmdpkI/AAAAAAAABF0/YX3aRpk_TDI/240px-Yin_and_Yang.svg.png?imgmax=800" border="0" alt="" width="160" /&gt;&lt;/p&gt;
&lt;p&gt;Can you spot the difference:&lt;/p&gt;
&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: large;"&gt;Scala is a serious option for organizations developing on a JVM platform.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="http://martinfowler.com/bliki/gotoAarhus2011.html"&gt;Martin Fowler&lt;/a&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: large;"&gt;The friction and complexity that comes with using Scala instead of Java isn't offset by enough productivity benefit or reduction of maintenance burden for it to make sense as our default language.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;- &lt;a href="https://www.yammer.com/"&gt;Yammer&lt;/a&gt; &lt;a href="https://gist.github.com/1406238"&gt;moving from Scala to Java&lt;/a&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style="clear: right; font-size: 10px;"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img style="border: 0 none; margin: 0px;" src="http://www.google.com/s2/favicons?domain=twitter.com" border="0" alt="http://www.google.com/s2/favicons?domain=twitter.com" height="13px" align="left" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/C2ic2UCeP78" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 02 Dec 2011 18:17:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/1291812240348997604/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=1291812240348997604" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/1291812240348997604?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/1291812240348997604?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2011-12-02T18:21:05+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;&lt;img title="240px-Yin_and_Yang.svg.png" src="http://lh3.ggpht.com/-0iELpoo_4UY/TtkIMHmdpkI/AAAAAAAABF0/YX3aRpk_TDI/240px-Yin_and_Yang.svg.png?imgmax=800" border="0" alt="" width="160" style="float:right; margin-left:5px; border:none"&gt;&lt;/p&gt;
&lt;p&gt;Can you spot the difference:&lt;/p&gt;
&lt;blockquote class="x_tr_bq"&gt;&lt;span style="font-size:large"&gt;Scala is a serious option for organizations developing on a JVM platform.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp;&lt;a href="http://martinfowler.com/bliki/gotoAarhus2011.html"&gt;Martin Fowler&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class="x_tr_bq"&gt;&lt;span style="font-size:large"&gt;The friction and complexity that comes with using Scala instead of Java isn't offset by enough productivity benefit or reduction of maintenance burden for it to make sense as our default language.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="https://www.yammer.com/"&gt;Yammer&lt;/a&gt; &lt;a href="https://gist.github.com/1406238"&gt;
moving from Scala to Java&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img src="http://www.google.com/s2/favicons?domain=twitter.com" border="0" alt="http://www.google.com/s2/favicons?domain=twitter.com" height="13px" align="left" style="border:0 none; margin:0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=C2ic2UCeP78:jQJi8mEnflk:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=C2ic2UCeP78:jQJi8mEnflk:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/C2ic2UCeP78" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-02T18:21:05.452+01:00</app:edited>
      <media:thumbnail url="http://lh3.ggpht.com/-0iELpoo_4UY/TtkIMHmdpkI/AAAAAAAABF0/YX3aRpk_TDI/s72-c/240px-Yin_and_Yang.svg.png?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2011/12/opinions-scala.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;CU8BR3Y9eCp7ImA9WhRREEg.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-7146691831117489171</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/LKiCYLM_Hu8/model-model-thou-art-my-riddle_23.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">humor</category>
      <category domain="http://www.blogger.com/atom/ns#">design</category>
      <title>Model, model thou art my riddle!</title>
      <description>Can you spot the difference:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: large;"&gt;In a Model View Controller application, you only ever want to see SQL code in the model.&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;-&amp;nbsp; &lt;a href="http://pragprog.com/book/rr2/rails-recipes"&gt;Rails Receipes&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: large;"&gt;The domain model should be independent of persistence implementation details.&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://www.infoq.com/articles/ddd-in-practice"&gt;Domain Driven Design and Development In Practice &lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Probably we should accept that models come in different flavors...&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-5msiPOih6Xo/Tsq-GtttPOI/AAAAAAAABFo/it6EtW6RK18/s1600/Model1.jpg" width="150" /&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-DhspeXRY_nE/Tsq-GPlKt8I/AAAAAAAABFk/ut9l1E7G070/s320/Model2.jpg" width="150" /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;
&lt;/div&gt;... or maybe the grand master was right:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;Using C means that people [...] don't screw things up with any idiotic "object model" crap.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;- &lt;a href="http://article.gmane.org/gmane.comp.version-control.git/57918"&gt;Linus Torwalds&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;
&lt;div style="clear: right; font-size: 10px;"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border: 0 none; margin: 0px;" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/LKiCYLM_Hu8" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 23 Nov 2011 14:09:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/7146691831117489171/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="2 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=7146691831117489171" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/7146691831117489171?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/7146691831117489171?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2011-11-23T14:10:56+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">Can you spot the difference:&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;&lt;span style="font-size:large"&gt;In a Model View Controller application, you only ever want to see SQL code in the model.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;-&amp;nbsp; &lt;a href="http://pragprog.com/book/rr2/rails-recipes"&gt;
Rails Receipes&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;&lt;span style="font-size:large"&gt;The domain model should be independent of persistence implementation details.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://www.infoq.com/articles/ddd-in-practice"&gt;
Domain Driven Design and Development In Practice &lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
Probably we should accept that models come in different flavors...&lt;br&gt;
&lt;div style="text-align:center"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-5msiPOih6Xo/Tsq-GtttPOI/AAAAAAAABFo/it6EtW6RK18/s1600/Model1.jpg" width="150"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-DhspeXRY_nE/Tsq-GPlKt8I/AAAAAAAABFk/ut9l1E7G070/s320/Model2.jpg" width="150"&gt;&lt;/div&gt;
&lt;div class="x_separator" style="clear:both"&gt;&lt;br&gt;
&lt;/div&gt;
... or maybe the grand master was right:&lt;br&gt;
&lt;blockquote class="x_tr_bq"&gt;Using C means that people [...] don't screw things up with any idiotic &amp;quot;object model&amp;quot; crap.&lt;/blockquote&gt;
&lt;div style="text-align:right"&gt;- &lt;a href="http://article.gmane.org/gmane.comp.version-control.git/57918"&gt;
Linus Torwalds&lt;/a&gt; &lt;/div&gt;
&lt;br&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img align="left" alt="http://www.google.com/s2/favicons?domain=twitter.com" border="0" height="13px" src="http://www.google.com/s2/favicons?domain=twitter.com" style="border:0 none; margin:0px"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=LKiCYLM_Hu8:SL06s4V_dIE:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=LKiCYLM_Hu8:SL06s4V_dIE:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/LKiCYLM_Hu8" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T14:10:56.860+01:00</app:edited>
      <media:thumbnail url="http://3.bp.blogspot.com/-5msiPOih6Xo/Tsq-GtttPOI/AAAAAAAABFo/it6EtW6RK18/s72-c/Model1.jpg" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2011/11/model-model-thou-art-my-riddle_23.html</feedburner:origLink>
    </item>
    <item p3:etag="W/&quot;DkcNQng-cSp7ImA9WhRSGEU.&quot;" xmlns:p3="http://schemas.google.com/g/2005">
      <guid isPermaLink="false">tag:blogger.com,1999:blog-5763764290649132593.post-5987415928190520003</guid>
      <link>http://feedproxy.google.com/~r/closed-loop/~3/AJDZqsV29tw/watch-out-world-is-changing.html</link>
      <author>noreply@blogger.com</author>
      <category domain="http://www.blogger.com/atom/ns#">cool stuff</category>
      <category domain="http://www.blogger.com/atom/ns#">trivia</category>
      <title>Watch out: The world is changing!</title>
      <description>&lt;p&gt;Lately I seem more &lt;a href="http://blog.jonasbandi.net/2011/09/back-at-university-things-have-changed.html"&gt;susceptible to realize&lt;/a&gt; how fast the world is changing. Probably I am getting old...&lt;/p&gt;&lt;p&gt;At a recent lecture, Martin Herdina (CEO,  &lt;a href="http://www.wikitude.com/"&gt;Wikitude&lt;/a&gt;) showed how the mobile phone changes our lives &lt;span style="font-size: 11px;"&gt;(and he &lt;/span&gt;&lt;a style="font-size: 11px;" href="http://www.flickr.com/photos/jbandi/6347039014/in/photostream/lightbox/"&gt;displayed slides&lt;/a&gt;&lt;span style="font-size: 11px;"&gt; you don't usually see in lectures…)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Once again I realized that the iPhone was only launched in 2007. I think it is amazing how our use of technology can change in only 4 years ...&lt;/p&gt;&lt;p&gt;Another striking example underlying the perception of technical change in relation to other areas of our lives:&lt;/p&gt;&lt;p style="text-align: center;"&gt;What crosses your mind when you see the following picture?&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://lh4.ggpht.com/-77BuNo4JXZ0/TsYAOWEQ-PI/AAAAAAAABFU/vFpEGwWmnMQ/ELT200709112316547187881.JPG?imgmax=800" border="0" alt="ELT200709112316547187881" width="200" /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;em&gt;&lt;strong&gt;Old-school, clumsy, clunky, retro&lt;/strong&gt;&lt;/em&gt; …&lt;/p&gt;&lt;p style="text-align: center;"&gt;...at least that are impressions that pop up in my head…&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p style="text-align: center;"&gt;Now, what crosses your mind when you see the following picture:&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://lh4.ggpht.com/-JxVQiLoMpTI/TsYAMkcLaOI/AAAAAAAABFI/Un-ZXPQ9JN4/matrix_wallpaper5.jpg?imgmax=800" border="0" alt="Matrix wallpaper5" width="400" /&gt; &lt;br /&gt;
&lt;strong&gt;&lt;em&gt; Cool, highlight, milestone in movie history, top-10-movies of all times, re-defining science fiction movies …&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;...again that are my personal associations.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p style="text-align: center;"&gt;But you remember that the &lt;a href="http://en.wikipedia.org/wiki/Nokia_7110"&gt;Nokia 7110 phone&lt;/a&gt; in the above picture was actually &lt;strong&gt;designed after being inspired by the Matrix movie&lt;/strong&gt;:&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://lh5.ggpht.com/-7imwjZ4YKuY/TsYANjDMFQI/AAAAAAAABFM/3hHZWzoC9wo/matrix_nokia1.jpg?imgmax=800" border="0" alt="Matrix nokia1" width="320" /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;I think it is remarkable how time is not having the same effect on movies as on technology. The Matrix definitely aged better than the Nokia phone.&lt;/p&gt;&lt;p&gt;In context: &lt;a href="http://www.youtube.com/watch?v=cL9Wu2kWwSY"&gt;Great video about living in exponential times.&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="clear: right; font-size: 10px;"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img style="margin: 0px; border: 0px none initial;" src="http://www.google.com/s2/favicons?domain=twitter.com" border="0" alt="http://www.google.com/s2/favicons?domain=twitter.com" height="13px" align="left" /&gt;If you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:Y59mnZtVT5U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/AJDZqsV29tw" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 18 Nov 2011 07:50:00 +0100</pubDate>
      <link rel="replies" type="application/atom+xml" title="Post Comments" href="http://blog.jonasbandi.net/feeds/5987415928190520003/comments/default" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="replies" type="text/html" title="0 Comments" href="http://www.blogger.com/comment.g?blogID=5763764290649132593&amp;postID=5987415928190520003" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/5987415928190520003?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5763764290649132593/posts/default/5987415928190520003?v=2" xmlns="http://www.w3.org/2005/Atom" />
      <updated xmlns="http://www.w3.org/2005/Atom">2011-11-21T15:01:33+01:00</updated>
      <content type="html" xmlns="http://www.w3.org/2005/Atom">
&lt;p&gt;Lately I seem more &lt;a href="http://blog.jonasbandi.net/2011/09/back-at-university-things-have-changed.html"&gt;
susceptible to realize&lt;/a&gt; how fast the world is changing. Probably I am getting old...&lt;/p&gt;
&lt;p&gt;At a recent lecture,&amp;nbsp;Martin Herdina (CEO, &lt;a href="http://www.wikitude.com/"&gt;Wikitude&lt;/a&gt;) showed how the mobile phone changes our lives
&lt;span style="font-size:11px"&gt;(and he &lt;/span&gt;&lt;a href="http://www.flickr.com/photos/jbandi/6347039014/in/photostream/lightbox/" style="font-size:11px"&gt;displayed slides&lt;/a&gt;&lt;span style="font-size:11px"&gt; you don't usually see in lectures…)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Once again I realized that the iPhone was only launched in 2007. I think it is amazing how our use of technology can change in only 4 years ...&lt;/p&gt;
&lt;p&gt;Another striking example underlying the perception of technical change in relation to other areas of our lives:&lt;/p&gt;
&lt;p style="text-align:center"&gt;What crosses your mind when you see the following picture?&lt;/p&gt;
&lt;p&gt;&lt;img src="http://lh4.ggpht.com/-77BuNo4JXZ0/TsYAOWEQ-PI/AAAAAAAABFU/vFpEGwWmnMQ/ELT200709112316547187881.JPG?imgmax=800" border="0" alt="ELT200709112316547187881" width="200" style="display:block; margin-left:auto; margin-right:auto"&gt;&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;em&gt;&lt;strong&gt;Old-school, clumsy, clunky, retro&lt;/strong&gt;&lt;/em&gt; …&lt;/p&gt;
&lt;p style="text-align:center"&gt;...at least that are impressions that pop up in my head…&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:center"&gt;Now, what crosses your mind when you see the following picture:&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;img src="http://lh4.ggpht.com/-JxVQiLoMpTI/TsYAMkcLaOI/AAAAAAAABFI/Un-ZXPQ9JN4/matrix_wallpaper5.jpg?imgmax=800" border="0" alt="Matrix wallpaper5" width="400" style="display:block; margin-left:auto; margin-right:auto"&gt;
&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Cool, highlight, milestone in movie history, top-10-movies of all times, re-defining science fiction movies …&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align:center"&gt;...again that are my personal associations.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:center"&gt;But you remember that the &lt;a href="http://en.wikipedia.org/wiki/Nokia_7110"&gt;
Nokia 7110 phone&lt;/a&gt; in the above picture was actually &lt;strong&gt;designed after being inspired by the Matrix movie&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://lh5.ggpht.com/-7imwjZ4YKuY/TsYANjDMFQI/AAAAAAAABFM/3hHZWzoC9wo/matrix_nokia1.jpg?imgmax=800" border="0" alt="Matrix nokia1" width="320" style="display:block; margin-left:auto; margin-right:auto"&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I think it is remarkable how time is not having the same effect on movies as on technology. The Matrix definitely aged better than the Nokia phone.&lt;/p&gt;
&lt;p&gt;In context: &lt;a href="http://www.youtube.com/watch?v=cL9Wu2kWwSY"&gt;Great video about living in exponential times.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="clear:right; font-size:10px"&gt;&lt;a href="http://twitter.com/jbandi"&gt;&lt;img src="http://www.google.com/s2/favicons?domain=twitter.com" border="0" alt="http://www.google.com/s2/favicons?domain=twitter.com" height="13px" align="left" style="margin:0px; border:0px none initial"&gt;If
 you like this, follow me on twitter ...&lt;/a&gt;&lt;/div&gt;
&lt;div class="x_feedflare"&gt;&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:yIl2AUoC8zA"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:I9og5sOYxJI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:F7zBnMyn0Lo"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:V_sGLiPBpWU"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:gIN9vFwOqvQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?i=AJDZqsV29tw:9kZgimg8uoc:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:cGdyc7Q-1BI"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=cGdyc7Q-1BI" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:G79ilh31hkQ"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=G79ilh31hkQ" border="0"&gt;&lt;/a&gt;
&lt;a href="http://feeds.feedburner.com/~ff/closed-loop?a=AJDZqsV29tw:9kZgimg8uoc:Y59mnZtVT5U"&gt;
&lt;img src="http://feeds.feedburner.com/~ff/closed-loop?d=Y59mnZtVT5U" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/closed-loop/~4/AJDZqsV29tw" height="1" width="1"&gt;</content>
      <app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-21T15:01:33.659+01:00</app:edited>
      <media:thumbnail url="http://lh4.ggpht.com/-77BuNo4JXZ0/TsYAOWEQ-PI/AAAAAAAABFU/vFpEGwWmnMQ/s72-c/ELT200709112316547187881.JPG?imgmax=800" height="72" width="72" xmlns:media="http://search.yahoo.com/mrss/"></media:thumbnail>
      <thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total>
      <gd:extendedProperty name="commentSource" value="1" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" xmlns:gd="http://schemas.google.com/g/2005"></gd:extendedProperty>
      <feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jonasbandi.net/2011/11/watch-out-world-is-changing.html</feedburner:origLink>
    </item>
    <item>
      <guid isPermaLink="true">http://www.affolter.net/blog-news/2011/11/14/impressumspflicht-fuer-schweizer-websites.aspx</guid>
      <link>http://www.affolter.net/blog-news/2011/11/14/impressumspflicht-fuer-schweizer-websites.aspx</link>
      <title>Impressumspflicht für Schweizer Websites</title>
      <description />
      <pubDate>Mon, 14 Nov 2011 00:00:00 Z</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://csharp.at/Registration_CH.aspx</guid>
      <link>http://csharp.at/Registration_CH.aspx</link>
      <author>info@dnug-bern.ch</author>
      <category>.NET User Group Bern Veranstaltungshinweis</category>
      <title>SQL Server Performance Tuning and Troubleshooting Workshop</title>
      <description>
&lt;div style="background-color:#eee; padding:5px"&gt;&lt;img src="http://www.dnug-bern.ch/events/sql/Banner.jpg" alt="" style="width:500px"&gt;
&lt;p&gt;It's Friday, 05:00pm. You are just receiving an email that informs you that your SQL Server has enormous performance problems! What can you do? How can you identify the problem and resolve it fast? Which tools provides you SQL Server for this task?
&lt;/p&gt;
&lt;p&gt;In this workshop you will see a lot of different tools with which you can do effective SQL Server troubleshooting. You will learn how to identify performance bottlenecks with those tools, and how to resolve the identified bottlenecks. We will also look into
 the most prominent performance bottlenecks inside SQL Server and how you can troubleshoot those problems effectively.
&lt;/p&gt;
&lt;a href="http://csharp.at/Registration_CH.aspx"&gt;more&lt;/a&gt; &lt;/div&gt;
</description>
      <pubDate>Mon, 07 Nov 2011 08:00:00 Z</pubDate>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634557672000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634557672000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634557672000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Rich-Internet Apps &amp; Mobile Anwendungen mit HTML5, Javascript und Azure</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2 id="x_20010912"&gt;Dienstag, 1. November&amp;nbsp;2011 (18:00 bis 20:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Rich-Internet Apps &amp;amp; Mobile Anwendungen mit HTML5, Javascript und Azure&amp;nbsp;mit Tim F. Fischer&lt;/h3&gt;
&lt;div&gt;&lt;span style="background-color:rgb(255,255,153)"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;Am Dienstag, den 1. November 2011 werden wir uns mit dem Thema Rich-Internet Apps &amp;amp; Mobile Anwendungen mit HTML5 und Javascript beschäftigen. Bevor wir aber mit diesen Vortrag beginnen, wird uns
&lt;a class="x_external" href="http://graberj.wordpress.com/author/graberj/" target="_blank"&gt;
Johnny&lt;/a&gt; die Neuerungen zu Windows 8 und WinRT&amp;nbsp;präsentieren.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt; &lt;br&gt;
Mit HTML5 und auch bereits HTML4 können anspruchsvolle Rich Internet Anwendungen erstellt werden, die sogar einen Windows-Look, komplexe Funktionen wie Pivot-Charts, editierbare Data-Grids und mehr mitbringen. In diesem Vortrag zeigt Tim Fischer, wie Du solche
 modernen AJAX-Anwendungen erstellen und auf Windows Azure bereitstellen kannst. Dieselben Techniken können auch für mobile Anwendungen verwendet werden und das werden wir auch tun. Zudem werden wir auch Sencha ExtJS, Sencha Touch und T4 als nützliche Begleiter
 kennenlernen. &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Über Tim Fischer&lt;/strong&gt; &lt;br&gt;
Dipl.-Inf. Tim Fischer ist Developer Evangelist für ISV/Azure bei der Microsoft Deutschland GmbH. Tim Fischer hat langjährige Erfahrung in der Software-Entwicklung auf der Microsoft Plattform insbesondere mit COM-Technologien und .NET sowie in der modellgetriebenen
 Software-Entwicklung und Cloud-Computing. &lt;/p&gt;
&lt;p&gt;Zuvor hat er an der Entwicklung von Visual Studio 2008 als Program Manager gearbeitet und über 10 Jahre bei einem deutschen Software-Hersteller für Entwicklungswerkzeuge wertvolle Praxis-Erfahrung gesammelt.
&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a title="Zur Anmeldung auf XING" href="https://www.xing.com/events/rich-internet-apps-mobile-anwendungen-html5-javascript-windows-azure-821582" target="_blank"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. &lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbejs1&lt;/strong&gt;. Die Aktivitäten können während der Veranstaltung
&lt;a href="http://www.dnug-bern.ch/TwitterWall.aspx"&gt;hier&lt;/a&gt; betrachtet werden. &lt;/p&gt;
&lt;p&gt;Wir freuen uns auf deine Teilnahme! &lt;/p&gt;
</description>
      <pubDate>Tue, 01 Nov 2011 18:00:00 +0100</pubDate>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=478</guid>
      <link>http://schaedlerdaniel.wordpress.com/2011/10/27/heirate-mich-asp-net-und-jquery-accordion/</link>
      <category>ASP.NET /AJAX /ASP.NET MVC</category>
      <category>JavaScript / HTML /CSS /XML</category>
      <title>Heirate mich (ASP.NET und JQuery Accordion)</title>
      <description>Was ganz nützlich für die Darstellung von Daten ist, ist das Accordion, welches ja auch bereits im AjaxControlToolkit vorkommt. Nun die meisten werden das Ganze sicherlich rein nativ client-seitig mit JQuery und der Herumschlagerei von Div-Elementen verwendet
 haben. Meine Überlegung war es, in Abhängigkeit zu einer Quelle (IEnumerable) die Accordion-Items generieren zu lassen. Wie bin [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=478&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Thu, 27 Oct 2011 08:18:29 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2011/10/27/heirate-mich-asp-net-und-jquery-accordion/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Was ganz nützlich für die Darstellung von Daten ist, ist das Accordion, welches ja auch bereits im AjaxControlToolkit vorkommt.&lt;/p&gt;
&lt;p&gt;Nun die meisten werden das Ganze sicherlich rein nativ client-seitig mit JQuery und der Herumschlagerei von Div-Elementen verwendet haben.&lt;/p&gt;
&lt;p&gt;Meine Überlegung war es, in Abhängigkeit zu einer Quelle (IEnumerable) die Accordion-Items generieren zu lassen.&lt;/p&gt;
&lt;h3&gt;Wie bin ich vorgegangen?&lt;/h3&gt;
&lt;p&gt;Als erstes habe ich mir das Markup eines Demo-Accordions auf der Webseite von JQuery angesehen.&lt;/p&gt;
&lt;p&gt;Da es im .NET die Klasse &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlgenericcontrol.aspx"&gt;HtmlGeneric&lt;/a&gt; gibt kann man mit dieser mit ein wenig Geschick viel anstellen&lt;/p&gt;
&lt;p&gt;Also wir brauchen folgendes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eine ASP.Seite mit einem Div-Element dass den Container für das Accordion darstellt&lt;/li&gt;
&lt;li&gt;Als nächstes brauchen wir eine Klasse, die uns den Accordion Markup generiert&lt;/li&gt;
&lt;li&gt;Und last but not least ein Model Element (Klassenelement aus unserem Modell&lt;/li&gt;
&lt;h4 style="color:black;"&gt;1. Erstellen der ASPX Seite &lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Der nachfolgende Markup-Code ist keine Magie und ziemlich schlank&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;%@ Page Title=&amp;quot;&amp;quot; Language=&amp;quot;C#&amp;quot; MasterPageFile=&amp;quot;~/Site.Master&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeBehind=&amp;quot;Index.aspx.cs&amp;quot; Inherits=&amp;quot;AspNetWebFromJQueryUI.Index&amp;quot; %&amp;gt;
&amp;lt;asp:Content ID=&amp;quot;Content1&amp;quot; ContentPlaceHolderID=&amp;quot;HeadContent&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
&amp;lt;link type=&amp;quot;text/css&amp;quot; href=&amp;quot;Content/themes/base/jquery.ui.all.css&amp;quot; rel=&amp;quot;Stylesheet&amp;quot; /&amp;gt;	
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/Scripts/jquery-1.6.4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/Scripts/jquery-ui-1.8.16.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&amp;lt;asp:Content ID=&amp;quot;Content2&amp;quot; ContentPlaceHolderID=&amp;quot;MainContent&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
&amp;lt;script&amp;gt;
    $(function () {
        $(&amp;quot;#Accordion&amp;quot;).accordion();
    });
	&amp;lt;/script&amp;gt;
&amp;lt;div id=&amp;quot;ResultDiv&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;/asp:Content&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Einzig das Referenzieren von JQuery und JQueryUI sollte beachtet werden. Hierzu findet man auf JQueryUI die entsprechende Anleitung im &lt;a href="http://jqueryui.com/docs/Getting_Started"&gt;Get started&lt;/a&gt; Teil.&lt;/p&gt;
&lt;h4 style="color:black;"&gt;2. Den Helper für das Accordion &lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Nun kommen wir zum Helper für die Erstellung des Markups für das Accordion, der wie folgt aufgebaut ist: &lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web.UI;
using System.Web.UI.HtmlControls;

namespace AspNetWebFromJQueryUI.Controls
{
    /// &amp;lt;summary&amp;gt;
    /// Responsible for creating an accordion base
    /// for using it with JQueryUI
    /// &amp;lt;/summary&amp;gt;
    public static class AccordionHelper
    {
        /// &amp;lt;summary&amp;gt;
        /// Returns the complete HTML code for the accordion.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;The model type.&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;datasource&amp;quot;&amp;gt;The items to show in the accordion&amp;lt;/param&amp;gt;
        /// &amp;lt;see cref=&amp;quot;http://jqueryui.com/demos/accordion/&amp;quot;/&amp;gt;
        /// &amp;lt;returns&amp;gt;The HTML Markup for an accordion in JQuery manner&amp;lt;/returns&amp;gt;
        public static HtmlGenericControl CreateAccordion&amp;lt;T&amp;gt;(IEnumerable&amp;lt;T&amp;gt; datasource)
        {
            HtmlGenericControl accordion = new HtmlGenericControl {TagName = &amp;quot;div&amp;quot;, ClientIDMode = ClientIDMode.Static, ID = &amp;quot;Accordion&amp;quot;};
            accordion.InnerHtml = CreateContentDiv(datasource);

            return accordion;
        }

        /// &amp;lt;summary&amp;gt;
        /// Creates the content div's for putting the model
        /// content to it.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;The model item (for example from the businessmodel)&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;datasource&amp;quot;&amp;gt;The items that are the datasource for the accordion&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;The HTML string for the accordion&amp;lt;/returns&amp;gt;
        private static string CreateContentDiv&amp;lt;T&amp;gt;(IEnumerable&amp;lt;T&amp;gt; datasource)
        {
            StringBuilder sb = new StringBuilder();

            if (datasource != null)
                for (int index = datasource.Count() - 1; index &amp;gt;= 0; index--)
                {
                    if (index == 0)
                    {
                        sb.AppendLine(string.Format(&amp;quot;&amp;lt;h3&amp;gt;&amp;lt;a href=\&amp;quot;#\&amp;quot;&amp;gt;{0}&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;, CreateTitleElement(datasource.ToList()[index])));
                        sb.AppendLine(string.Format(&amp;quot;&amp;lt;div&amp;gt;{0}&amp;lt;/div&amp;gt;&amp;quot;, CreateContentItemFromModel(datasource.ToList()[index])));
                    }
                    else
                    {
                        sb.AppendLine(string.Format(&amp;quot;&amp;lt;h3&amp;gt;&amp;lt;a href=\&amp;quot;#\&amp;quot;&amp;gt;{0}&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;, CreateTitleElement(datasource.ToList()[index])));
                        sb.AppendLine(string.Format(&amp;quot;&amp;lt;div&amp;gt;{0}&amp;lt;/div&amp;gt;&amp;quot;, CreateContentItemFromModel(datasource.ToList()[index])));
                    }
                }

            return sb.ToString();
        }

        /// &amp;lt;summary&amp;gt;
        /// Foreach property in the model item it will be crated a desing
        /// like label: value of the property.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;The model object&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;model&amp;quot;&amp;gt;The model item to treat&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;The content for the contentItems in the accordion&amp;lt;/returns&amp;gt;
        private static string CreateContentItemFromModel&amp;lt;T&amp;gt;(T model)
        {
            StringBuilder sb = new StringBuilder();
            model.GetType().GetProperties().ToList().ForEach(property =&amp;gt; sb.AppendLine(string.Format(@&amp;quot;{0}: {1} &amp;lt;BR/&amp;gt;&amp;quot;, property.Name, property.GetValue(model, null))));

            return sb.ToString();
        }

        /// &amp;lt;summary&amp;gt;
        /// Takes the first property of an object an set's it 
        /// as title.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;The model object&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name=&amp;quot;model&amp;quot;&amp;gt;The model item to treat&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;The content for the title in the accordion&amp;lt;/returns&amp;gt;
        private static string CreateTitleElement&amp;lt;T&amp;gt;(T model)
        {
            StringBuilder sb = new StringBuilder();
            PropertyInfo info = model.GetType().GetProperties().FirstOrDefault();
            string title = string.Format(@&amp;quot;{0}: {1}&amp;quot;, info.Name, info.GetValue(model, null));

            return title;
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;Was macht der Code?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Er erstellt das Grundgerüst in welchem die Items reingepflanzt werden.&lt;/li&gt;
&lt;li&gt;Er erstellt einen Titel aus dem ersten Property des Modells und setzt diesen mit dem Wert des ersten gefundenen Properties von der Modellklasse &lt;/li&gt;
&lt;li&gt;Ist alles erledigt, gibt er den gesamten erstellen Markup zurück&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style="color:black;"&gt;3. Die Modellklasse&lt;/h4&gt;
&lt;p&gt;Meistens findet ja so ein Accordion bei einem Newsreader Verwendung. Eine solches News-Items hat die folgenden Eigenschaften:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Titel&lt;/li&gt;
&lt;li&gt;Inhalt&lt;/li&gt;
&lt;li&gt;Veröffentlichungsdatum&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nachstehend die sehr einfache Modellklasse für ein News-Item.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
using System;

namespace AspNetWebFromJQueryUI.Model
{
    public class NewsItem
    {
        public string Title { get; set; }

        public string Content { get; set; }

        public DateTime PublishDate { get; set; }

    }
}
&lt;/pre&gt;
&lt;p&gt;Wirklich ganz trivial&amp;#8230; &lt;/p&gt;
&lt;/p&gt;
&lt;h4 style="color:black;"&gt;4. Einbindung in unsere Seite&lt;/h4&gt;
&lt;p&gt;Die Einbindung in die Seite geschieht dann wie folgt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ResultatDiv der Seite mit einem runat=&amp;#8221;server&amp;#8221; versehen&lt;/li&gt;
&lt;li&gt;Im Codebehind dem Control das generierte Accordion hinzufügen.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using AspNetWebFromJQueryUI.Controls;
using AspNetWebFromJQueryUI.Model;

namespace AspNetWebFromJQueryUI
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            //Create dummyData
            List&amp;lt;NewsItem&amp;gt; datasource = new List&amp;lt;NewsItem&amp;gt;();

            for (int index = 0; index &amp;lt; 10; index++)
            {
                datasource.Add(new NewsItem() { Content = string.Format(@&amp;quot;Neuigkeitsinhalt {0}&amp;quot;, index.ToString()), 
                                                Title = string.Format(@&amp;quot;Neuigkeit {0}&amp;quot;, index.ToString()), 
                                                PublishDate = DateTime.Now.Subtract(new TimeSpan(index, index, index)) });
            }
            
            this.ResultDiv.Controls.Add(AccordionHelper.CreateAccordion(datasource.OrderByDescending(n =&amp;gt; n.PublishDate)));
            
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;Somit wird beim Starten, alles in einem schönen von JQuery verwalteten Accordion gerendet.&lt;/p&gt;
&lt;p&gt;ACHTUNG: Reflection funktioniert nicht in Abhängigkeit zu den .NET Sicherheitseinstellungen, daher muss zuerst überprüft werden, ob mit Reflection gearbeitet werden kann.&lt;/p&gt;
&lt;p&gt;Für Anregungen und Fragen würde ich mich auf einen Kommentar freuen&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f10%2f27%2fheirate-mich-asp-net-und-jquery-accordion%2f"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f10%2f27%2fheirate-mich-asp-net-und-jquery-accordion%2f" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/478/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/478/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=478&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2011/10/27/heirate-mich-asp-net-und-jquery-accordion/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f10%2f27%2fheirate-mich-asp-net-und-jquery-accordion%2f" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=453</guid>
      <link>http://schaedlerdaniel.wordpress.com/2011/10/23/vorlagen-mal-anders/</link>
      <category>ASP.NET /AJAX /ASP.NET MVC</category>
      <category>JavaScript / HTML /CSS /XML</category>
      <title>Vorlagen mal anders…</title>
      <description>… und die Möglichkeit auch ohne JQuery Templates auszukommen. Wie soll man das verstehen? Nun ganz einfach, wenn wir eine XML basierte Daten getriebene Webanwendung haben, so ist es nicht immer notwendig mit JQuery Templates das Verschönern der Seite vorzunehmen.
 Hierzu kann XML /XSL(T) ein wahres Traumpaar sein. Anhand von drei Beispielen soll dann auch [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=453&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Sun, 23 Oct 2011 17:24:22 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2011/10/23/vorlagen-mal-anders/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;&amp;#8230; und die Möglichkeit auch ohne JQuery Templates auszukommen. Wie soll man das verstehen? Nun ganz einfach, wenn wir eine XML basierte Daten getriebene Webanwendung haben, so ist es nicht immer notwendig mit JQuery Templates das Verschönern der Seite vorzunehmen. Hierzu kann XML /XSL(T) ein wahres Traumpaar sein. Anhand von drei Beispielen soll dann auch gezeigt werden wie es mit dem XMLControl von ASP.NET, rein Client seitig und rein Code-behind bewerkstelligt wird.&lt;/p&gt;
&lt;h5&gt;XML Data Control&lt;/h5&gt;
&lt;p&gt;Zuerst erstellen wir uns eine neue ASP.NET WebForms Anwendung und fügen in unsere Seite das XML Data Control ein.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;%@ Page Title=&amp;quot;Home Page&amp;quot; Language=&amp;quot;C#&amp;quot; MasterPageFile=&amp;quot;~/Site.master&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot;
    CodeBehind=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;XMLDataDrivenWeb._Default&amp;quot; %&amp;gt;

&amp;lt;asp:Content ID=&amp;quot;HeaderContent&amp;quot; runat=&amp;quot;server&amp;quot; ContentPlaceHolderID=&amp;quot;HeadContent&amp;quot;&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&amp;lt;asp:Content ID=&amp;quot;BodyContent&amp;quot; runat=&amp;quot;server&amp;quot; ContentPlaceHolderID=&amp;quot;MainContent&amp;quot;&amp;gt;
    &amp;lt;h2&amp;gt;
        XML Driven Web Development
    &amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;
        XML DataControl to apply XSL to the XML Document.

        &amp;lt;asp:Xml ID=&amp;quot;XmlContainer&amp;quot; runat=&amp;quot;server&amp;quot; 
            DocumentSource=&amp;quot;~/App_Data/KontaktAngaben.xml&amp;quot; 
            TransformSource=&amp;quot;/App_Data/KontaktFormatierung.xsl&amp;quot; onload=&amp;quot;XmlContainer_Load&amp;quot; &amp;gt;&amp;lt;/asp:Xml&amp;gt;
    &amp;lt;/p&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Damit wir das Control mit den notwendigen Daten füttern können, erstellen wir zwei Dateien im App_Code Ordner.&lt;/p&gt;
&lt;h6&gt;Die XML Datendatei&lt;/h6&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;KontaktFormatierung.xsl&amp;quot;?&amp;gt;
&amp;lt;Kontakangaben&amp;gt;
    &amp;lt;Person&amp;gt;
        &amp;lt;Salutation&amp;gt;Herr&amp;lt;/Salutation&amp;gt;
        &amp;lt;FirstName&amp;gt;Hans&amp;lt;/FirstName&amp;gt;
        &amp;lt;LastName&amp;gt;Müller&amp;lt;/LastName&amp;gt;
        &amp;lt;Street&amp;gt;Müllerstrasse 14&amp;lt;/Street&amp;gt;
        &amp;lt;City&amp;gt;3205 Müllhausen&amp;lt;/City&amp;gt;
        &amp;lt;Phone&amp;gt;0132542254&amp;lt;/Phone&amp;gt;
        &amp;lt;Phone&amp;gt;0123655447&amp;lt;/Phone&amp;gt;
        &amp;lt;Role&amp;gt;Präsident&amp;lt;/Role&amp;gt;
        &amp;lt;EMail href=&amp;quot;hans.mueller@muellergmbh.com&amp;quot;&amp;gt;Müller Hans&amp;lt;/EMail&amp;gt;
    &amp;lt;/Person&amp;gt;
    &amp;lt;Person&amp;gt;
        &amp;lt;Salutation&amp;gt;Frau&amp;lt;/Salutation&amp;gt;
        &amp;lt;FirstName&amp;gt;Heidi&amp;lt;/FirstName&amp;gt;
        &amp;lt;LastName&amp;gt;Müller&amp;lt;/LastName&amp;gt;
        &amp;lt;Street&amp;gt;Müllerstrasse 14&amp;lt;/Street&amp;gt;
        &amp;lt;City&amp;gt;3205 Müllhausen&amp;lt;/City&amp;gt;
        &amp;lt;Phone&amp;gt;0766778939&amp;lt;/Phone&amp;gt;
        &amp;lt;Phone&amp;gt;0324546688&amp;lt;/Phone&amp;gt;
        &amp;lt;Role&amp;gt;Vizepräsidentin&amp;lt;/Role&amp;gt;
        &amp;lt;EMail href=&amp;quot;heidi.mueller@muellergmbh.com&amp;quot;&amp;gt;Heidi Müller&amp;lt;/EMail&amp;gt;
    &amp;lt;/Person&amp;gt;
&amp;lt;/Kontakangaben&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Die dazugehörige XSL(T) Datei sieht dann wie folgt aus.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; &amp;gt;
    &amp;lt;!-- Define the outputtype --&amp;gt;
    &amp;lt;xsl:output method=&amp;quot;html&amp;quot;/&amp;gt;
    &amp;lt;xsl:template match=&amp;quot;/*&amp;quot;&amp;gt;
        &amp;lt;table class=&amp;quot;tableStyle&amp;quot;&amp;gt;
            &amp;lt;tr&amp;gt;
                &amp;lt;th&amp;gt;Kontaktangaben&amp;lt;/th&amp;gt;
                &amp;lt;th&amp;gt;Rolle&amp;lt;/th&amp;gt;
                &amp;lt;th&amp;gt;Telefon(e)&amp;lt;/th&amp;gt;
                &amp;lt;th&amp;gt;E-Mail&amp;lt;/th&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;xsl:for-each select=&amp;quot;Person&amp;quot;&amp;gt;
                &amp;lt;tr&amp;gt;
                    &amp;lt;td&amp;gt;
                        &amp;lt;xsl:value-of select=&amp;quot;FirstName&amp;quot;/&amp;gt; &amp;lt;xsl:value-of select=&amp;quot;LastName&amp;quot;/&amp;gt;
                        &amp;lt;br/&amp;gt;
                        &amp;lt;xsl:value-of select=&amp;quot;Street&amp;quot;/&amp;gt;
                        &amp;lt;br/&amp;gt;
                        &amp;lt;xsl:value-of select=&amp;quot;City&amp;quot;/&amp;gt;
                    &amp;lt;/td&amp;gt;
                    &amp;lt;td&amp;gt;
                        &amp;lt;xsl:value-of select=&amp;quot;Role&amp;quot;/&amp;gt;
                    &amp;lt;/td&amp;gt;
                    &amp;lt;td&amp;gt;
                        &amp;lt;ul&amp;gt;
                            &amp;lt;xsl:for-each select=&amp;quot;./Phone&amp;quot;&amp;gt;
                                &amp;lt;li&amp;gt;
                                        &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;                            
                                &amp;lt;/li&amp;gt;
                            &amp;lt;/xsl:for-each&amp;gt;
                        &amp;lt;/ul&amp;gt;
                    &amp;lt;/td&amp;gt;
                    &amp;lt;td&amp;gt;
                        &amp;lt;a&amp;gt;
                            &amp;lt;!-- The xml attribute sets the value for the &amp;lt;a&amp;gt; tag and adds an attribute to it--&amp;gt;
                            &amp;lt;xsl:attribute name=&amp;quot;href&amp;quot;&amp;gt;mailto:&amp;lt;xsl:value-of select=&amp;quot;../Person/EMail/@href&amp;quot;/&amp;gt;&amp;lt;/xsl:attribute&amp;gt;
                            &amp;lt;xsl:value-of select=&amp;quot;../Person/FirstName&amp;quot;/&amp;gt;
                            &amp;lt;xsl:value-of select=&amp;quot;../Person/LastName&amp;quot;/&amp;gt;
                        &amp;lt;/a&amp;gt;                                                                                                                               
                    &amp;lt;/td&amp;gt;
                &amp;lt;/tr&amp;gt;
            &amp;lt;/xsl:for-each&amp;gt;
        &amp;lt;/table&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Wichtig ist dass der output mode auf HTML gestellt wird, ansonsten wird es mit dem Link in der E-Mail Adresse schwierig diesen korrekt darzustellen.&lt;/p&gt;
&lt;p&gt;Der Ouput wird dann automatisch vom XML Control gerendert.&lt;/p&gt;
&lt;h5&gt;Reine clientseitige Verarbeitung&lt;/h5&gt;
&lt;p&gt;Eine weitere Möglichkeit, für alle die JavaScript über alles lieben, ist mit JQuery die Transformation vorzunehmen.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;%@ Page Title=&amp;quot;&amp;quot; Language=&amp;quot;C#&amp;quot; MasterPageFile=&amp;quot;~/Site.Master&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeBehind=&amp;quot;Index.aspx.cs&amp;quot; Inherits=&amp;quot;XMLDataDrivenWeb.Index&amp;quot; %&amp;gt;
&amp;lt;asp:Content ID=&amp;quot;Content1&amp;quot; ContentPlaceHolderID=&amp;quot;HeadContent&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;    
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; language=&amp;quot;javascript&amp;quot;&amp;gt;
        var xml = null;
        var xsl = null;

        $(document).ready(function () {

            $.ajax({
                type: &amp;quot;GET&amp;quot;,
                url: &amp;quot;XMLData/KontaktAngaben.xml&amp;quot;,
                data: &amp;quot;{}&amp;quot;,
                contentType: &amp;quot;application/xml; charset=utf-8&amp;quot;,
                dataType: &amp;quot;xml&amp;quot;,
                success: function (msg) {
                    xml = msg;
                },
                error: function (msg) {
                    alert(msg);
                }
            });

            $.ajax({
                type: &amp;quot;GET&amp;quot;,
                url: &amp;quot;XMLData/KontaktFormatierung.xsl&amp;quot;,
                data: &amp;quot;{}&amp;quot;,
                contentType: &amp;quot;application/xml; charset=utf-8&amp;quot;,
                dataType: &amp;quot;xml&amp;quot;,
                success: function (msg) {
                    xsl = msg;
                    TransformXml();
                },
                error: function (msg) {
                    alert(msg);
                }
            });
        });

        function TransformXml() {

            $('#ResultDiv')[0].innerHTML = xml.transformNode(xsl);
        }
    &amp;lt;/script&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&amp;lt;asp:Content ID=&amp;quot;Content2&amp;quot; ContentPlaceHolderID=&amp;quot;MainContent&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;ResultDiv&amp;quot;&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&lt;/pre&gt;
&lt;h5&gt;Code behind Bearbeitung&lt;/h5&gt;
&lt;p&gt;Zu guter letzt kann alles natürlich mit C# erledigt werden, was eigentlich auch keine Hexerei darstellt.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using System.Xml;
using System.Xml.Xsl;
using System.IO;
using System.Text;

namespace XMLDataDrivenWeb
{
    public partial class PureDotNet : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            GetDocument();
        }

        private void GetDocument()
        {
            XmlDocument x = new XmlDocument();
            x.Load(XmlReader.Create(Server.MapPath(@&amp;quot;/App_Data/Kontaktangaben.xml&amp;quot;)));

            XslCompiledTransform transform = new XslCompiledTransform();
            transform.Load(XmlReader.Create(Server.MapPath(@&amp;quot;/App_Data/KontaktFormatierung.xsl&amp;quot;)));
            transform.Transform(x.BaseURI, Server.MapPath(@&amp;quot;/App_Data/Result.xml&amp;quot;));

            // Loading the generated result file
            string[] xmlResult = File.ReadAllLines(Directory.GetFiles(Server.MapPath(@&amp;quot;/App_Data&amp;quot;)).ToList().Where(f =&amp;gt; f.ToLower().Contains(&amp;quot;result&amp;quot;)).FirstOrDefault());
            
            xmlResult.ToList().ForEach(s =&amp;gt;
                                           {
                                               ResultDiv.InnerHtml += s;
                                           });
            
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;Zu guter letzt soll das Ganze auch ein wenig ansprechend aussehen. Dies machen wir wie gewohnt über CSS. Die folgenen Styles werden nachfolgend aufgeführt:&lt;/p&gt;
&lt;pre class="brush: css; title: ; notranslate"&gt;
th 
{
    font-size: x-large;
    font-family: cursive;
    background-color: silver;  
    padding: 2px;    
}

td 
{
    font-size:medium;
    font-style: normal;
    border: thin solid black;
}
&lt;/pre&gt;
&lt;p&gt;Wie wir sehen gibt es immer mehrere Wege nach Rom und das Ganze, ach Microsoft will C# etc. abschaffen und nur noch Richtung JavaScript gehen, eher übertrieben. Es kommt immer noch auf uns Entwickler an wie wir eine Lösung zu einem Problem finden.&lt;/p&gt;
&lt;p&gt;Anhand dieses einfachen Beispiels sehen wird, dass es möglich ist für ein Problem die eine oder andere Lösung zu wählen, je nachdem was einem beliebt.&lt;/p&gt;
&lt;p&gt;Für Anregungen und Kritik bin ich gerne offen&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f10%2f23%2fvorlagen-mal-anders%2f"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f10%2f23%2fvorlagen-mal-anders%2f" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/453/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/453/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=453&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2011/10/23/vorlagen-mal-anders/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f10%2f23%2fvorlagen-mal-anders%2f" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/09/26/asynchrone-programmierung-nach-synchroner-art.html</guid>
      <link>http://www.databinding.net/blog/post/2011/09/26/asynchrone-programmierung-nach-synchroner-art.html</link>
      <author> (René)</author>
      <title>Asynchrone Programmierung nach synchroner Art</title>
      <description>Die asynchrone Programmierung mit Callbacks erfordert schon ein wenig mehr Disziplin. Mit der TPL begann der Schritt darin die Programmierung und die Fehlerbehandlung dahin gehend zu vereinfachen. In...</description>
      <pubDate>Mon, 26 Sep 2011 21:32:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Die asynchrone Programmierung mit Callbacks erfordert schon ein wenig mehr Disziplin. Mit der TPL begann der Schritt darin die Programmierung und die Fehlerbehandlung dahin gehend zu vereinfachen. &lt;/p&gt; &lt;p&gt;In der kommenden .NET-Version kommen nun auch async und await hinzu, um asynchronen Code einfacher zu machen. Damit eine Methode asynchron verwendet werden kann, reicht künftig der async-Bezeichner. Innerhalb der Methode ersetzt await den Callback-Code. Dies hat positive Auswirkungen auf den Lesefluss, es gibt aber auch Herausforderungen. Und diese habe ich einem Mindmap festgehalten. &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/09/21/metaprogramming-in-net.html</guid>
      <link>http://www.databinding.net/blog/post/2011/09/21/metaprogramming-in-net.html</link>
      <author> (René)</author>
      <title>Metaprogramming in .NET</title>
      <description>Es gibt viele Ansätze, um mehr Flexibilität in den Entwicklungsprozess zu bekommen, einer davon ist Metaprogrammierung. Dabei handelt es sich meist um ein zusätzliches Level in Softwaresystemen, das ...</description>
      <pubDate>Wed, 21 Sep 2011 05:41:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Es gibt viele Ansätze, um mehr Flexibilität in den Entwicklungsprozess zu bekommen, einer davon ist Metaprogrammierung. Dabei handelt es sich meist um ein zusätzliches Level in Softwaresystemen, das zu mehr Flexibilität beitragen soll. In .NET gibt es dafür mehrere Ansätze. Aus diesem Grund habe ich damit angefangen, ein Mindmap zu erstellen, da mich das Thema schon seit längeren interessiert und in diversen Projekten auf die eine oder andere Weise begleitet hat. &lt;/p&gt; &lt;p&gt;Neben T4 wird aus meiner Sicht auch das Rosyln-Projekt ein interessanter Kandidat werden, weil es die typischen Anforderungen wie lesender, schreibender Zugriff ermöglicht und durch die Kombination mit statischem Code die Änderung der Semantik zulassen soll. Bin gespannt. &lt;/p&gt; &lt;p&gt;Leider wird die CTP erst Mitte Oktober bereitgestellt, werde auf jeden Fall damit spielen. ;-) Aktuell gibt es einen kleinen Ausblick im 3. Teil der Build-Präsentation &lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-816T" title="Wechselt zur Channel 9 Seite" class="external-link-new-window"&gt;Future directions for C# and Viusal Basic &lt;/a&gt;&amp;nbsp;&amp;nbsp;von Anders Hejlsberg (ab der 40. Minute).&amp;nbsp; &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/09/19/entity-framework-4-der-designer-stottert-bei-zusammengesetzten-schluesseln-compositekey.html</guid>
      <link>http://www.databinding.net/blog/post/2011/09/19/entity-framework-4-der-designer-stottert-bei-zusammengesetzten-schluesseln-compositekey.html</link>
      <author> (René)</author>
      <title>Entity Framework 4 - Der Designer stottert bei zusammengesetzten Schlüsseln (CompositeKey)</title>
      <description>Heute wurde ich mit einem interessanten Problem im Entity Designer bei zusammengesetzten Schlüsseln konfrontiert. Das Modell wurde mit dem Assistenten angelegt. Dabei war die Einstellungen &amp;quot;Fremdschl...</description>
      <pubDate>Mon, 19 Sep 2011 22:28:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Heute wurde ich mit einem interessanten Problem im Entity Designer bei zusammengesetzten Schlüsseln konfrontiert. Das Modell wurde mit dem Assistenten angelegt. Dabei war die Einstellungen &amp;quot;Fremdschlüsselspalten in das Modell einbeziehen&amp;quot; aktiviert und es wurde die Standard-Code Generierungsvorlage verwendet. &lt;/p&gt; &lt;p&gt;Das Modell hatte in etwa folgenden Aufbau: &lt;/p&gt; Abbildung 1 Teilmodell im Entity Framework mit Composite Key &lt;a href="http://www.databinding.net/uploads/pics/EFModell.PNG" title="Abbildung 1 Teilmodell im Entity Framework mit Composite Key" rel="lightbox[lb710]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/9b5e091588.png" width="500" height="288" border="0" alt="Abbildung 1" /&gt; &lt;/a&gt; &lt;p&gt;Der erste Test, der sich mit dem Einfügen von Daten in die Datenbank befasste, scheiterte und lieferte folgendes Resultat: &lt;/p&gt; Abbildung 2 Insert-Test schlägt fehl, bei Entitäten mit Composite Key &lt;a href="http://www.databinding.net/uploads/pics/inserttestfailed.PNG" title="Abbildung 2 Insert-Test schlägt fehl, bei Entitäten mit Composite Key" rel="lightbox[lb711]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/d118ac7971.png" width="500" height="426" border="0" alt="Abbildung 2" /&gt; &lt;/a&gt; &lt;p&gt;Die passende Fehlermeldung dazu lautet: &lt;/p&gt; &lt;p&gt;Die Personen.Test.CommentTest.Comment_Insert_Test-Testmethode hat eine Ausnahme ausgelöst: System.Data.UpdateException: EntitySet 'Comment' kann nicht aktualisiert werden, denn es hat eine DefiningQuery, und im &amp;lt;ModificationFunctionMapping&amp;gt;-Element ist kein &amp;lt;InsertFunction&amp;gt;-Element zur Unterstützung des aktuellen Vorgangs vorhanden. &lt;/p&gt; &lt;p&gt;Im ersten Moment beginnt das überlegen, DefiningQuery? Warum legt der Designer ein DefiningQuery für diese Tabelle an? In diesem Fall kann der Insert-Mechanismus gar nicht funktionieren, weil keine Prozeduren vorhanden sind. Ein Blick in das XML (Öffnen mit XML Text Editor) bestätigt auch die Fehlermeldung: &lt;/p&gt; &amp;lt;edmx:StorageModels&amp;gt; &amp;lt;Schema Namespace=&amp;quot;Model.Store&amp;quot; Alias=&amp;quot;Self&amp;quot; Provider=&amp;quot;System.Data.SqlClient&amp;quot; ProviderManifestToken=&amp;quot;2008&amp;quot; xmlns:store=&amp;quot;http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator&amp;quot; xmlns=&amp;quot;http://schemas.microsoft.com/ado/2009/02/edm/ssdl&amp;quot;&amp;gt; &amp;lt;EntityContainer Name=&amp;quot;ModelStoreContainer&amp;quot;&amp;gt; &amp;lt;EntitySet Name=&amp;quot;Comment&amp;quot; EntityType=&amp;quot;Model.Store.Comment&amp;quot; store:Type=&amp;quot;Tables&amp;quot; store:Schema=&amp;quot;dbo&amp;quot; store:Name=&amp;quot;Comment&amp;quot;&amp;gt; &amp;lt;DefiningQuery&amp;gt;SELECT [Comment].[PersonID] AS [PersonID], [Comment].[CommentTypeID] AS [CommentTypeID], [Comment].[Note] AS [CO_Note] FROM [dbo].[Comment] AS [Comment]&amp;lt;/DefiningQuery&amp;gt; &amp;lt;/EntitySet&amp;gt; &lt;p&gt;Prozeduren will ich für dieses Szenario auf keinen Fall generieren, also bleibt mir nichts anderes übrig, als das XML anzupassen. Dazu gehe ich folgendermassen vor: &lt;/p&gt; &lt;ol&gt; &lt;li&gt;DefinigQuery-Tag mit Inhalt entfernen &lt;/li&gt; &lt;li&gt;store:Name=&amp;#x201c;Comment&amp;#x201c; entfernen &lt;/li&gt; &lt;li&gt;store:Schema=&amp;#x201c;dbo&amp;#x201c; ändern in Schema=&amp;#x201c;dbo&amp;#x201c; &lt;/li&gt; &lt;li&gt;XML-Datei speichern &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Ist das Ganze angepasst, bleibt folgendes XML übrig: &lt;/p&gt; &amp;lt;EntitySet Name=&amp;quot;Comment&amp;quot; EntityType=&amp;quot;Model.Store.Comment&amp;quot; store:Type=&amp;quot;Tables&amp;quot; Schema=&amp;quot;dbo&amp;quot; &amp;gt; &amp;lt;/EntitySet&amp;gt; &lt;p&gt;Zur Sicherheit wird das File im Designer geöffnet und validiert. Nach dieser Anpassung wird der Test erneut ausgeführt und der Einfüge-Test läuft nun fehlerfrei. &lt;/p&gt; Abbildung 3 Test nach Anpassung der XML-Datei &lt;a href="http://www.databinding.net/uploads/pics/inserttestsuccess.PNG" title="Abbildung 3 Test nach Anpassung der XML-Datei" rel="lightbox[lb716]"&gt; &lt;img src="http://www.databinding.net/typo3temp/pics/0c04ea2fec.png" width="500" height="322" border="0" alt="Abbildung 3" /&gt; &lt;/a&gt; &lt;p&gt;Daraus lässt sich schliessen, dass auch im Entity Framework 4 ein wenig Basiswissen zum Aufbau der XML-Datei nicht schaden kann. Den Nachteil dieser Variante will ich auch nicht vorenthalten. Mit jeder Modell-Anpassung müssen diese Schritte wiederholt werden. &lt;/p&gt; &lt;p&gt;Dieses Problem kann bei der codezentrierten Anwendungsentwicklung mit dem DbContext sicherlich auch entstehen, da der DbContext das XML zur Laufzeit erstellt. Dann besteht nicht die einfache Möglichkeit, dass XML anzupassen. Wer mit anderen Datenbanken wie zum Beispiel MySQL im codezentrierten Ansatz gearbeitet hat, kennt sicherlich die Probleme jenseits des dbo-Schemas. ;-) &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=429</guid>
      <link>http://schaedlerdaniel.wordpress.com/2011/09/18/asp-net-optimization-bundling/</link>
      <category>ASP.NET /AJAX /ASP.NET MVC</category>
      <category>ASP.NET 4.0</category>
      <category>ASP.NET 4.5</category>
      <category>ASP.NET Optimization</category>
      <category>CSS Minifiyng</category>
      <category>CSS minimieren</category>
      <category>JavaScript</category>
      <category>JavaScript / HTML /CSS /XML</category>
      <category>JavaScript Minifying</category>
      <category>JavaScript Minimierung</category>
      <title>ASP.NET Optimization Bundling</title>
      <description>Im ganzen HTML 5/ CSS3 etc. Gepredige habe ich doch noch was gefunden was im ASP.NET 4.5 kommen wird. Nun wenn man NuGet mal durchsucht, dann wird man es auch für ASP.NET 4.0 finden. Das Optimization Bundling (Im .NET 4.0 wird es mit Microsoft.Web.Optimization,
 und dann später mit System.Web.Optimization referenziert). Das Video ASP.NET 4.5 loves [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=429&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Sun, 18 Sep 2011 10:08:26 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2011/09/18/asp-net-optimization-bundling/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;Im ganzen HTML 5/ CSS3 etc. Gepredige habe ich doch noch was gefunden was im ASP.NET 4.5 kommen wird. Nun wenn man NuGet mal durchsucht, dann wird man es auch für ASP.NET 4.0 finden. Das Optimization Bundling (Im .NET 4.0 wird es mit Microsoft.Web.Optimization, und dann später mit System.Web.Optimization referenziert). Das Video &lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-796T" target="_blank"&gt;ASP.NET 4.5 loves HTML5, CSS3 &amp;amp; JavaScript&lt;/a&gt; habe ich als sehr informativ empfunden, obwohl nicht wirklich viel neues kommt, oder die Änderunge nicht gerade revolutionär sind.&lt;/p&gt;
&lt;p&gt;Damit ich das Pack auch produktiv nutzen kann, habe ich es mal analog dem Video nachgespielt, damit ich, falls ich in meinem gesetzten Alter, nicht mehr alles auswendig weiss, nachlesen kann. Also anfangen, ich von meiner Warte aus entwickle immer noch mit ASP.NET WebForms entgegen dem Hype zu MVC. Also starten wir wie folgt, indem wir eine neue WebForms Solution erstellen.&lt;/p&gt;
&lt;p&gt;Kurzübersicht was wir alles machen werden&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Erstellen einer ASP.NET 4.0 Solution&lt;/li&gt;
&lt;li&gt;Installation des Optimization Bundling per NuGet&lt;/li&gt;
&lt;li&gt;Analyse Vorher /Nachher&lt;/li&gt;
&lt;li&gt;Fazit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also fangen wir damit an:&lt;/p&gt;
&lt;h3&gt;Erstellen einer ASP.NET Solution&lt;/h3&gt;
&lt;p&gt;Wir starten unser Visual Studio 2010 (Express/Professional/Premium/Ultimae), wählen die Rubrik Web und dann die Vorlage für ASP.NET WebForms. Ein Klick darauf und unsere Solution ist erstellt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://byfiles.storage.live.com/y1pTvdxKpi-cdwvi_KtR87IIh3rbIPackUG9rf1fO-VGOT_9sboltT0YI6kSp7RmyVGTdNbRmIfCpA/Frisch%20erstelle%20Solution%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" /&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;h3&gt;Installieren des ASP.NET Optimization &amp;#8211; Bundling&lt;/h3&gt;
&lt;p&gt;Ist eigentlich keine Hexerei und kann bequem über NuGet erfolgen, dass dann alle notwendigen Schritte übernimmt, und auch die Referenzen im Projekt richtig setzt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://byfiles.storage.live.com/y1pHL7UKB50SawiDa3qLnxkn7DE_q2XFgJ7QdrM4XpHQtUzAa3c6Rl0PgFG1q1N0KTRbB9IqgKsuVI/NuGet%20Package%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" /&gt;&lt;/p&gt;
&lt;p&gt;Nach der Installation ist alles bereit, damit wir unsere ASP.NET Lösung optimieren können&lt;/p&gt;
&lt;h3&gt;Analyse  Vorher /Nachher&lt;/h3&gt;
&lt;p&gt;In diesem kleinen Beispiel hole ich per XHTML-Request drei Personen aus meinem Model und zeige diese an (der XHTML Request kann in seiner Dauer variieren, da interessiert uns die Zeit primär erstmal nicht.) Starten wir die jungfräuliche Solution und drücken im IE9 die Developer Tools mit F12 sehen wir folgende Verkehr:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://byfiles.storage.live.com/y1pKIRQl4cRQj_vGMJ64It_WBoX5oKx2urrwgqasVE7cChTrVUfUgUXWMr9cY9l4ZcNjD73Aia9vz8/IE9%20Network%20Traffic%20before%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" /&gt;&lt;/p&gt;
&lt;p&gt;Interssant sind folgende zwei Punkte&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/Styles/Site.css&lt;/li&gt;
&lt;li&gt;/Scripts/jquery-1.4.4.min.js&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nun, da wir das Optimization Pack bereits mit NuGet installiert haben, entfällt eine Referenz darauf, denn diese ist bereits vorhanden. Was wir noch machen müssen ist in der Global.asax dafür sorgen, dass die Dateien auch wirklich gebündelt übertragen werden. &lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
        void Application_Start(object sender, EventArgs e)
        {
            BundleTable.Bundles.EnableDefaultBundles();
            Bundle myBundle = new Bundle(&amp;quot;~/Scripts&amp;quot;, typeof(JsMinify));
            myBundle.AddFile(&amp;quot;~/Scripts/jquery-1.4.4.min.js&amp;quot;);
            myBundle.AddFile(&amp;quot;~/Scripts/PersonScript.js&amp;quot;);
        }
&lt;/pre&gt;
&lt;p&gt;Anschliessend passen wir in der Site.Master die Referenz auf JQuery an:&lt;/p&gt;
&lt;p&gt;Vorher:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;Scripts/jquery-1.4.4.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;Nachher:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;Scripts/js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;Anschliessend starten wir unsere Solution wieder und analysieren mit den Developer Tools nocheinmal den Netzwerk-Verkehr. Und siehe da, die zwei vorherigen Kandidaten (Scripts und CSS) haben einen kleinen Hypersprung ausgefürht&lt;/p&gt;
&lt;p&gt;&lt;img src="https://byfiles.storage.live.com/y1pBqMsDvfJXHP2Y4yzhEMMGhNBlRNX2okDUnkQgMEmH4qatz09s-eNWaHe5zPz1pjU0NRts_1G6ds/IE9%20Network%20Traffic%20after%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" /&gt;&lt;/p&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;
&lt;p&gt;Wir haben einen Performance Anstieg erhalten, der unsere Webseite schneller übertragen lässt. In diesem sehr, sehr kleinen Beispiel und auch dem localhost mögen die Einsparungen vielleicht nicht enorm sein, betrachtet es man aber so, dass viele Wege zu einer Webseite führen können und nicht immer alles übertragen wird (Package los), dann ist dies sicher ein guter Weg die Daten zu komprimieren.&lt;/p&gt;
&lt;p&gt;
Bei sehr vielen JavaScript- und CSS-Dateien lohnt es sich auf alle Fälle. Die Demo Lösung kann &lt;a href="https://skydrive.live.com/?cid=ce67b0bb158a026d&amp;amp;sc=documents&amp;amp;id=CE67B0BB158A026D%214391" target="_blank"&gt;hier&lt;/a&gt; heruntergeladen werden. (Das MVC Beispiel wird im Video erläuter, sodass ich dies nicht erstellt habe.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f09%2f18%2fasp-net-optimization-bundling%2f"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f09%2f18%2fasp-net-optimization-bundling%2f" border="0" alt="kick it on dotnet-kicks.de" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/429/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/429/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=429&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2011/09/18/asp-net-optimization-bundling/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
      <media:content url="https://byfiles.storage.live.com/y1pTvdxKpi-cdwvi_KtR87IIh3rbIPackUG9rf1fO-VGOT_9sboltT0YI6kSp7RmyVGTdNbRmIfCpA/Frisch%20erstelle%20Solution%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" medium="image" xmlns:media="http://search.yahoo.com/mrss/"></media:content>
      <media:content url="https://byfiles.storage.live.com/y1pHL7UKB50SawiDa3qLnxkn7DE_q2XFgJ7QdrM4XpHQtUzAa3c6Rl0PgFG1q1N0KTRbB9IqgKsuVI/NuGet%20Package%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" medium="image" xmlns:media="http://search.yahoo.com/mrss/"></media:content>
      <media:content url="https://byfiles.storage.live.com/y1pKIRQl4cRQj_vGMJ64It_WBoX5oKx2urrwgqasVE7cChTrVUfUgUXWMr9cY9l4ZcNjD73Aia9vz8/IE9%20Network%20Traffic%20before%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" medium="image" xmlns:media="http://search.yahoo.com/mrss/"></media:content>
      <media:content url="https://byfiles.storage.live.com/y1pBqMsDvfJXHP2Y4yzhEMMGhNBlRNX2okDUnkQgMEmH4qatz09s-eNWaHe5zPz1pjU0NRts_1G6ds/IE9%20Network%20Traffic%20after%20ASP.NET%20Optimization%20Bundling.jpg?psid=1" medium="image" xmlns:media="http://search.yahoo.com/mrss/"></media:content>
      <media:content url="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fschaedlerdaniel.wordpress.com%2f2011%2f09%2f18%2fasp-net-optimization-bundling%2f" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">kick it on dotnet-kicks.de</media:title>
      </media:content>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634514472000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634514472000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634514472000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>Das Agile Development Framework (ADF)</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2 id="x_20010912"&gt;Montag, 12. September 2011 (18:00 bis 22:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;Das Agile Development Framework (ADF) mit Golo Roden&lt;/h3&gt;
&lt;p&gt;Am Montag, den 12. September 2011 wird uns Golo Roden durch das Thema &amp;quot;Das Agile Development Framework (ADF)&amp;quot; führen. Doch bevor wir mit den Thema beginnen, wird uns
&lt;a href="https://www.xing.com/profile/Stefan_Stegmueller"&gt;Stefan&lt;/a&gt; einen Überblick in die
&lt;strong&gt;Kinect-Programmierung&lt;/strong&gt; geben. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract ADF: &lt;/strong&gt;&lt;br&gt;
Bestehende agile Methoden wie Scrum und Extreme Programming (XP) bedienen verschiedene Zielgruppen und Aspekte der Softwareentwicklung. Daher werden sie in der Regel kombiniert, um ein umfassendes Rahmenwerk zu erhalten – dies ist jedoch aufwändig, fehleranfällig
 und erfordert viel Erfahrung. &lt;/p&gt;
&lt;p&gt;Zudem enthält jede der bestehenden agilen Methoden Aspekte, die kritisch oder wenig praktikabel sind – wie beispielsweise die Forderung von XP nach dem generellen Programmieren in Paaren. Was also fehlt ist ein umfassendes Rahmenwerk, das die erfolgreichen
 Elemente der bestehenden agilen Methoden vereint, das jedoch – wenn erforderlich – auch eigene Wege einschlägt.
&lt;/p&gt;
&lt;p&gt;Das Agile Development Framework (ADF) ist eine mehrstufige, den gesamten Entwicklungsprozess und alle beteiligten Rollen umfassende Stream-basierte agile Methode für vereinte, verstreute und verteilte Teams zur flexiblen, konstruktiven und evolutionären
 Entwicklung qualitativ hochwertiger Software. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Über Golo Roden&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://www.goloroden.de"&gt;Golo Roden&lt;/a&gt; ist freiberuflicher Wissensvermittler und Technologieberater für .NET, Codequalität und agile Methoden. Zu diesen Themen berät er Firmen bei der Evaluierung, Erforschung und Verwendung geeigneter Technologien
 und Methoden. Darüber hinaus ist er journalistisch für Fachzeitschriften und als Referent und Content Manager für Konferenzen tätig. Für sein qualitativ hochwertiges Engagement in der Community wurde Golo von Microsoft als Most Valuable Professional (MVP)
 für C# ausgezeichnet. &lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a class="x_external" title="Zur Anmeldung auf Xing" href="https://www.xing.com/events/agile-development-framework-adf-golo-roden-798758"&gt;
Anmeldung&lt;/a&gt; erforderlich ist. &lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbeadf&lt;/strong&gt;. Die Aktivitäten können während der Veranstaltung
&lt;a title="Zum Twitter Stream der Veranstaltung" href="TwitterWall.aspx"&gt;hier&lt;/a&gt; betrachtet werden.
&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf deine Teilnahme! &lt;/p&gt;
&lt;br&gt;
</description>
      <pubDate>Mon, 12 Sep 2011 18:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/09/07/entity-framework-praesentationen.html</guid>
      <link>http://www.databinding.net/blog/post/2011/09/07/entity-framework-praesentationen.html</link>
      <author> (René)</author>
      <title>Entity Framework Präsentationen</title>
      <description>Die TechDays 2011 in Basel liegen schon einige Zeit zurück und wir haben es als .NET User Group Bern nun endlich geschafft, einen kleinen Rückblick online zu stellen. Johnny hat schon vor längerer Ze...</description>
      <pubDate>Wed, 07 Sep 2011 23:24:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Die TechDays 2011 in Basel liegen schon einige Zeit zurück und wir haben es als .NET User Group Bern nun endlich geschafft, einen &lt;a href="http://dnug-bern.ch/events/techdays2011.aspx" class="external-link-new-window"&gt;kleinen Rückblick &lt;/a&gt; online zu stellen. &lt;/p&gt; &lt;p&gt;Johnny hat schon vor längerer Zeit seine Eindrücke&amp;nbsp;in &lt;a href="http://graberj.wordpress.com/2011/05/14/techdays-2011-in-basel/" class="external-link-new-window"&gt;einem Beitrag &lt;/a&gt;festgehalten. &lt;/p&gt; &lt;p&gt;Eigentlich hatte ich vor die Tipps und Tricks zum Entity Framework stückchenweise als Beiträge zu veröffentlichen, aber auch für mich gilt das Gesetz: Der Tag hat 24 Stunden. ;-) In dieser Hinsicht nutze ich den Beitrag, um die Techdays-Präsentationen zu verlinken. &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Entity Framework - &lt;a href="http://download.microsoft.com/download/4/6/3/4638FC67-AB31-4AE6-BBE0-9C4D58AFF669/TD11BL29.pptx" class="external-link-new-window"&gt;Ein Überblick &lt;/a&gt; &lt;/li&gt; &lt;li&gt;Entity Framework - &lt;a href="http://download.microsoft.com/download/4/6/3/4638FC67-AB31-4AE6-BBE0-9C4D58AFF669/TD11BL44.pptx" class="external-link-new-window"&gt;Tipps und Tricks &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Für mich waren die TechDays auch eine lehrreiche Erfahrung, denn im Vergleich zu unseren User Group-Events stand ich einerseits vor viel mehr Personen mit unterschiedlichen Kenntnisstand, andererseits wollte ich auch viel Wissen in die 60 min. packen. Das hatte natürlich Auswirkungen auf die Demo&amp;#x2019;s, es waren nicht so viele. *fg*, also lag ich im Level 200.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Level 200, da hatten einige ihre Mühe mit der Erwartungskonformität. Während man von Webcasts her&amp;nbsp;die Skala 100, 200, 300 als Beginner, Fortgeschritten und Profi gewohnt ist, war die Bedeutung bei den TechDays: Keine Demos (100), Wenige Demos (200) und Live-Demo (300). &lt;/p&gt; &lt;p&gt;In Entwickler verunsichern, da ist Microsoft zurzeit auf Platz 1. Da ist diese Skala noch das kleinere Übel. ;-) &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="false">http://schaedlerdaniel.wordpress.com/?p=417</guid>
      <link>http://schaedlerdaniel.wordpress.com/2011/08/21/mein-erstes-mal/</link>
      <category>Allgemein</category>
      <title>Mein erstes Mal….</title>
      <description>an der See # Party in Kreuzlingen war super und ich werde auf jeden fall, sollte sie auch nächstes Jahr statt finden wieder hingegen Wieso denn? Ganz einfach man sieht dort wirklich alle die in der Community aktiv sind und mit denen man per Facebook, Twitter
 oder irgendeinem Social Tool in Kontakt steht und kann [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;amp;blog=16378069&amp;amp;post=417&amp;amp;subd=schaedlerdaniel&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;</description>
      <pubDate>Sun, 21 Aug 2011 10:00:04 Z</pubDate>
      <comments>http://schaedlerdaniel.wordpress.com/2011/08/21/mein-erstes-mal/#comments</comments>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">schaedlerdaniel</dc:creator>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">&lt;p&gt;an der &lt;a href="http://www.seesharpparty.de/de/Start/page38393.htm" title="See # Party" target="_blank"&gt;See # Party&lt;/a&gt; in Kreuzlingen war super und ich werde auf jeden fall, sollte sie auch nächstes Jahr statt finden wieder hingegen &lt;/p&gt;
&lt;p&gt;Wieso denn? Ganz einfach man sieht dort wirklich alle die in der Community aktiv sind und mit denen man per Facebook, Twitter oder irgendeinem Social Tool in Kontakt steht und kann ein wenig fachsimpeln oder auch über Gott und die Welt reden. Schon fast familiäre Stimmung &lt;/p&gt;
&lt;p&gt;
&lt;h1&gt;Welche Session&amp;#8217;s habe ich den besucht?&lt;/h1&gt;
&lt;/p&gt;
&lt;p&gt;Da die Autofahr ziemlich reibungslos verlief, trudelten ich und mein Fahrer bereits um 07.45 Uhr in Kreuzlingen ein. Ein bisschen früh für den Einlass. &lt;/p&gt;
&lt;p&gt;Um 08.25 Uhr blickten wir noch mal rein und konnten uns dann die Badges für SFr. 110.&amp;#8211; (was ich für einen sehr günstigen Preis halte) abholen. &lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;Begrüssungsfazit&lt;/h2&gt;
&lt;/p&gt;
&lt;p&gt;War nicht so show geladen wie an den Techdays und dass macht die Veranstaltung auch so sympathisch! Weiter so Jungs!&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;Keynote&lt;/h2&gt;
&lt;/p&gt;
&lt;p&gt;Die Keynote war mal ein ganz anderes Thema als, C#, Silverlight und dergleichen. Es ging um den Stress den man sich selber machen kann, oder der durch äussere Faktoren ausgelöst wird. Sehr interessant fand ich dann auch wie sich der Wandel in der IT-Branche vollzogen hat (bis auf ein paar Namensänderungen der Ziele und Verschiebung unter den Top 15 Themen gabs keine grossen Wandel).
&lt;p&gt;Nun ja, da ich meine Mail&amp;#8217;s erst am Morgen und dann wieder am Abend kontrolliere und mein Handy so oder so auf lautlos eingestellt ist, hält sich mein Stressfaktor zum Glück in Grenzen. &lt;/p&gt;
&lt;p&gt;Danach mal den Plan hervorgenommen und die Session&amp;#8217;s gemerkt. Lustigerweise hatte ich 4 mal die Gelegenheit im gleichen Raum die Vorlesungen zu geniessen, was wiederum der Suche für die Örtlichkeit der nächsten Session, erheblich vereinfacht.&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;Die Sessions&lt;/h2&gt;
&lt;p&gt;&lt;p&gt;Beruflich habe ich eigentlich immer mit &lt;a href="http://www.asp.net" target="_blank"&gt;ASP.NET WebForms&lt;/a&gt; zu tun. Da auch ich im Wandel bin habe ich die Sessions die sich mit ASP.NET befassten aussen vor gelassen und richtetet meinen Fokus eher Silverlight, XAML, Workflow Foundation.&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;XAML Deep Dive &amp;#8211; Mehr als nur WPF&lt;/h3&gt;
&lt;/p&gt;
&lt;p&gt;Dieser Vortrag war sehr lehrreich. Ich fand es super, dass die Einsatzmöglichkeiten von XAML, auch ausserhalb von WPF /Silverlight /Workflow Foundation verwendet werden kann und es ein offener Standard ist. Mein Fazit zu dieser Session: Gut&lt;/p&gt;
&lt;p&gt;Falls man die Folien nicht herunterladen kann, findet man auf &lt;a href="http://www.neovelop.de/blog/xaml-mehr-als-nur-eine-einfache-beschreibungssprache" Title="XAML mehr als nur WPF" target="_blank"&gt;XAML &amp;#8211; Mehr als nur eine einfache Beschreibungssprache&lt;/a&gt; einen sehr guten Blogartikel.&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;Windows Communication Foundation 4.0 &amp;#8211; Die Neuerungen&lt;/h3&gt;
&lt;/p&gt;
&lt;p&gt;Die Session hat sich mit den Neuerungen der Windows Communication Foundation 4.0 befasst und deren Änderungen die eingeflossen sind. Die Codebeispiele, liefen zu 80%. Es war für mich in dieser Hinsicht schade dass nicht alles funktioniert hat, aber einen positiven Teil kann man dem Ganzen auch abgewinnen: So qualifiziert und auch hohes Fachwissen die Speaker auch habe, auch sie sind Menschen denen Fehler passieren können und das ist sicherlich auch ein guter Aspekt. Schön fand ich wie die einzelnen WCF Neuerungen vorgeführt worden sind. Der Router blieb mir besonders, wegen Performanceeinschränkunen wenn man nicht alles bachtet im Gedächtnis und ich denke dass man dann diesen auch eher seltener einsetzen wird.&lt;/p&gt;
&lt;p&gt;Mein Fazit zu dieser Session: Gut (Ich wusste gar nicht das hochdeutsch eine gleiche Geschwindigkeit wie Französisch an den Tag legen kann &lt;img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt;  )&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;Accessebility&lt;/h3&gt;
&lt;/p&gt;
&lt;p&gt;Auf diese Session habe ich mich besonders gefreut, zumal man den Jürgen mal live sehen konnte. Die Aspekte unter welchen man eine barriere freie Webseite baut sind sehr gut dargestellt worden. Auch die anschliessende Diskussion und Fragerunde war sehr aufschluss- und lehrreich. Was habe ich für mich mitgenommen? Am besten Back to the roots, die Webseite in purem HTML erstellen und dynamische Inhalte soweit es geht per CSS zu erstellen. Eine weitere Erkenntnis von mir auch ist dass ASP.NET WebForms eher weniger dazu geeignet ist mit den Boardmitteln einen solche barriere freie Webseite zu erstellen, da muss man eben bei der Generierung der Controls auf der Seite Einfluss nehmen und so kann man in ASP.NET MVC das Ziel einer barriere freien optimaler erreichen.&lt;/p&gt;
&lt;p&gt;Mein Fazit zu dieser Session: Gut (ein paar Einstiegslacher lockerten das ganze ein wenig auf (obwohl es wohl Insiderlacher von Jürgen und Karsten waren)).&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;User Interface Pattern mit Silverlight&lt;/h3&gt;
&lt;/p&gt;
&lt;p&gt;Eigentlich hätte ich es mir sparen können diese Session zu besuchen&amp;#8230;. Dachte ich zumindest in den ersten 5 Minuten. Aber weit gefehlt: Denn es ist immer wieder gut wenn man die Do&amp;#8217;s und Dont&amp;#8217;s der UI-Erstellung auf erfrischende Art präsentiert bekommt. Der Sprecher war sehr versiert und auch die Fokusierung von Inhalten durch das menschliche Auge hat, hat mir einen anderen Einblick gegeben.&lt;/p&gt;
&lt;p&gt;Rein theoretisch hätte man aber nicht unbedingt &lt;a href="http://www.silverlight.net" title="Silverlight" target="_blank"&gt;Silverlight&lt;/a&gt; nehmen müssen.&lt;/p&gt;
&lt;p&gt;Mein Fazit zu dieser Session: Gut &lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;Workflow Foundation 4.0&lt;/h3&gt;
&lt;/p&gt;
&lt;p&gt;Das Ziel war eine Getting Started Session zu machen die einen Einblick in die Workflow Fondatin 4.0 bieten soll. Dieser Einblick ist nur teilweise geglückt. Dies hat zum einen damit zu tun, dass Features die selbstverständlich sind, also das suchen von Namepsaces à la Expression Blend, nicht wirklich neu waren. Es hätte mir auch mehr gefallen, wenn man eventuell nicht dass klassische Hellow World Beispiel genommen hätte, sonder ein wenig einen kleinen Geschäftsfall erstellt hätte.&lt;/p&gt;
&lt;p&gt;Mein Fazit zu dieser Session: Schlecht&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;Schlusswort&lt;/h3&gt;
&lt;/p&gt;
&lt;p&gt;Ich finde es war ein gelungeren Anlass und es hätte auch paar mehr Entwickler kommen können. Meiner Meinung hat ausser berufliche Besuch an einer Koferenz nicht&amp;#8217;s mit Geek zu tun sondern mit Interesse an der Arbeit die man macht. Ein Koch der leidenschaftlich kocht, der wird auch zuhause noch gerne kochen und sich auch ausserhalb der Arbeitszeit weiter bilden, weil es ihm Spass macht. Wenn man das nun so auf die Entwickler abmüntzen möchte, dann könnte man es überspitzt sagen, dass diese den Job gar nicht gerne machen (ich weiss es ist überspitzt, aber ich denke dass entspricht so dem Wahrheit). &lt;/p&gt;
&lt;p&gt;Auch möchte ich erwähnen dass die geübte Kritik an den Sessions keinesfalls persönlich gemeint sind. Ich selber könnte nicht vor so vielen reden ohne Schweissperlen zu entwickeln, also jedem der vor so vielen Leuten redet, der ist schon, unabhängig von der Kritik, ein Gewinner. &lt;/p&gt;
&lt;p&gt;Es würde mich sehr freuen, wenn auch nächstes Jahr wieder eine See # Party statt finden und vielleicht ein wenig mehr Entwickler den Weg dorthin finden würden.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/schaedlerdaniel.wordpress.com/417/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/schaedlerdaniel.wordpress.com/417/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=schaedlerdaniel.wordpress.com&amp;#038;blog=16378069&amp;#038;post=417&amp;#038;subd=schaedlerdaniel&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</content:encoded>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://schaedlerdaniel.wordpress.com/2011/08/21/mein-erstes-mal/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments>
      <media:content url="http://2.gravatar.com/avatar/e50530c3e478a8a210b7df39006fdc68?s=96&amp;d=identicon&amp;r=G" medium="image" xmlns:media="http://search.yahoo.com/mrss/">
        <media:title type="html">schaedlerdaniel</media:title>
      </media:content>
    </item>
    <item xml:base="http://www.dnug-bern.ch/Event2011.aspx#634491792000000000">
      <guid isPermaLink="true">http://www.dnug-bern.ch/Event2011.aspx#634491792000000000</guid>
      <link>http://www.dnug-bern.ch/Event2011.aspx#634491792000000000</link>
      <category>.NET User Group Bern Event</category>
      <title>.NETworking Lunch Sharepoint 2010</title>
      <description>
&lt;div style="width:100%; padding:0; border-bottom:1px solid #666; display:block; margin-bottom:16px"&gt;
&lt;img src="http://www.dnug-bern.ch/images/be_silhouette.gif" alt="" style="border:0; float:left"&gt;
&lt;h1 style="margin:0; padding-top:5px; color:#666"&gt;.NET User Group Bern Event&lt;/h1&gt;
&lt;/div&gt;
&lt;br style="clear:left"&gt;
&lt;h2 id="x_20110817"&gt;Mittwoch, 17. August 2011 (12:00 bis 14:00 Uhr)&lt;/h2&gt;
&lt;h3&gt;.NETworking Lunch Sharepoint 2010&lt;/h3&gt;
&lt;p&gt;Wir wollen was Neues ausprobieren und starten unseren ersten .NETworking Lunch. Samuel Zürcher wird uns bei dieser Gelegenheit eine 360° Sicht zum Thema Sharepoint 2010 vermitteln.
&lt;/p&gt;
&lt;p&gt;SharePoint 2010 löst an verschiedenen Orten Euphorie aus. Hält das neue Produkt, was es verspricht? Wie integriert es sich in bestehende IT Umgebungen?
&lt;/p&gt;
&lt;p&gt;Die Rundumsicht: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Was macht SharePoint 2010 überhaupt &lt;/li&gt;&lt;li&gt;Das Instrument zum Verwalten Ihrer Geschäftsinformationen: Enterprise Content Management und Search
&lt;/li&gt;&lt;li&gt;Die Automation Ihrer Geschäftsprozesse: SharePoint Formulare und Workflows &lt;/li&gt;&lt;li&gt;Ihr Web-Auftritt mit SharePoint: Web 2.0 und Social Networks &lt;/li&gt;&lt;li&gt;Die Kontrolle Ihrer Geschäftszahlen: Business Intelligence - und Self Service Dashboard
&lt;/li&gt;&lt;li&gt;Die Integration: Schnittstellen zu Office und Exchange 2010. Kann SharePoint 2010 die Exchange Public Folder ersetzen?
&lt;/li&gt;&lt;li&gt;Architektur und Systemaufbau: Von Single Server bis zur Enterprise Farm &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Samuel Zürcher hat Langjährige Erfahrung mit SharePoint seit der Version 2.0, breites IT Know-how und ist seit über 12 Jahren in der IT tätig. Er ist im Projektmanagement in verschiedenen Projektgrössen und Komplexitätsstufen daheim, kennt sich aber auch
 mit dem innersten Kern von SharePoint aus. Verschiedene Zertifizierungen für SharePoint und der Microsoft Certified Trainer runden sein Profil ab, er ist bereits für SharePoint 2010 zertifiziert (MCTS, MCITP) und ist zudem SharePoint MVP. Er ist der Initiant
 und zusammen mit Stefan Heinz Begründer der &lt;a class="x_external" href="http://www.sharepointcommunity.ch"&gt;
www.sharepointcommunity.ch&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Unser Treffen findet dieses Mal in der Schmiedstube statt. Die Anfahrtdetails sind
&lt;a class="x_external" href="http://www.schmiedstube.com/standort.html"&gt;hier&lt;/a&gt; beschrieben.
&lt;/p&gt;
&lt;p&gt;Bitte beachte, dass für dieses Treffen eine &lt;a href="https://www.xing.com/events/networking-lunch-sharepoint-2010-788983"&gt;
Anmeldung&lt;/a&gt; erforderlich ist und gebe unter Bemerkungen und Hinweise deinen Menüwunsch an (Menu 1 oder Menu 2 (Vegetarisch) ca. CHF 30.-).
&lt;/p&gt;
&lt;p&gt;Das Mittagessen wird von jedem Teilnehmenden direkt vom Restaurant verrechnet und muss vor Ort in bar bezahlt werden.
&lt;/p&gt;
&lt;h3&gt;Abmeldung&lt;/h3&gt;
&lt;p&gt;Bei Nichterscheinen ohne Abmeldung bis 3 Arbeitstage vor dem Anlass werden allfällige Unkosten, die uns dadurch entstehen, bis CHF 50.- weiterverrechnet.
&lt;/p&gt;
&lt;p&gt;Das Twitter-Hashtag für diese Veranstaltung: &lt;strong&gt;#dnugbelunch&lt;/strong&gt;. Die Aktivitäten können
&lt;a title="Zum Twitter Stream der Veranstaltung" href="TwitterWall.aspx"&gt;hier&lt;/a&gt; betrachtet werden.
&lt;/p&gt;
&lt;p&gt;Wir freuen uns auf deine Teilnahme! &lt;/p&gt;
&lt;br&gt;
</description>
      <pubDate>Wed, 17 Aug 2011 12:00:00 +0200</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/08/11/entity-framework-versionierung.html</guid>
      <link>http://www.databinding.net/blog/post/2011/08/11/entity-framework-versionierung.html</link>
      <author> (René)</author>
      <title>Entity Framework Versionierung</title>
      <description>Versionierung ist in manchen Situationen nicht einfach. Ein Beispiel wie das Ganze recht komplex und mühsam für einen Anwender oder Developer werden kann, ist das Entity Framework. Um ein wenig Lich...</description>
      <pubDate>Thu, 11 Aug 2011 10:58:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Versionierung ist in manchen Situationen nicht einfach. Ein Beispiel wie das Ganze recht komplex und mühsam für einen Anwender oder Developer werden kann, ist das Entity Framework. &lt;/p&gt; &lt;p&gt;Um ein wenig Licht ins Dunkel zu bekommen, hat das ADO.NET - Team einen Blogpost verfasst und um Feedback gebeten. Weitere Informationen gibt es &lt;a href="http://blogs.msdn.com/b/adonet/archive/2011/08/09/ef-releases-amp-versioning-call-for-feedback.aspx" title="Blogpost vom ADO.NET Team" class="external-link-new-window"&gt; hier &lt;/a&gt;. &lt;/p&gt; </content:encoded>
    </item>
    <item>
      <guid isPermaLink="true">http://www.dotnet-zentral.ch/?cat=4</guid>
      <link>http://www.dotnet-zentral.ch/?cat=4</link>
      <author>info@dnug-bern.ch</author>
      <category>.NET User Group Bern Veranstaltungshinweis</category>
      <title>Erstes .NET Usergroup Event der .NET User Group Zentralschweiz</title>
      <description>
&lt;div style="background-color:#eee; padding:5px"&gt;
&lt;p&gt;Die UG Zentralschweiz freut sich auf ihr erstes .NET Usergroup Treffen am Freitag 09. September um 18:00 Uhr. Zusammen mit Golo Roden werden sie in die Tiefen von C# eintauchen.
&lt;/p&gt;
&lt;/div&gt;
</description>
      <pubDate>Mon, 08 Aug 2011 06:00:00 Z</pubDate>
    </item>
    <item>
      <guid isPermaLink="true">http://www.databinding.net/blog/post/2011/07/26/entity-framework-dbcontext-und-der-2nd-level-cache-mit-dem-efcachingprovider.html</guid>
      <link>http://www.databinding.net/blog/post/2011/07/26/entity-framework-dbcontext-und-der-2nd-level-cache-mit-dem-efcachingprovider.html</link>
      <author> (René)</author>
      <title>Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider</title>
      <description>Der DbContext stellt eigentlich ein Wrapper auf den ObjectContext dar. Ich bevorzuge mittlerweile den DbContext, da dieser einige Funktionalitäten bietet, die ich beim ObjectContext vermisse. Da wäre...</description>
      <pubDate>Tue, 26 Jul 2011 00:44:00 +0200</pubDate>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"> &lt;p&gt;Der DbContext stellt eigentlich ein Wrapper auf den ObjectContext dar. Ich bevorzuge mittlerweile den DbContext, da dieser einige Funktionalitäten bietet, die ich beim ObjectContext vermisse. Da wären bspw. das vereinfachte Change Tracking, der Support der DataAnnotations, der veinfachte Zugriff auf dem Context-Cache über die Local-Eigenschaft und das dieser neben Code First auch mit dem EDM-Designer verwendet werden kann. &lt;/p&gt; &lt;p&gt;Ein Nachteil ist jedoch die fehlende Unterstützung für das Caching. Für den ObjectContext gibt es den EFCachingProvider, der seine Aufgaben relativ gut verrichtet. Über den Konstruktor im ObjectContext wird dieser aktiviert. &lt;/p&gt; &lt;p&gt;Nun ist der DbContext ja nichts anderes als ein Wrapper und diesen kann auch eine ObjectContext-Instanz übergeben werden. Also kam ich auf eine ganz &amp;#x201e;wilde&amp;#x201c; Idee, um den DbContext mit einer Zusammenarbeit mit dem EFCachingProvider zu überreden. Alternativ liesse sich das auch mit dem Proxy-Pattern realisieren, aber ich gebe die Hoffnung nicht auf, dass der EFCachingProvider ein fester Bestandteil vom EF werden wird. &lt;/p&gt; &lt;p&gt;Mit Hilfe der mitgelieferten T4-Vorlage, die den Einsatz des DbContext für DbFirst und ModelFirst ermöglicht, lässt sich der Caching-Support sehr einfach realisieren. Die angepasste T4-Vorlage sieht so aus: &lt;/p&gt; &amp;lt;#@ template language=&amp;quot;C#&amp;quot; debug=&amp;quot;false&amp;quot; hostspecific=&amp;quot;true&amp;quot;#&amp;gt;
&amp;lt;#@ include file=&amp;quot;EF.Utility.CS.ttinclude&amp;quot;#&amp;gt;&amp;lt;#@ output extension=&amp;quot;.cs&amp;quot;#&amp;gt;&amp;lt;# var loader = new MetadataLoader(this);
var region = new CodeRegion(this);
var inputFile = @&amp;quot;SimpleModel.edmx&amp;quot;;
var ItemCollection = loader.CreateEdmItemCollection(inputFile); Code = new CodeGenerationTools(this);
EFTools = new MetadataTools(this);
ObjectNamespace = Code.VsNamespaceSuggestion();
ModelNamespace = loader.GetModelNamespace(inputFile); EntityContainer container = ItemCollection.GetItems&amp;lt;EntityContainer&amp;gt;().FirstOrDefault();
if (container == null)
{ return string.Empty;
}
#&amp;gt;
//------------------------------------------------------------------------------
// &amp;lt;auto-generated&amp;gt;
// &amp;lt;#=GetResourceString(&amp;quot;Template_GeneratedCodeCommentLine1&amp;quot;)#&amp;gt;
//
// &amp;lt;#=GetResourceString(&amp;quot;Template_GeneratedCodeCommentLine2&amp;quot;)#&amp;gt;
// &amp;lt;#=GetResourceString(&amp;quot;Template_GeneratedCodeCommentLine3&amp;quot;)#&amp;gt;
// &amp;lt;/auto-generated&amp;gt;
//------------------------------------------------------------------------------ &amp;lt;# if (!String.IsNullOrEmpty(ObjectNamespace))
{
#&amp;gt;
namespace &amp;lt;#=Code.EscapeNamespace(ObjectNamespace)#&amp;gt;
{
&amp;lt;# PushIndent(CodeRegion.GetIndent(1));
} #&amp;gt;
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.EntityClient;
using System.Data.Objects;
using System.IO;
using EFProviderWrapperToolkit;
using EFTracingProvider;
using EFCachingProvider;
using EFCachingProvider.Caching; // Workaround, create an objectcontext for 2nd Level Cache with EFProviderToolkit
&amp;lt;#=Accessibility.ForType(container)#&amp;gt; partial class &amp;lt;#=Code.Escape(container)#&amp;gt;Context : ObjectContext
{ private TextWriter logOutput; #region Konstruktoren public &amp;lt;#=Code.Escape(container)#&amp;gt;Context() : base(EntityConnectionWrapperUtils.CreateEntityConnectionWithWrappers( &amp;quot;name=&amp;lt;#=container.Name#&amp;gt;&amp;quot;, /*&amp;quot;EFTracingProvider&amp;quot;,*/ &amp;quot;EFCachingProvider&amp;quot; ), &amp;quot;&amp;lt;#=container.Name#&amp;gt;&amp;quot;) { } public &amp;lt;#=Code.Escape(container)#&amp;gt;Context(string connectionString) : base(EntityConnectionWrapperUtils.CreateEntityConnectionWithWrappers( connectionString, /*&amp;quot;EFTracingProvider&amp;quot;,*/ &amp;quot;EFCachingProvider&amp;quot; )) { } #endregion // ObjectSets are not required, when we use the DbContext. #region Tracing Extensions private EFTracingConnection TracingConnection { get { return this.UnwrapConnection&amp;lt;EFTracingConnection&amp;gt;(); } } public event EventHandler&amp;lt;CommandExecutionEventArgs&amp;gt; CommandExecuting { add { this.TracingConnection.CommandExecuting += value; } remove { this.TracingConnection.CommandExecuting -= value; } } public event EventHandler&amp;lt;CommandExecutionEventArgs&amp;gt; CommandFinished { add { this.TracingConnection.CommandFinished += value; } remove { this.TracingConnection.CommandFinished -= value; } } public event EventHandler&amp;lt;CommandExecutionEventArgs&amp;gt; CommandFailed { add { this.TracingConnection.CommandFailed += value; } remove { this.TracingConnection.CommandFailed -= value; } } private void AppendToLog(object sender, CommandExecutionEventArgs e) { if (this.logOutput != null) { this.logOutput.WriteLine(e.ToTraceString().TrimEnd()); this.logOutput.WriteLine(); } } public TextWriter Log { get { return this.logOutput; } set { if ((this.logOutput != null) != (value != null)) { if (value == null) { CommandExecuting -= AppendToLog; } else { CommandExecuting += AppendToLog; } } this.logOutput = value; } } #endregion #region Caching Extensions private EFCachingConnection CachingConnection { get { return this.UnwrapConnection&amp;lt;EFCachingConnection&amp;gt;(); } } public ICache Cache { get { return CachingConnection.Cache; } set { CachingConnection.Cache = value; } } public CachingPolicy CachingPolicy { get { return CachingConnection.CachingPolicy; } set { CachingConnection.CachingPolicy = value; } } #endregion
}
// Workaround ends here // DbContext
&amp;lt;#=Accessibility.ForType(container)#&amp;gt; partial class &amp;lt;#=Code.Escape(container)#&amp;gt; : DbContext
{ // Modification: Constructor with ObjectContext init public &amp;lt;#=Code.Escape(container)#&amp;gt;() : base(new &amp;lt;#=Code.Escape(container)#&amp;gt;Context(), true) {
&amp;lt;# WriteLazyLoadingEnabled(container);
#&amp;gt; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } &amp;lt;# foreach (var entitySet in container.BaseEntitySets.OfType&amp;lt;EntitySet&amp;gt;()) {
#&amp;gt; &amp;lt;#=Accessibility.ForReadOnlyProperty(entitySet)#&amp;gt; DbSet&amp;lt;&amp;lt;#=Code.Escape(entitySet.ElementType)#&amp;gt;&amp;gt; &amp;lt;#=Code.Escape(entitySet)#&amp;gt; { get; set; }
&amp;lt;# } foreach (var edmFunction in container.FunctionImports) { WriteFunctionImport(edmFunction, false); }
#&amp;gt;
}
&amp;lt;# if (!String.IsNullOrEmpty(ObjectNamespace))
{ PopIndent();
#&amp;gt;
}
&amp;lt;#
}
#&amp;gt;
&amp;lt;#+
string ModelNamespace { get; set; }
string ObjectNamespace { get; set; }
CodeGenerationTools Code { get; set; }
MetadataTools EFTools { get; set; } string GetResourceString(string resourceName)
{ if(_resourceManager == null) { _resourceManager = new System.Resources.ResourceManager(&amp;quot;System.Data.Entity.Design&amp;quot;, typeof(System.Data.Entity.Design.MetadataItemCollectionFactory).Assembly); } return _resourceManager.GetString(resourceName, null);
}
System.Resources.ResourceManager _resourceManager; void WriteLazyLoadingEnabled(EntityContainer container)
{ string lazyLoadingAttributeValue = null; var lazyLoadingAttributeName = MetadataConstants.EDM_ANNOTATION_09_02 + &amp;quot;:LazyLoadingEnabled&amp;quot;; if(MetadataTools.TryGetStringMetadataPropertySetting(container, lazyLoadingAttributeName, out lazyLoadingAttributeValue)) { bool isLazyLoading; if(bool.TryParse(lazyLoadingAttributeValue, out isLazyLoading) &amp;amp;&amp;amp; !isLazyLoading) {
#&amp;gt; this.Configuration.LazyLoadingEnabled = false;
&amp;lt;#+ } }
} void WriteFunctionImport(EdmFunction edmFunction, bool includeMergeOption)
{ var parameters = FunctionImportParameter.Create(edmFunction.Parameters, Code, EFTools); var paramList = String.Join(&amp;quot;, &amp;quot;, parameters.Select(p =&amp;gt; p.FunctionParameterType + &amp;quot; &amp;quot; + p.FunctionParameterName).ToArray()); var returnType = edmFunction.ReturnParameter == null ? null : EFTools.GetElementType(edmFunction.ReturnParameter.TypeUsage); var processedReturn = returnType == null ? &amp;quot;int&amp;quot; : &amp;quot;ObjectResult&amp;lt;&amp;quot; + MultiSchemaEscape(returnType) + &amp;quot;&amp;gt;&amp;quot;; if (includeMergeOption) { paramList = Code.StringAfter(paramList, &amp;quot;, &amp;quot;) + &amp;quot;MergeOption mergeOption&amp;quot;; }
#&amp;gt; &amp;lt;#=AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction))#&amp;gt; &amp;lt;#=processedReturn#&amp;gt; &amp;lt;#=Code.Escape(edmFunction)#&amp;gt;(&amp;lt;#=paramList#&amp;gt;) {
&amp;lt;#+ if(returnType != null &amp;amp;&amp;amp; (returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType || returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.ComplexType)) {
#&amp;gt; ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(&amp;lt;#=MultiSchemaEscape(returnType)#&amp;gt;).Assembly); &amp;lt;#+ } foreach (var parameter in parameters.Where(p =&amp;gt; p.NeedsLocalVariable)) { var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + &amp;quot;.HasValue&amp;quot; : parameter.FunctionParameterName + &amp;quot; != null&amp;quot;; var notNullInit = &amp;quot;new ObjectParameter(\&amp;quot;&amp;quot; + parameter.EsqlParameterName + &amp;quot;\&amp;quot;, &amp;quot; + parameter.FunctionParameterName + &amp;quot;)&amp;quot;; var nullInit = &amp;quot;new ObjectParameter(\&amp;quot;&amp;quot; + parameter.EsqlParameterName + &amp;quot;\&amp;quot;, typeof(&amp;quot; + parameter.RawClrTypeName + &amp;quot;))&amp;quot;;
#&amp;gt; var &amp;lt;#=parameter.LocalVariableName#&amp;gt; = &amp;lt;#=isNotNull#&amp;gt; ? &amp;lt;#=notNullInit#&amp;gt; : &amp;lt;#=nullInit#&amp;gt;; &amp;lt;#+ } var genericArg = returnType == null ? &amp;quot;&amp;quot; : &amp;quot;&amp;lt;&amp;quot; + MultiSchemaEscape(returnType) + &amp;quot;&amp;gt;&amp;quot;; var callParams = Code.StringBefore(&amp;quot;, &amp;quot;, String.Join(&amp;quot;, &amp;quot;, parameters.Select(p =&amp;gt; p.ExecuteParameterName).ToArray())); if (includeMergeOption) { callParams = &amp;quot;, mergeOption&amp;quot; + callParams; }
#&amp;gt; return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction&amp;lt;#=genericArg#&amp;gt;(&amp;quot;&amp;lt;#=edmFunction.Name#&amp;gt;&amp;quot;&amp;lt;#=callParams#&amp;gt;); }
&amp;lt;#+ if(!includeMergeOption &amp;amp;&amp;amp; returnType != null &amp;amp;&amp;amp; returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType) { WriteFunctionImport(edmFunction, true); }
} string AccessibilityAndVirtual(string accessibility)
{ return accessibility + (accessibility != &amp;quot;private&amp;quot; ? &amp;quot; virtual&amp;quot; : &amp;quot;&amp;quot;);
} string MultiSchemaEscape(TypeUsage usage)
{ var type = usage.EdmType as StructuralType; return type != null &amp;amp;&amp;amp; type.NamespaceName != ModelNamespace ? Code.CreateFullName(Code.EscapeNamespace(type.NamespaceName), Code.Escape(type)) : Code.Escape(usage);
} #&amp;gt; &lt;p&gt;Für den CodeFirst-Ansatz wird das Ganze schon ein wenig wilder, da das Model zur Laufzeit erstellt wird und der Metadaten-ConnectionString in dieser Form auch nicht existiert. Aber auch hier habe ich mit ein wenig &amp;#x201e;Basteln&amp;#x201c; eine lauffähige Variante hinbekommen. Da dieser Workaround ziemlich wild ist, habe ich diesen als T4-Vorlage realisiert. Folgende Vorteile ergeben sich daraus: Der Workaround ist dokumentiert und lässt sich leichter entfernen, wenn in einer zukünftigen Version der 2nd-Level Cache endlich mal realisiert wird. &lt;/p&gt; &lt;p&gt;Die T4-Vorlage für den wildesten aller Workarounds ist hier: &lt;/p&gt; &amp;lt;#@ template debug=&amp;quot;false&amp;quot; hostspecific=&amp;quot;true&amp;quot; language=&amp;quot;C#&amp;quot; #&amp;gt;
&amp;lt;#@ output extension=&amp;quot;.txt&amp;quot; #&amp;gt;
&amp;lt;#@ assembly name=&amp;quot;Microsoft.CSharp&amp;quot; #&amp;gt;
&amp;lt;#@ assembly name=&amp;quot;System.Data.Entity&amp;quot; #&amp;gt;
&amp;lt;#@ assembly name=&amp;quot;$(ProjectDir)$(OutDir)EntityFramework.dll&amp;quot; #&amp;gt;
&amp;lt;#@ assembly name=&amp;quot;$(TargetPath)&amp;quot; #&amp;gt; // in this case dll with codefirst context
&amp;lt;#@ import namespace=&amp;quot;System.Data.EntityClient&amp;quot; #&amp;gt;
&amp;lt;#@ import namespace=&amp;quot;System.Data.Entity.Infrastructure&amp;quot; #&amp;gt;
&amp;lt;#@ import namespace=&amp;quot;System.Linq&amp;quot; #&amp;gt;
&amp;lt;#@ import namespace=&amp;quot;System.Xml&amp;quot; #&amp;gt;
&amp;lt;#@ include file=&amp;quot;TemplateFileManager.CS.ttinclude&amp;quot; #&amp;gt;
&amp;lt;#@ include file=&amp;quot;VsAutomationHelper.CS.ttinclude&amp;quot; #&amp;gt;
&amp;lt;#@ include file=&amp;quot;ConfigurationAccessor.CS.ttinclude&amp;quot; #&amp;gt; &amp;lt;# // ToDo: Initalize an instance of the DbContext (T4 uses connection by convention)
var contextInstance = new DbContextCodeFirst2ndLevelCache.TestContext(); // Change database connection // Workaround for accessing the app.config from t4 [random appdomain :-(]
ConfigurationAccessor config = new ConfigurationAccessor((IServiceProvider)this.Host);
// set the connectionstring
string cn = config.ConnectionStrings.Cast&amp;lt;ConnectionStringSettings&amp;gt;() .Where(c=&amp;gt;c.Name == contextInstance.GetType().Name).Single().ConnectionString; contextInstance.Database.Connection.ConnectionString = cn; string contextName = contextInstance.GetType().Name;
string contextNamespace = contextInstance.GetType().Namespace;
string contextSuffix = &amp;quot;OC&amp;quot;;
var fileManager = TemplateFileManager.Create(this); // File properties for C# output files
var compileProp = new FileProperties();
compileProp.BuildAction = BuildAction.Compile; // File properties for EDMX output
var edmxProp = new FileProperties();
edmxProp.BuildAction = BuildAction.EntityDeploy;
edmxProp.CustomTool = &amp;quot;EntityModelCodeGenerator&amp;quot;; // Create Edmx file
fileManager.StartNewFile(String.Format(&amp;quot;{0}.edmx&amp;quot;, contextName) , fileProperties:edmxProp); this.Write(this.GetEdmxFileFromDbContext(contextInstance)); // Create the ObjectContext with ef provider wrapper
fileManager.StartNewFile(String.Format(&amp;quot;{0}{1}.cs&amp;quot;, contextName, contextSuffix) , fileProperties:compileProp); CreateObjectContextFromDbContext(contextName, contextNamespace, contextSuffix); fileManager.Process(true); #&amp;gt; &amp;lt;#+ void CreateObjectContextFromDbContext(string contextName, string contextNamespace, string contextSuffix)
{
#&amp;gt;
namespace &amp;lt;#= contextNamespace #&amp;gt;
{ using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Data; using System.Data.Entity; using System.Data.EntityClient; using System.Data.Objects; using EFProviderWrapperToolkit; using EFTracingProvider; using EFCachingProvider; using EFCachingProvider.Caching; public class &amp;lt;#= contextName #&amp;gt;&amp;lt;#= contextSuffix #&amp;gt; : ObjectContext { public &amp;lt;#= contextName #&amp;gt;&amp;lt;#= contextSuffix #&amp;gt;() : base (EntityConnectionWrapperUtils.CreateEntityConnectionWithWrappers( TransformToMetaDataConnectionString(&amp;quot;&amp;lt;#= contextName #&amp;gt;&amp;quot;), /*&amp;quot;EFTracingProvider&amp;quot;,*/ &amp;quot;EFCachingProvider&amp;quot; ), &amp;quot;&amp;lt;#= contextName #&amp;gt;&amp;quot;) { } public static string TransformToMetaDataConnectionString(string contextName) { string folderres = &amp;quot;Workaround.&amp;quot;; //Subfolder of workaround with edmx var con = System.Configuration.ConfigurationManager.ConnectionStrings .Cast&amp;lt;ConnectionStringSettings&amp;gt;() .Where(c =&amp;gt; c.Name == contextName) .Single(); if (con == null) { throw new ArgumentException(&amp;quot;No connection with name '{0}' found.&amp;quot;, contextName); } var conn = new EntityConnectionStringBuilder(); conn.ProviderConnectionString = con.ConnectionString; conn.Provider = con.ProviderName; conn.Metadata = String.Format(&amp;quot;res://*/{1}{0}.csdl|res://*/{1}{0}.ssdl|res://*/{1}{0}.msl&amp;quot;, contextName, folderres); return conn.ConnectionString; } }
}
&amp;lt;#+ } /// &amp;lt;summary&amp;gt;
/// The code first context must already exists and compiled. Be sure that /// the connection string exists in the app.config and the database is created. /// Required for edmx file creation
/// &amp;lt;/summary
string GetEdmxFileFromDbContext(System.Data.Entity.DbContext ctx)
{ string xml = String.Empty; var sw = new UTF8StringWriter(); using (var writer = new XmlTextWriter(sw)) { EdmxWriter.WriteEdmx(ctx, writer); } xml = sw.ToString(); return xml;
} public class UTF8StringWriter : StringWriter
{ public override Encoding Encoding { get { return Encoding.UTF8; } }
} #&amp;gt; &lt;p&gt;Die Beispiel-Solution kann &lt;a href="http://www.databinding.net/fileadmin/databinding/samples/DbContext2ndLevelCache.zip" title="APPLICATION, Db Context2nd Level Cache, DbContext2ndLevelCache.zip, 1.4 MB"&gt;hier &lt;/a&gt; heruntergeladen werden. Für die DbFirst bzw. ModelFirst-Variante muss zuerst eine Datenbank mit den Namen DbContextTest angelegt werden, dass SQL-Skript befindet sich im Verzeichnis SQL-Skripts. Der EFCachingProvider in der Solution ist modifiziert, die Anpassungen sind auch in diesem Blog beschrieben. &lt;/p&gt; </content:encoded>
    </item>
  </channel>
</rss>