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

<channel>
	<title>Sergey Shishkin</title>
	<atom:link href="http://shishkin.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://shishkin.wordpress.com</link>
	<description>on agile software development</description>
	<lastBuildDate>Sat, 02 Jun 2012 09:55:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='shishkin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Sergey Shishkin</title>
		<link>http://shishkin.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://shishkin.wordpress.com/osd.xml" title="Sergey Shishkin" />
	<atom:link rel='hub' href='http://shishkin.wordpress.com/?pushpress=hub'/>
		<item>
		<title>This Blog Is Moving</title>
		<link>http://shishkin.wordpress.com/2012/06/02/this-blog-is-moving-5/</link>
		<comments>http://shishkin.wordpress.com/2012/06/02/this-blog-is-moving-5/#comments</comments>
		<pubDate>Sat, 02 Jun 2012 09:55:17 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2012/06/02/this-blog-is-moving-5/</guid>
		<description><![CDATA[I decided to move away from WordPress.com and created an Octopress blog. The new URL is http://shishkin.org. I won&#8217;t migrate any content from the old blog, it all stays here for the record in the read-only mode. Subscribe to my feed if you haven&#8217;t done so yet. The feed is powered by FeedBurner and should [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=118&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I decided to move away from <a href="http://wordpress.com">WordPress.com</a> and created an <a href="http://octopress.org">Octopress</a> blog. The new URL is <a href="http://shishkin.org">http://shishkin.org</a>. I won&#8217;t migrate any content from the old blog, it all stays here for the record in the read-only mode.</p>
<p>Subscribe to <a href="http://feeds.feedburner.com/SergeyShishkin">my feed</a> if you haven&#8217;t done so yet. The feed is powered by FeedBurner and should remain stable.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=118&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2012/06/02/this-blog-is-moving-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>My Revised REST Talk at OOP 2012</title>
		<link>http://shishkin.wordpress.com/2012/02/01/rest-oop-2012/</link>
		<comments>http://shishkin.wordpress.com/2012/02/01/rest-oop-2012/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 16:51:41 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/?p=92</guid>
		<description><![CDATA[Last week I attended and have spoken at OOP 2012 in Munich. It was overall great experience and unfortunately, as at each top conference, I often had hard times deciding which session to attend. I learned a lot from thought leaders like Johanna Rothman, Diana Larsen, David J Anderson, Jurgen Appelo, Matthias Bohlen, Stefan Tilkov and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=92&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last week I attended and have spoken at <a href="http://www.oop2012.de">OOP 2012</a> in Munich. It was overall great experience and unfortunately, as at each top conference, I often had hard times deciding which session to attend. I learned a lot from thought leaders like <a href="http://twitter.com/#!/johannarothman">Johanna Rothman</a>, <a href="http://twitter.com/#!/DianaOfPortland">Diana Larsen</a>, <a href="http://twitter.com/#!/agilemanager">David J Anderson</a>, <a href="http://twitter.com/#!/jurgenappelo">Jurgen Appelo</a>, <a href="http://twitter.com/#!/mbohlende">Matthias Bohlen</a>, <a href="http://twitter.com/#!/stilkov">Stefan Tilkov</a> and many more and probably missed some really great sessions and discussions as well. I also used the chance and met my friends in Munich – it was a great time.</p>
<p><img class="alignright  wp-image-94" title="How it meant to be viewed in Safari" src="http://shishkin.files.wordpress.com/2012/01/rest-safari.png?w=448&h=362" alt="" width="448" height="362" /></p>
<p>My session was titled &#8220;REST: you&#8217;re doing it wrong&#8221; or &#8220;REST, du machst das falsch&#8221; in German. It was a significantly revised version of <a href="http://www.slideshare.net/shishkin/rest-youre-doing-it-wrong">the talk</a> I gave at NRWConf 2011 in Wuppertal. This time I enhanced the story a little bit as well as overhauled the whole presentation. I used <a href="http://bartaz.github.com/impress.js/">imress.js</a> framework to create an HTML5 presentation to be shown in browser – no special slideware needed. I very much like the result, though I gathered somewhat mixed experience achieving it. It was particularly troublesome to arrange all the presentation steps on the canvas while working in pixel units. Maybe some layout plugin or template language would help. The presentation also doesn&#8217;t work well in all browsers. From the presenter&#8217;s standpoint it ok: it works smoothly in Safari on a Mac, but for publishing online it&#8217;s a major drawback: Chrome on a Mac has performance and rendering issues while current stable Firefox is not supported altogether. Anyway these issues will be ironed out sooner or later and I&#8217;ll probably stay away of any PowerPoint-inspired slideware from now on.</p>
<p>I started the talk with the <a href="http://serialseb.blogspot.com/2009/06/fighting-for-rest-or-tale-of-ice-cream.html">ironic tale</a> of the ice-cream maker written by Sebastien Lambla. After that I continued with fundamental architectural decisions made by the creators of the Web and upon which REST as an architectural style is based.</p>
<p>Then I moved to common misinterpretation of REST, like claiming that not using SOAP or using JSON for serialization is already RESTful. After that I introduced <a href="http://martinfowler.com/articles/richardsonMaturityModel.html">Richardson REST Maturity Model</a> and started moving the story towards a RESTful system.</p>
<p>First, I talked about resources and their identifiers. It was also important to mention the distinction between resources and representations. It was then obvious that using URI is inappropriate way of specifying a representation (like the API version or language being part of the URI).</p>
<p>I then mentioned the importance of understanding HTTP mechanisms and assumptions it makes against different methods. The most common pitfall in RESTful systems design is from my perspective to stop on that stage and build a CRUD (Create Read Update Delete) service. Though CRUD certainly has its application domain, nonetheless it&#8217;s inappropriate for most of the business systems, as the application logic remains outside of the application – like an Excel spreadsheet, where the user just edits raw data instead of fulfilling business tasks.</p>
<p>The natural step from a system designed out of HTTP methods is a system designed out of resources, where each business task is a resource. This is almost the same principle we use for ages building web applications. Such a system can leverage well-known mechanics of hyperlinks and forms to provide a truly RESTful API.</p>
<p>The HTML5 presentation is available on <a href="http://shishkin.github.com/presentations/rest">GitHub pages</a>. You can also be interested in the previous PowerPoint version with speaker notes <a href="http://www.slideshare.net/shishkin/rest-youre-doing-it-wrong">over at Slideshare</a>.</p>
<p><strong>Update:</strong> There is also a ~5.8 megapixel <a href="http://shishkin.files.wordpress.com/2012/02/rest-v2-0.png">poster of the overview slide</a> in PNG format if the impress.js version doesn&#8217;t happen to work for you.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=92&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2012/02/01/rest-oop-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>

		<media:content url="http://shishkin.files.wordpress.com/2012/01/rest-safari.png" medium="image">
			<media:title type="html">How it meant to be viewed in Safari</media:title>
		</media:content>
	</item>
		<item>
		<title>Upcoming Events</title>
		<link>http://shishkin.wordpress.com/2011/08/19/upcoming-events/</link>
		<comments>http://shishkin.wordpress.com/2011/08/19/upcoming-events/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 20:25:29 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://shishkin.wordpress.com/2011/08/19/upcoming-events/</guid>
		<description><![CDATA[Quite busy time is approaching me and I really look forward to it. Here are some of the upcoming community activities from my agenda: 31.08.2011—.NET Coding Dojo at DNUGRR As a good tradition every other month .NET User Group Rhine/Ruhr organizes a coding dojo in Ratingen. This time we get more interactive and learn TDD [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=87&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Quite busy time is approaching me and I really look forward to it. Here are some of the upcoming community activities from my agenda:</p>
<h3>31.08.2011—.NET Coding Dojo at DNUGRR</h3>
<p>As a good tradition every other month .NET User Group Rhine/Ruhr organizes a <a href="https://shishkin.wordpress.com/2011/04/11/coding-dojo-net-user-group-rhineruhr/">coding dojo in Ratingen</a>. This time we get more interactive and learn <a href="http://gojko.net/2009/02/27/thought-provoking-tdd-exercise-at-the-software-craftsmanship-conference/">TDD as if you meant it</a> altogether in pairs. If you are around and want to join us, <a href="https://www.xing.com/events/coding-dojo-797749">you’re welcome</a>!</p>
<h3></h3>
<h3>1–3.09.2011—Software Craftsmanship and Testing</h3>
<p>New European software craftsmanship community is emerging and I’m very glad to participate in this two day-long intense <a href="http://socrates2011.pbworks.com/">community fusion</a>:</p>
<blockquote><p>This event is about the sustainable creation of useful software in a responsible way.</p>
<p>It consists of two days of highly collaborative interactions, including <a href="http://socrates2011.pbworks.com/w/page/41520819/Lightning-Talks">Lightning Talks</a> (on Thursday evening), scheduled sessions (on Friday), and a self-organized <a href="http://socrates2011.pbworks.com/Open-Space">Open Space</a> (on Saturday).</p>
<p>The event will be much like a retreat. We will be there for 48 hours to collaborate and share ideas.</p></blockquote>
<p>I will present practical experience with Specification by Example, I gathered working with an agile team back in 2010. Gojko Adzic has written <a href="http://specificationbyexample.com">THE book about Specification by Example</a>, which I highly recommend. Want to discuss this topic? <a href="http://socrates2011.eventbrite.com/">Register for SoCraTes 2011</a>!</p>
<h3>9.9.2011—NRWConf in Wuppertal</h3>
<p>It is a great honor for me to be part of this year’s <a href="http://www.nrwconf.de/en/Conference/NrwConf2011/Speakers">line up of speakers at NRWConf</a>. <a href="http://www.nrwconf.de/en/Conference/NrwConf2011/Sessions#session_154e7ada3fe647a7bd0f71019908e1f2">My session</a> on REST is focused on why is true REST so much different than WS-* and CRUD POX services. Want to avoid common mistakes and leverage the web platform, join me in Wuppertal.</p>
<h3>16.09.2011—Professional .NET in Wien</h3>
<p>Austrian .NET community hijacked Greg Young for a day to speak about all things CQRS. I just can’t miss such an opportunity to see <a href="http://vimeo.com/13824218">hilarious Greg</a> speaking, <a href="http://www.dotnet-austria.at/">neither should you</a>! As part of the event I will be speaking about NOSQL and why it is becoming even more attractive for separated read and write data models.</p>
<h3>2-3.11.2011—prio.conference 2011 in Nuremberg</h3>
<p><img class="alignright size-full wp-image-88" title="PRIO Speaker" src="http://shishkin.files.wordpress.com/2011/08/priospeaker.jpg?w=700" alt=""   /><br />
This year’s <a href="http://www.prioconference.de/">prio.conference</a> is focused on cross-platform development and I think that the web platform is currently the closest realization of that vision. That’s why I was so excited, that my talk proposal about “getting REST done right” was accepted. In contrast to my NRWConf REST talk, this one is focused more on concrete examples of how to get things done following the REST way, rather than pointing at failures and pitfalls.</p>
<p>So, next months are going to be tough, but I look forward to meet bunch of interesting people and be inspired and energized by the community!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/87/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=87&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2011/08/19/upcoming-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>

		<media:content url="http://shishkin.files.wordpress.com/2011/08/priospeaker.jpg" medium="image">
			<media:title type="html">PRIO Speaker</media:title>
		</media:content>
	</item>
		<item>
		<title>Code Retreat D&#252;sseldorf</title>
		<link>http://shishkin.wordpress.com/2011/06/19/code-retreat-dsseldorf/</link>
		<comments>http://shishkin.wordpress.com/2011/06/19/code-retreat-dsseldorf/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 18:41:35 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://shishkin.wordpress.com/?p=83</guid>
		<description><![CDATA[…or how I learned to stop worrying and love deleting the code. Yesterday I had a great opportunity to participate in a very enlightening and thought-provoking activity, named Code Retreat, in Düsseldorf! It was smoothly conducted by Daniel Temme and Adrian Bolboaca and hosted by codecentric AG. The idea of the code retreat is very [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=83&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>…or how I learned to stop worrying and love deleting the code.</h2>
<p>Yesterday I had a great opportunity to participate in a very enlightening and thought-provoking activity, named <a href="http://coderetreat.com/">Code Retreat</a>, in Düsseldorf! It was smoothly conducted by <a href="http://danieltemme.blogspot.com/">Daniel Temme</a> and <a href="http://twitter.com/adibolb">Adrian Bolboaca</a> and hosted by <a href="http://www.codecentric.de/">codecentric AG</a>. The idea of the code retreat is very simple: use TDD and Pair Programming technics to automate <a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life">Conway’s Game of Life</a> in sessions of 45 minutes …but delete all of your code after each session! </p>
<h3>What?! Delete code?! But how am I supposed to get the job done?</h3>
<p>The point is not to get something done, but to exercise the technics of test-first development and simple design. This looks silly and pointless at first and is indeed really hard.</p>
<p>But it all look pretty simple at first. In the first session my pair and I haven’t even come to the game rules. We started with some examples, that we represented as strings. Then we were writing a parser, that would take string representation of the game grid and provide a two-dimensional array with Boolean flags, indicating life, so that we could feed our examples into the game engine. It seemed a logical top-down approach to me at first, but proved itself meaningless.</p>
<p>After the session we all together discussed any findings and ideas that we got out of the session. Adrian was provoking us with questions like: Why do you need an array? Where this Cell class came from? etc.</p>
<p>So the next session we changed pairs (this is a rule of Code Retreat) and started all over again. This time we focused on game rules, test naming and abstractions, but were still unable to make very small baby steps with our design. Abstractions just spawned out of nowhere (out of our head, actually) and made it right into the code. We discussed it after the session and decided to treat the imaginary design obsession syndrome with a very restrictive diet…</p>
<h3>TDD As If You Meant It</h3>
<p><a href="http://gojko.net/2009/02/27/thought-provoking-tdd-exercise-at-the-software-craftsmanship-conference/">Gojko Adzic described</a> this brilliant exercise originally proposed by <a href="http://peripateticaxiom.blogspot.com/">Keith Braithwaite</a> back in 2009. It’s very simple:</p>
<ol>
<ol>
<li>write exactly ONE failing test </li>
<li>make the test from (1) pass by first writing implementation code IN THE TEST </li>
<li>create a new implementation method/function by:
<ol>
<li>doing extract method on implementation code created as per (2), or </li>
<li>moving implementation code as per (2) into an existing implementation method </li>
</ol>
</li>
<li>only ever create new methods IN THE TEST CLASS </li>
<li>only ever create implementation classes to provide a destination for extracting a method created as per (4). </li>
<li>populate implementation classes by doing move method from a test class into them </li>
<li>refactor as required </li>
<li>go to (1) </li>
</ol>
</ol>
<p>Despite of the simplicity of the rules, it’s very hard to follow them. But it works. Design gets in fact much simpler and it really gets derived from tests.</p>
<h3>Conclusion</h3>
<p>We did 6 sessions during the day. I programmed 3 times in Java, 2 times in C# and one time in Ruby. Switching languages is great exercise in itself. No matter what language, testing framework or IDE/Editor we used – the most important concern was to understand the problem domain, codify it in tests, and let simple design solve it.</p>
<p>Throwing out code is not only useful as an exercise. I can imagine a Code Retreat workshop as a way to understand a very complex core domain (in DDD sense) in productive development.</p>
<p>After the event I felt exhausted and energized at the same time. I realized that I barely did any TDD before, but I learned where to start and how to proceed my learning. All in all it was the densest coding activity I ever had. Really look forward to participate in another Code Retreat soon and will do my best to organize the next one in Düsseldorf!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=83&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2011/06/19/code-retreat-dsseldorf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Coding Dojo @ .NET User Group Rhine/Ruhr</title>
		<link>http://shishkin.wordpress.com/2011/04/11/coding-dojo-net-user-group-rhineruhr/</link>
		<comments>http://shishkin.wordpress.com/2011/04/11/coding-dojo-net-user-group-rhineruhr/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 15:15:44 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://shishkin.wordpress.com/2011/04/11/coding-dojo-net-user-group-rhineruhr/</guid>
		<description><![CDATA[Last month we had a coding dojo on a user group meeting in Ratingen. This was the first coding dojo for most of the user group members and I was allowed to facilitate it. As a big fan of Ilker’s style coding dojos for his entertaining talent I wanted to deliver an energizing experience to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=82&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last month we had a <a href="http://codingdojo.org/cgi-bin/wiki.pl?WhatIsCodingDojo">coding dojo</a> on a <a href="http://www.ug-rheinruhr.net/">user group meeting</a> in Ratingen. This was the first coding dojo for most of the user group members and I was allowed to facilitate it. As a big fan of <a href="http://ilker.de/dotnet-coding-dojo">Ilker’s style coding dojos</a> for his entertaining talent I wanted to deliver an energizing experience to the attendees if anything at all. So instead of throwing people at kata right away and watching them arguing which unit-testing framework to use I decided make a “demo of a coding dojo”.</p>
<p>Imagine yourself sitting in a racing car having never seen a race and knowing only how to ride a bicycle. Now go on and have fun on a track. Two hours later you already can start the engine and release the handbrake.&#160; Was it fun? Will you come next time to learn how to shift gears? I doubt. Now Imagine somebody took you for a drifty ride. Now it makes sense! Now there is even a point to learn it yourself. The same way I learned to love coding katas: by watching masters (like <a href="http://blog.extracheese.org/2010/01/string-calculator-kata-in-python.html">this one</a>) doing them.</p>
<p>I choose a modified version of <a href="http://osherove.com/tdd-kata-1/">the String Calculator Kata</a>: instead of just adding numbers joined to a string, I aimed to implement an arithmetic expression evaluator (“1 + 2” –&gt; 3). My tools for this kata included VS2010, C#, Resharper, xunit.net as testing framework, and Should as a fluent assertions library.</p>
<p>The thing I like most about TDD is that the whole software design emerges out of a consequence of simple decisions. Each design is unique and none is the right one. You can follow my implementation on <a href="https://github.com/shishkin/CodingDojo/tree/master/StringCalculator">Github</a>, I’ll just list here most noticeable steps:</p>
<p>The first feature was to evaluate a decimal constant. The simple “double.Parse(expression)” method <a href="https://github.com/shishkin/CodingDojo/blob/7c102a3eaa8d13411654e0a343fe65d5cfcac875/StringCalculator/Calculator.cs">did the trick</a>.</p>
<p>The next one was a simple addition. The “string.Split(‘+’)” is obvious to extract the arguments of addition, the next step is however that same little design decision that defined the whole solution. Instead of manually juggling array indices I used my favorite .NET API – Linq. So, to add the arguments from a string array I wrote <a href="https://github.com/shishkin/CodingDojo/blob/c7e0f9d62fe22276cf3c6c52988731d897e40cf9/StringCalculator/Calculator.cs">the following</a>:</p>
<blockquote><pre><p>return expression</p><p>&#160;&#160;&#160; .Split('+')</p><p>&#160;&#160;&#160; .Select(x =&gt; double.Parse(x))</p><p>&#160;&#160;&#160; .Aggregate((a, b) =&gt; a + b);</p></pre>
</blockquote>
<p>Now implementing multiplication <a href="https://github.com/shishkin/CodingDojo/blob/937615e66913de3e9d0f27e8a41dcf5f1d722ddb/StringCalculator/Calculator.cs">was analogous</a>. The resulting code duplication was an obvious smell though. I always forget those fancy functional slang, but the point was to effectively build a pipeline of functions, where each function is applied to the result of the next one in the pipeline. Then the only thing to do is to call that pipeline as a function and pass it the original string expression. <a href="https://github.com/shishkin/CodingDojo/blob/fac54fb59347cf018fc26e316f3eb1efbf371cdf/StringCalculator/Calculator.cs">The whole solution</a> looks like this:</p>
<blockquote>
<p><font face="Consolas">public class Calculator<br />
      <br />{</p>
<p>&#160;&#160;&#160; private static readonly Func&lt;string, double&gt; Parse = double.Parse;</font></p>
<p><font face="Consolas">&#160;&#160;&#160; private static readonly Func&lt;string, double&gt; Pipeline = Parse<br />
      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Wrap(&#8216;*&#8217;, (a, b) =&gt; a*b)</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Wrap(&#8216;/&#8217;, (a, b) =&gt; a/b)</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Wrap(&#8216;+&#8217;, (a, b) =&gt; a + b)</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Wrap(&#8216;-&#8217;, (a, b) =&gt; a &#8211; b)</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; ;</font></p>
<p><font face="Consolas">&#160;&#160;&#160; public double Evaluate(string expression)<br />
      <br />&#160;&#160;&#160; {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return Pipeline(expression);</p>
<p>&#160;&#160;&#160; }</p>
<p>}</font></p>
<p><font face="Consolas">public static class PipelineExtensions<br />
      <br />{</p>
<p>&#160;&#160;&#160; public static Func&lt;string, double&gt; Wrap(</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; this Func&lt;string, double&gt; inner,</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; char split,</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Func&lt;double, double, double&gt; aggregate)</p>
<p>&#160;&#160;&#160; {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return expression =&gt; expression</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Split(split)</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Select(inner)</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Aggregate(aggregate);</p>
<p>&#160;&#160;&#160; }</p>
<p>}</font></p>
</blockquote>
<p>It definitely doesn’t take parenthesis into account, but it quite elegantly solves four arithmetic operations with operator precedence and more than two arguments and more than one operator per expression. Without using Linq I would probably go with a bunch of if/else statements being than refactored into an expression parser and an expression tree evaluator (which is a way to go for supporting parenthesis). Anyway for the first iteration I implemented all the features I wanted and ended up with very little code, which I don’t mind to throw away if it doesn’t fit anymore. And this is a true virtue of TDD.</p>
<p>The next Coding Dojo at the User Group Rhine/Ruhr will be on 27th April, hosted by <a href="http://www.mt-ag.com">MT AG</a> in Ratingen. Follow <a href="http://www.ug-rheinruhr.net/">announcements of the UG</a> or <a href="https://www.xing.com/net/ugnrw/">sign up at Xing</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=82&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2011/04/11/coding-dojo-net-user-group-rhineruhr/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Binding Explicit Interface in Silverlight and WP7</title>
		<link>http://shishkin.wordpress.com/2011/01/18/binding-explicit-interface-in-silverlight-and-wp7/</link>
		<comments>http://shishkin.wordpress.com/2011/01/18/binding-explicit-interface-in-silverlight-and-wp7/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 10:34:01 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://shishkin.wordpress.com/2011/01/18/binding-explicit-interface-in-silverlight-and-wp7/</guid>
		<description><![CDATA[Yesterday I faced a quite annoying limitation of Silverlight (and of its Windows Phone 7 variant). Due to the lack of cross-assembly private reflection Silverlight’s Data Binding is unable to bind to explicitly implemented interface properties. No, I wasn’t jail-braking the phone, all I wanted to do was to bind some hierarchical data control to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=78&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I faced a quite annoying limitation of Silverlight (and of its Windows Phone 7 variant). Due to the lack of <a href="http://msdn.microsoft.com/en-us/library/stfy7tfc(VS.95).aspx">cross-assembly private reflection</a> Silverlight’s Data Binding is unable to bind to explicitly implemented interface properties. No, I wasn’t jail-braking the phone, all I wanted to do was to bind some hierarchical data control to a <a href="http://msdn.microsoft.com/en-us/library/bb344977(v=VS.95).aspx">LINQ Grouping</a>. Unfortunately IGrouping&lt;TKey,TElement&gt; is implemented in .NET not just by internal classes (as usual, ARRRGGHH!!!) but in addition explicitly. Fine!</p>
<p>Others confronted with the same problem gave up by <a href="http://silverlight.codeplex.com/SourceControl/changeset/view/60019#1349662">writing a public wrapper class</a> exposing a public Key property, binding-ready. Although that solution worked I felt wrong polluting all the queries in my view model because of Silverlight data binding limitations. Another interesting approach <a href="http://stackoverflow.com/questions/2762361/bind-a-sl4-treeview-to-an-igrouping-using-caliburn/3669129#3669129">proposed by Christopher Bennage</a> on Stack Overflow used a Value Converter to get the Key property of a grouping. Now it looked much better in terms of separation of concerns, but the converter was hard-coded to work with IGrouping&lt;string, MyDomainClass&gt; only. Remember? No cross-assembly private reflection.</p>
<p>I tried to tweak the converter approach with no luck:</p>
<ul>
<li>LINQ expression tree code generation didn’t work without Reflection.Emit.</li>
<li>Casting to IGrouping&lt;object, object&gt; didn’t work without co-/contra-variance in WP7</li>
</ul>
<p>So after pulling some hair out of my head I found a rather simple solution. The Key property on the interface itself is obviously public. It is indeed possible to use reflection to get the property value if only you use a PropertyInfo from the interface, not from the implementing type.</p>
<p>The resulting universal value converter looks like this:</p>
<pre><span style="font-family:Consolas;"><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">class</span><span style="color:#000000;"> </span><span style="color:#2b91af;">ExplicitPropertyConverter</span><span style="color:#000000;"> : </span><span style="color:#2b91af;">IValueConverter
</span></span><span style="font-family:Consolas;"><span style="color:#000000;">{
    </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">object</span><span style="color:#000000;"> Convert(</span><span style="color:#0000ff;">object</span><span style="color:#000000;"> value, </span><span style="color:#2b91af;">Type</span><span style="color:#000000;"> targetType, </span><span style="color:#0000ff;">object</span><span style="color:#000000;"> parameter, </span><span style="color:#2b91af;">CultureInfo</span></span><span style="font-family:Consolas;"><span style="color:#000000;"> culture)
    {
        </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> value == </span><span style="color:#0000ff;">null</span><span style="color:#000000;"> ? </span><span style="color:#0000ff;">null</span><span style="color:#000000;"> : GetPropertyValue(value, (</span><span style="color:#0000ff;">string</span></span><span style="font-family:Consolas;"><span style="color:#000000;">)parameter);
    }

    </span><span style="color:#0000ff;">private</span><span style="color:#000000;"> </span><span style="color:#0000ff;">static</span><span style="color:#000000;"> </span><span style="color:#0000ff;">object</span><span style="color:#000000;"> GetPropertyValue(</span><span style="color:#0000ff;">object</span><span style="color:#000000;"> target, </span><span style="color:#0000ff;">string</span></span><span style="font-family:Consolas;"><span style="color:#000000;"> name)
    {
        </span><span style="color:#0000ff;">return</span></span><span style="font-family:Consolas;"><span style="color:#000000;"> (
                </span><span style="color:#0000ff;">from</span><span style="color:#000000;"> type </span><span style="color:#0000ff;">in</span></span><span style="font-family:Consolas;"><span style="color:#000000;"> target.GetType().GetInterfaces()
                </span><span style="color:#0000ff;">from</span><span style="color:#000000;"> prop </span><span style="color:#0000ff;">in</span></span><span style="font-family:Consolas;"><span style="color:#000000;"> type.GetProperties()
                </span><span style="color:#0000ff;">where</span></span><span style="font-family:Consolas;"><span style="color:#000000;"> prop.Name == name &amp;&amp; prop.CanRead
                </span><span style="color:#0000ff;">select</span><span style="color:#000000;"> prop.GetValue(target, </span><span style="color:#0000ff;">new</span><span style="color:#000000;"> </span><span style="color:#0000ff;">object</span></span><span style="font-family:Consolas;"><span style="color:#000000;">[0])
            ).FirstOrDefault();
    }

    </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">object</span><span style="color:#000000;"> ConvertBack(</span><span style="color:#0000ff;">object</span><span style="color:#000000;"> value, </span><span style="color:#2b91af;">Type</span><span style="color:#000000;"> targetType, </span><span style="color:#0000ff;">object</span><span style="color:#000000;"> parameter, </span><span style="color:#2b91af;">CultureInfo</span></span><span style="font-family:Consolas;"><span style="color:#000000;"> culture)
    {
        </span><span style="color:#0000ff;">throw</span><span style="color:#000000;"> </span><span style="color:#0000ff;">new</span><span style="color:#000000;"> </span><span style="color:#00008b;"><strong>NotImplementedException</strong></span><span style="color:#000000;">();
    }
}</span></span></pre>
<p>And the usage from XAML is like this:</p>
<pre><span style="font-family:Consolas;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock
</span></span><span style="font-family:Consolas;"><span style="color:#ff0000;">    Text</span><span style="color:#0000ff;">="{</span><span style="color:#a31515;">Binding
</span><span style="color:#ff0000;">        Converter</span><span style="color:#0000ff;">={</span><span style="color:#a31515;">StaticResource</span><span style="color:#ff0000;"> ExplicitPropertyConverter</span><span style="color:#0000ff;">},
</span><span style="color:#ff0000;">        ConverterParameter</span><span style="color:#0000ff;">=Key
</span><span style="color:#0000ff;">    }"
</span><span style="color:#0000ff;">    /&gt;</span></span></pre>
<p>This is almost the right way from my perspective (<strong>the</strong> right way would if data binding in Silverlight just worked, but it’s not what Microsoft developers are accustomed to anyway). The converter itself is implemented as a cross-cutting concern, being able to bind any interface property. The only notion of this workaround is in XAML data binding, where it belongs. Of course I wish Silverlight, and especially WP7, was a real thing and not that creepy lame castrated shade of .NET, standing in my way to be more productive. Rant over…</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=78&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2011/01/18/binding-explicit-interface-in-silverlight-and-wp7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>First Success With Heroku</title>
		<link>http://shishkin.wordpress.com/2010/11/29/first-success-with-heroku/</link>
		<comments>http://shishkin.wordpress.com/2010/11/29/first-success-with-heroku/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 20:44:49 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://shishkin.wordpress.com/2010/11/29/first-success-with-heroku/</guid>
		<description><![CDATA[Recently I moved my blog away from Live Spaces to WordPress.com. I remember myself a few years ago comparing Live Spaces and WP among other blogging platforms, I bought in to Live’s tight integration of the blog engine, the SkyDrive and the Live Writer. That was definitely not my best decision as recently Microsoft announced [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=77&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I moved my blog away from Live Spaces to WordPress.com. I remember myself a few years ago comparing Live Spaces and WP among other blogging platforms, I bought in to Live’s tight integration of the blog engine, the SkyDrive and the Live Writer. That was definitely not my best decision as recently Microsoft announced that they are discontinuing Live Spaces and all users are kindly requested to move their blogs to WP. The migration procedure took just several clicks and I got my whole blog with all the comments on WP. One thing I missed after Live Spaces however was custom domain redirection. I want my domain &#8211; <a href="http://shishkin.org">shishkin.org</a> to point to my blog, but this is a premium feature at WP that costs money. After no luck with DNS configuration at my registrar I headed to cloud solutions.</p>
<p>And here comes <a href="http://heroku.com/">Heroku</a>. Heroku is a ruby hosting platform in the cloud, which is free for small demands and feature rich, rock-solid and scalable when you need it. So I decided to build and host at Heroku an absolutely dumb HTTP Ruby application that should redirect all the requests to my blog at WP. Thanks Heroku <a href="http://docs.heroku.com/custom-domains">Custom Domains</a> I was able to host my small dumb app for free with my custom domains (<a href="http://shishkin.org">shishkin.org</a> and <a href="http://www.shishkin.org">www.shishkin.org</a>).</p>
<p>The application itself is a simplest <a href="http://rack.rubyforge.org/">Rack</a> application:</p>
<pre>class Redirect
  def call(env)
    [301, {
      &quot;Location&quot; =&gt; &quot;http://shishkin.wordpress.com&quot;,
      &quot;Content-Type&quot; =&gt; &quot;text/plain&quot;
    },
    &quot;&quot;]
  end
end

run Redirect.new</pre>
<p>That’s it! Using <a href="http://docs.heroku.com/quickstart">simple</a> Heroku <a href="http://docs.heroku.com/rack">documentation</a> I was able to build, test and deploy my little app in minutes. Heroku’s git-based deployment is somewhat cool. It just can’t be simpler given that each Ruby developer probably has git installed already.</p>
<p>As for Rack, I think it’s an awesome framework we really miss in .NET. After being intrigued by Rack’s ultimate simplicity and extensibility I watched TekPub’s <a href="http://tekpub.com/productions/rack">episode on Rack</a> and started to watch <a href="http://tekpub.com/productions/sinatra">the Sinatra series</a>. Now I’m intrigued even more <img style="border-style:none;" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://shishkin.files.wordpress.com/2010/11/wlemoticon-winkingsmile.png?w=700" />&#160;<a href="http://blog.wekeroad.com/">Rob Conery</a> does a great job of getting .NET developers out of their comfort zone and provoking us by showing how simple software development can really be on the other side of the fence.</p>
<p>To summarize, I finally did something productive with Ruby! I solved my real-world problem (not that big for sure), I solved it simple, fast and elegant. And I learned a lot along the way.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/77/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=77&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2010/11/29/first-success-with-heroku/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>

		<media:content url="http://shishkin.files.wordpress.com/2010/11/wlemoticon-winkingsmile.png" medium="image">
			<media:title type="html">Winking smile</media:title>
		</media:content>
	</item>
		<item>
		<title>CloudCamp Düsseldorf – November 25, 2010</title>
		<link>http://shishkin.wordpress.com/2010/10/14/cloudcamp-dusseldorf-%e2%80%93-november-25-2010/</link>
		<comments>http://shishkin.wordpress.com/2010/10/14/cloudcamp-dusseldorf-%e2%80%93-november-25-2010/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 16:48:39 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2010/10/14/cloudcamp-dusseldorf-%e2%80%93-november-25-2010</guid>
		<description><![CDATA[Save the date! On Thursday, November 25, 2010 in Düsseldorf Open Space CloudCamp un-conference is taking place. The main theme of the event is Cloud Computing as you may guess And the Open Space format guarantees a lot of fun! The camp starts at 13:00 and will be kindly hosted by employer – MT AG [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=3&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!552" class="bvMsg">
<p>Save the date! On Thursday, November 25, 2010 in Düsseldorf Open Space <a href="http://cloudcamp.org/dusseldorf">CloudCamp</a> un-conference is taking place. The main theme of the event is <a href="http://en.wikipedia.org/wiki/Cloud_Computing">Cloud Computing</a> as you may guess <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  And the <a href="http://en.wikipedia.org/wiki/Open_Space_Technology">Open Space</a> format guarantees a lot of fun! The camp starts at 13:00 and will be kindly hosted by employer – <a href="http://www.mt-ag.com">MT AG</a> in Ratingen (<a href="http://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=MT+AG,+Balcke-D%C3%BCrr-Allee+9,+40882+Ratingen,+Deutschland&amp;sll=51.291553,6.866605&amp;sspn=0.009111,0.022724&amp;ie=UTF8&amp;hq=MT+AG,&amp;hnear=Balcke-D%C3%BCrr-Allee+9,+Ratingen+40882+Ratingen,+Mettmann,+Nordrhein-Westfalen,+Germany&amp;ll=51.298852,6.870575&amp;spn=0.291514,0.727158&amp;z=11">map</a>). Thanks to MT AG the event is completely <strong>free</strong> for attendees.</p>
<p>The agenda is not carved in stone yet, but will be something like this:<br />13:00 Registration, networking<br />13:30-18:00 TBD (Keynote, lightning talks, open space sessions)<br />18:00 Networking</p>
<p>So, if you are near Düsseldorf on November, 25 and are interested in Cloud Computing (no matter which vendor or technology you prefer), I really don’t understand why still aren’t you on the <a href="http://cloudcamp-dusseldorf-2010.eventbrite.com/">attendee list</a>?! An Open Space event is only successful if enough passionate people attend it, please help us make Cloud Camp a success. Register at <a title="http://cloudcamp.org/dusseldorf" href="http://cloudcamp.org/dusseldorf">http://cloudcamp.org/dusseldorf</a>.</p>
<p>And we are waiting for your lightning talk proposals. Mail me: sergey.shishkin [ at ] mt-ag.com.</p>
<p><strong><font color="#ff0000">Update [22.11.2010]: CloudCamp Düsseldorf is postponed to undefined date due to the lack of registrations. Sorry.</font></strong></p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=3&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2010/10/14/cloudcamp-dusseldorf-%e2%80%93-november-25-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>.NET Open Space Süd in Karlsruhe</title>
		<link>http://shishkin.wordpress.com/2010/06/23/net-open-space-sud-in-karlsruhe/</link>
		<comments>http://shishkin.wordpress.com/2010/06/23/net-open-space-sud-in-karlsruhe/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 20:59:24 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2010/06/23/net-open-space-sud-in-karlsruhe</guid>
		<description><![CDATA[Envy me, I spent last weekend in Karlsruhe with some of Germany’s smartest and most passionate .NET developers. Big thanks for that to organizers of the .NET Open Space Süd and all the participants. I feel inspired and am full of ideas again. The anti-conference started for me with a great functional programming session with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=8&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!548" class="bvMsg">
<p>Envy me, I spent last weekend in Karlsruhe with some of Germany’s smartest and most passionate .NET developers. Big thanks for that to <a href="http://karlsruhe.netopenspace.de/2010/Organisation.ashx">organizers</a> of the <a href="http://karlsruhe.netopenspace.de/2010/">.NET Open Space Süd</a> and <a href="http://karlsruhe.netopenspace.de/2010/Teilnehmer.ashx">all the participants</a>. I feel inspired and am full of ideas again.</p>
<p>The anti-conference started for me with a great <strong>functional programming</strong> session with <a href="http://twitter.com/sforkmann">@sforkmann</a> introducing <strong>Monads</strong>. The topic was so great that immediately after the session many attendees started implementing the Maybe monad in C#. And monads accompanied us all the weekend in all sort of jokes <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Functional programming continued with a session on <strong>Reactive Extensions</strong>, where I introduced the framework as a new way of doing .NET events and async programming. After that <a href="http://twitter.com/sforkmann">@sforkmann</a> supported the topic with JavaScript samples and an introduction of <strong>IQbservable</strong> followed by a great discussion.</p>
<p>Two sessions were focused on <strong>software specifications, BDD, and ATDD</strong>. I was representing ATDD and FitNesse camp, however to be more effective I should bring more hands-on examples to break through code-centric developer heads <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Anyways, the “<strong>BDD Shootout</strong>” session was really inspiring and code-intense. Not a big surprise with people like <a href="http://twitter.com/agross">@agross</a> (MSpec), <a href="http://twitter.com/sforkmann">@sforkmann</a> (NaturalSpec), and <a href="http://twitter.com/BjoernRochel">@BjoernRochel</a> (XUnit.BDDExtensions).Although the guys were skeptical about a comparison session at first, the session was a real success: win-win-win for all three frameworks <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>NOS Süd finished with a <strong>Coding Dojo</strong> facilitated by <a href="http://twitter.com/ilkerde">@ilkerde</a>. After that dojo (my 3rd only) I still have some mixed feelings. I was looking for learning any new design/coding practices but the only major thing I learned was the importance and complexity of selecting members for a development team. After a while it’s not fun anymore to argue about whether we do TDD or BDUF… Still it was very good experience for me, and I think for others who took part. Thank you Ilker!</p>
<p>If Open Space is so great because of the “coffee break”-like experience, imagine the coffee breaks at Open Space! Of course the biggest part of NOS Süd (at least for me) were it’s parties and breaks when I chatted with many bright and passionate folks and it was the most inspiring and enjoyable experience of the weekend!</p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=8&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2010/06/23/net-open-space-sud-in-karlsruhe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>DotNet Cologne 2010: WCF4 Live Coding with GitHub</title>
		<link>http://shishkin.wordpress.com/2010/06/01/dotnet-cologne-2010-wcf4-live-coding-with-github/</link>
		<comments>http://shishkin.wordpress.com/2010/06/01/dotnet-cologne-2010-wcf4-live-coding-with-github/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 20:25:25 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2010/06/01/dotnet-cologne-2010-wcf4-live-coding-with-github</guid>
		<description><![CDATA[Another great .NET community event has taken place on last Friday – DotNet Cologne 2010. Big thanks to all the attendees, speakers, sponsors and organizers for making it happen. The event was a huge success. And I even got a chance to speak there about improvements and novelties of Windows Communication Foundation 4.0. To make [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=9&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!546" class="bvMsg">
<p>Another great .NET community event has taken place on last Friday – <a href="http://dotnet-cologne.de">DotNet Cologne 2010</a>. Big thanks to all the attendees, speakers, sponsors and organizers for making it happen. The event was a huge success. And I even got a chance to speak there about improvements and novelties of Windows Communication Foundation 4.0.</p>
<p>To make it more fun and educating at the same time I decided to do an experiment: use <a href="http://git-scm.com/">Git</a>–a <a href="http://en.wikipedia.org/wiki/Distributed_revision_control">distributed version control system</a>–in combination with live coding. I took quite a fast coding pace aimed for experienced WCF developers, showing them what’s really new about WCF4. But to make the code samples more accessible for the beginners and to make my coding “traceable” I committed each exercise to a local Git repository right during my presentation and pushed them all in the cloud to <a href="http://github.com/shishkin/dotnet-cologne-2010">GitHub</a>.</p>
<p>A local Git repository makes it really easy to save your coding progress, while code hosting platform in the cloud like GitHub allows you to share and collaborate on your code with others. So now anybody can review <a href="http://github.com/shishkin/dotnet-cologne-2010/commits/">the commits history</a> of my live WCF4 demo and easily grasp for example <a href="http://github.com/shishkin/dotnet-cologne-2010/commit/b0295be94487cd60c9eab18ffda7b3398d801c4b">what it takes</a> to call a dynamically discovered service via a generic channel factory.</p>
<p>I liked the experiment myself and also got some positive feedback from the audience regarding the usage of Git. On the downside I ran out of time and had to leave a couple of interesting demos aside, though not because of Git but poor time planning. Lessons learned, promise to improve next time <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  <a href="http://github.com/shishkin">Join me</a> on GitHub. Your feedback is always welcome!</p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=9&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2010/06/01/dotnet-cologne-2010-wcf4-live-coding-with-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Timer Revisited</title>
		<link>http://shishkin.wordpress.com/2010/05/09/timer-revisited/</link>
		<comments>http://shishkin.wordpress.com/2010/05/09/timer-revisited/#comments</comments>
		<pubDate>Sun, 09 May 2010 20:42:22 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2010/05/09/timer-revisited</guid>
		<description><![CDATA[Last time I wrote some GUI code with time dependencies (like refresh data every 10 seconds), I used to extract the timer into an interface with an event and inject that dependency in the presenter/controller/view model. That way the UI logic is kept testable because I can swap the dependency with a test double which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=7&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!532" class="bvMsg">
<p>Last time I wrote some GUI code with time dependencies (like refresh data every 10 seconds), I used to extract the timer into an interface with an event and inject that dependency in the presenter/controller/view model. That way the UI logic is kept testable because I can swap the dependency with a test double which triggers the event manually.</p>
<p>Now I think I have a more elegant solution – an Observable from the <a href="http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx">Reactive Extensions Framework</a>. Take a look at the ViewModel:</p>
<div style="font-family:consolas;background:white;color:black;font-size:10pt;">
<p style="margin:0;"><span style="color:#2b91af;">    1</span>     <span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">SomeViewModel</span></p>
<p style="margin:0;"><span style="color:#2b91af;">    2</span>     &#123;</p>
<p style="margin:0;"><span style="color:#2b91af;">    3</span>         <span style="color:blue;">public</span> SomeViewModel(<span style="color:#2b91af;">IObservable</span>&lt;<span style="color:#2b91af;">Unit</span>&gt; timer)</p>
<p style="margin:0;"><span style="color:#2b91af;">    4</span>         &#123;</p>
<p style="margin:0;"><span style="color:#2b91af;">    5</span>             timer.Subscribe(x =&gt; UpdateUI());</p>
<p style="margin:0;"><span style="color:#2b91af;">    6</span>         &#125;</p>
<p style="margin:0;"><span style="color:#2b91af;">    7</span> </p>
<p style="margin:0;"><span style="color:#2b91af;">    8</span>         <span style="color:blue;">private</span> <span style="color:blue;">void</span> UpdateUI()</p>
<p style="margin:0;"><span style="color:#2b91af;">    9</span>         &#123;</p>
<p style="margin:0;"><span style="color:#2b91af;">   10</span>             <span style="color:green;">//&#8230;</span></p>
<p style="margin:0;"><span style="color:#2b91af;">   11</span>         &#125;</p>
<p style="margin:0;"><span style="color:#2b91af;">   12</span>     &#125;</p>
</div>
<p>Thanks to the generic IObservable&lt;&gt; I can spare an interface. And this is the dependency injection code (no DI-Container in use for simplicity):</p>
<div style="font-family:consolas;background:white;color:black;font-size:10pt;">
<p style="margin:0;"><span style="color:#2b91af;">    1</span> <span style="color:blue;">var</span> timer = <span style="color:#2b91af;">Observable</span></p>
<p style="margin:0;"><span style="color:#2b91af;">    2</span>     .Interval(<span style="color:#2b91af;">TimeSpan</span>.FromSeconds(10))</p>
<p style="margin:0;"><span style="color:#2b91af;">    3</span>     .Select(x =&gt; <span style="color:blue;">new</span> <span style="color:#2b91af;">Unit</span>())</p>
<p style="margin:0;"><span style="color:#2b91af;">    4</span>     .ObserveOnDispatcher();</p>
<p style="margin:0;"><span style="color:#2b91af;">    5</span> </p>
<p style="margin:0;"><span style="color:#2b91af;">    6</span> <span style="color:blue;">var</span> model = <span style="color:blue;">new</span> <span style="color:#2b91af;">SomeViewModel</span>(timer);</p>
</div>
<p>The Interval method creates an infinite sequence of events triggered every 10 seconds (line 2). The generated sequence is typed as IObservable&lt;long&gt;, so I need to convert it to a “typeless” IObservale&lt;Unit&gt; in line 3. Unit type comes from functional languages and is supposed to be a typed void. Last thing to do is to tell Rx Framework to raise events on the GUI thread with ObserveOnDispatcher (there is an overloaded ObserveOn method as well). By default events are raised on a thread pool’s thread.</p>
<p>And here is the code to put in a test:</p>
<div style="font-family:consolas;background:white;color:black;font-size:10pt;"></div>
<div style="font-family:consolas;background:white;color:black;font-size:10pt;"></div>
<div style="font-family:consolas;background:white;color:black;font-size:10pt;">
<p style="margin:0;"><span style="color:#2b91af;">    1</span> <span style="color:blue;">var</span> fake = <span style="color:blue;">new</span> <span style="color:#2b91af;">Subject</span>&lt;<span style="color:#2b91af;">Unit</span>&gt;();</p>
<p style="margin:0;"><span style="color:#2b91af;">    2</span> </p>
<p style="margin:0;"><span style="color:#2b91af;">    3</span> <span style="color:blue;">var</span> model = <span style="color:blue;">new</span> <span style="color:#2b91af;">SomeViewModel</span>(fake);</p>
<p style="margin:0;"><span style="color:#2b91af;">    4</span> </p>
<p style="margin:0;"><span style="color:#2b91af;">    5</span> fake.Publish(<span style="color:blue;">new</span> <span style="color:#2b91af;">Unit</span>());</p>
</div>
<p>Very simple as well. Subject is a very useful generic class which implements both the IObservable&lt;&gt; and IObserver&lt;&gt;, so you can pass an instance of Subject to a method expecting IObservable&lt;&gt; and then Publish into that sequence thanks to the IObserver&lt;&gt; implementation.</p>
<p>So, if think to write an interface with an event, that you want to pass somewhere as a dependency, think again. Maybe the generic IObservable&lt;&gt; interface will do the trick much simpler. Moreover, client code can leverage the full API of Rx provided through extension methods to IObservable&lt;&gt;, so that the client can for example throttle events or combine them in many different ways. Rx is very powerful.</p>
<p>As the next step I’m thinking of abstracting a clock as IEnumerable&lt;DateTime&gt; instead of writing a custom IClock interface or using a global variable like MyTime.Now or much worse DateTime.Now.</p>
<p>What do you think about time and timer dependencies?</p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=7&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2010/05/09/timer-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Change</title>
		<link>http://shishkin.wordpress.com/2010/04/04/change/</link>
		<comments>http://shishkin.wordpress.com/2010/04/04/change/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 21:16:11 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2010/04/04/change</guid>
		<description><![CDATA[I have already written about a change I was part of last year. Being a coach after two years of product development made me realize what my true passion in software development is. It’s continuous improvement – Kaizen. While being in a product development team you have to measure your pace with the team’s pace [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=12&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!507" class="bvMsg">
<p>I <a href="http://sergeyshishkin.spaces.live.com/Blog/cns!9F19E53BA9C1D63F!447.entry">have already written</a> about a change I was part of last year. Being a coach after two years of product development made me realize what my true passion in software development is. It’s continuous improvement – <a href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a>. While being in a product development team you have to measure your pace with the team’s pace and not to run too far ahead for too long – the team should be able to keep up. And you are bound to the technologies of a particular application type – no WPF for a web-service app etc. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>After long thoughts I finally decided to go in consulting. WPF wasn’t the main reason, of course <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I just plan to meet <em>different projects</em> and <em>different teams</em>. This is what should bring me my Kaizen pace, at least in my beliefs. So, since April I’m part of <a href="http://www.mt-ag.com/">Managing Technology</a> team, looking forward to new projects and new experiences.</p>
<p>And <a href="http://twitter.com/sshishkin">I’m on twitter</a> now <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=12&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2010/04/04/change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Mono as a lightweight .NET runtime</title>
		<link>http://shishkin.wordpress.com/2009/12/24/mono-as-a-lightweight-net-runtime/</link>
		<comments>http://shishkin.wordpress.com/2009/12/24/mono-as-a-lightweight-net-runtime/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 19:41:25 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/12/24/mono-as-a-lightweight-net-runtime</guid>
		<description><![CDATA[How big is .NET 3.5 runtime? The full redistributable package for x86, x64 and ia64 platforms including 2.0 and 3.0 is about 200 MB. Not a single user needs to download and install it all: somebody already has 2.0 or maybe even 3.0, and nobody is going to install all the supported architectures (x86 etc.) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=6&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!462" class="bvMsg">
<p>How big is .NET 3.5 runtime? The full redistributable package for x86, x64 and ia64 platforms including 2.0 and 3.0 <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6">is about 200 MB</a>. Not a single user needs to download and install it all: somebody already has 2.0 or maybe even 3.0, and nobody is going to install all the supported architectures (x86 etc.) on a single machine. So this huge download is only intended to be distributed on a CD or DVD with applications requiring .NET, when you don’t know in advance what platform you are targeting. If you do know the user’s platform in advance, you can <a href="http://blogs.msdn.com/astebner/archive/2007/12/03/6646794.aspx">downstrip the package</a> down to some 20-60 MB. Which is pretty good.</p>
<p>Anyways .NET Framework has to be installed using Windows Installer, and it’s a quite invasive way of deploying an application. Can somebody XCOPY-install .NET Framework? I suppose it to be very tricky if possible at all. And we have those copyrights and license agreements saying that Windows Installer is the only legal way to deploy .NET runtime to users.</p>
<p>All this problems might seem illusive, since Microsoft is pushing .NET Framework through Windows Update and starting from Windows XP SP3 and Vista RTM users get at least .NET 2.0 installed. But the e-health market, my company works in, is very conservative (at least in Germany) and users are still running Windows 2000 with windows apps emulating DOS-like GUI. It is horrible! We can not rely on any Windows Updates or even a live and fast internet connection to run the .NET Framework setup bootstrapper. Moreover, our software, a web service, should be deployed as an integrated component into some third party application (almost definitely not a .NET one). And the more complex our deployment story is, the less partners would want to embed our software into their products.</p>
<p><strong>Are there any alternatives out there?</strong></p>
<p>One can turn to virtualization solutions. But instead of hardware virtualization, one can virtualize the .NET runtime. Using <a href="http://www.xenocode.com/Technology/">Xenocode Postbuild</a> it is possible to compile a managed application into an unmanaged one with embedded fully functioning .NET runtime. The size of an app starts from <a href="http://www.xenocode.com/Support/Kb/afmviewfaq.aspx?faqid=5">11 MB</a> for a simple Hello World App and is from 40 MB in a real world scenario (without deleting unused .NET code, so that reflection can work properly). And this is pretty good, although not cheap.</p>
<p><strong>Here comes Mono</strong></p>
<p>There is also the <a href="http://www.mono-project.com/">Mono Project</a> out there, which contains an open source runtime compatible with .NET CLR on binary level. It means that you can run apps compiled for .NET CLR on Mono CLR without recompilation. Mono’s cross-platform nature makes it much simpler in what it means to deploy the runtime. You just have to fulfill the requirements of the <a href="http://www.mono-project.com/Licensing">LGPL</a> or obtain a commercial license from Novell.</p>
<p><strong>How it works?</strong></p>
<p>So I downloaded and installed the full <a href="http://www.go-mono.com/mono-downloads/download.html">Mono for Windows</a> package and started to play with it. My aim was to get a minimal subset of Mono to be able to run the Mono’s <a href="http://www.mono-project.com/ASP.NET">XSP development web server</a> and its test web site (\lib\xsp\test\).</p>
<p>The result is the following structure of 45 files only 21 MB in size total:</p>
<blockquote><p>\bin\libglib-2.0-0.dll     <br />\bin\libgthread-2.0-0.dll      <br />\bin\mono.dll      <br />\bin\mono.exe      <br />\bin\run.cmd      <br />\etc\mono\2.0\Browsers      <br />\etc\mono\2.0\DefaultWsdlHelpGenerator.aspx      <br />\etc\mono\2.0\machine.config      <br />\etc\mono\2.0\settings.map      <br />\etc\mono\2.0\web.config      <br />\etc\mono\2.0\Browsers\Compat.browser      <br />\lib\mono\2.0\Accessibility.dll      <br />\lib\mono\2.0\gmcs.exe      <br />\lib\mono\2.0\gmcs.exe.config      <br />\lib\mono\2.0\Mono.Data.Tds.dll      <br />\lib\mono\2.0\Mono.Messaging.dll      <br />\lib\mono\2.0\Mono.Posix.dll      <br />\lib\mono\2.0\Mono.Security.dll      <br />\lib\mono\2.0\Mono.Web.dll      <br />\lib\mono\2.0\Mono.WebBrowser.dll      <br />\lib\mono\2.0\Mono.WebServer2.dll      <br />\lib\mono\2.0\mscorlib.dll      <br />\lib\mono\2.0\System.Configuration.dll      <br />\lib\mono\2.0\System.Configuration.Install.dll      <br />\lib\mono\2.0\System.Core.dll      <br />\lib\mono\2.0\System.Data.dll      <br />\lib\mono\2.0\System.Data.Linq.dll      <br />\lib\mono\2.0\System.dll      <br />\lib\mono\2.0\System.Drawing.dll      <br />\lib\mono\2.0\System.EnterpriseServices.dll      <br />\lib\mono\2.0\System.IdentityModel.dll      <br />\lib\mono\2.0\System.IdentityModel.Selectors.dll      <br />\lib\mono\2.0\System.Messaging.dll      <br />\lib\mono\2.0\System.Runtime.Serialization.dll      <br />\lib\mono\2.0\System.Security.dll      <br />\lib\mono\2.0\System.ServiceModel.dll      <br />\lib\mono\2.0\System.ServiceModel.Web.dll      <br />\lib\mono\2.0\System.Transactions.dll      <br />\lib\mono\2.0\System.Web.dll      <br />\lib\mono\2.0\System.Web.Extensions.dll      <br />\lib\mono\2.0\System.Web.Services.dll      <br />\lib\mono\2.0\System.Windows.Forms.dll      <br />\lib\mono\2.0\System.Xml.dll      <br />\lib\mono\2.0\System.Xml.Linq.dll      <br />\lib\mono\2.0\xsp2.exe</p>
</blockquote>
<p>It is still far from perfection (why ASP.NET applications need System.Windows.Forms, for example), but it is a good proof of concept. I’m only a newbie to the whole world of Mono. But now I can start a web site on a windows machine without any .NET Framework installed from a website folder just like this:</p>
<blockquote><p>..\mono-mini-2.6.1\bin\run.cmd ..\mono-mini-2.6.1\lib\mono\2.0\xsp2.exe &#8211;root . &#8211;port 8080 &#8211;applications /:.</p>
</blockquote>
<p>In order to make it repeatable, I made a <a href="http://cid-9f19e53ba9c1d63f.skydrive.live.com/self.aspx/Public/Code/mono-mini.zip">batch script</a> that creates this Mono-mini package out of a real Mono installation. It can be used like this:</p>
<blockquote><p>mono-mini.cmd c:\work\ExternalBin\Mono-2.6.1 c:\temp\mono-mini-2.6.1</p>
</blockquote>
<p><strong>Summary</strong></p>
<p>I’ve got an XCOPY-deployable .NET runtime for my ASP.NET web services with 3.5 support in under 21 MB (7.5 MB zipped) which <a href="http://www.codinghorror.com/blog/archives/000818.html">works on my machine</a> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  What now?</p>
<ul>
<li>I need to test it thoroughly with the apps I will run on it. It is still possible that some components are missing.</li>
<li>Also I might remove the Windows Forms dependency but it would require me to patch the machine.config and the global web.config though.</li>
<li>All this bin\, lib\, etc\ coming from the linux-background of Mono could easily be simplified for the Mono-mini package.</li>
<li>Some licensing questions are yet to be clarified. When licensed under LGPL, Mono is not allowed to be embedded into a non-LGPL executable, AFAIK. So, making deployment even more simple with Xenocode (only as an assembly repackaging solution) or <a href="http://madebits.com/netz/index.php">.NETZ</a> (for the same purpose) is not possible without purchasing the commercial license from Novell.</li>
</ul>
<div style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a href="http://technorati.com/tags/mono" rel="tag">mono</a></div>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=6&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/12/24/mono-as-a-lightweight-net-runtime/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Story Of Change</title>
		<link>http://shishkin.wordpress.com/2009/12/16/story-of-change/</link>
		<comments>http://shishkin.wordpress.com/2009/12/16/story-of-change/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 17:15:24 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/12/16/story-of-change</guid>
		<description><![CDATA[Friday was a huge day for me! My team officially announced that we a going to implement Scrum. This was by no means an easy change. It took us 9 month and I just want to save this story in my blog for the records. Why Change? In April 2009 I was architect in a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=13&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!447" class="bvMsg">
<p>Friday was a huge day for me! My team officially announced that we a going to implement Scrum. This was by no means an easy change. It took us 9 month and I just want to save this story in my blog for the records.</p>
<h4>Why Change?</h4>
<p>In April 2009 I was architect in a company using “waterfall” process with 3 month release cycles in a team of 40 people separated in 3 full blown departments of “product management”, “development” and “quality assurance” with its own organizational structures and typical “us against them” mindset. In addition to that there are also technical writers, who have to write all the user manuals on weekends after the code is implemented, and support engineers, who keep distracting developers with all those “urgent customer issues”.</p>
<p>PM was aimed to complete the software specifications before the “spec-freeze” milestone and throw it at DEV over the fence. Specs were long boring documents with faked GUI screenshots and lots of ambiguity. While PMs were writing specs, DEV made housekeeping, fixing bugs or writing code that DEV thought will be useful in future. With a spec at hands DEV coded like crazy to hit the deadline. Then QA started thoroughly comparing the spec with the software and filing found bugs or what QA thought was a bug. Nobody had time to make his or her job right.</p>
<p>After each release we heard the same annoying phrase from our management: “It was the toughest release ever, but we did it!” It supposed to be motivating <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>After an unfortunate try to present Scrum with all its “pigs” and “chickens” to QA and PM, the word “Scrum” by itself became a taboo…</p>
<p>At that point in spring 2009 I was about to leave, especially seeing some of my colleagues leaving too. But after some management rearrangements in DEV department, I decided to give it a try to facilitate the change to Agile before I leave.</p>
<h4>What Changed?</h4>
<p>Today we have:</p>
<ul>
<li>Sprints, which are 2 weeks long and relative consistent in terms of work committed and work delivered.</li>
<li>Teams consisting of DEV and QA sitting together in one room (pro team), communicating with each other and helping each other.</li>
<li>Teams estimate requirements and <em>pull</em> them from the Product Backlog into their Sprint Backlogs during Sprint Planning meetings.</li>
<li>Teams decide <em>how </em>requirements are going to be implemented.</li>
<li>Specification is emerging during the Sprint as a joint effort of PM, DEV and QA in form of <a href="http://fitnesse.org">FitNesse</a> tests.</li>
<li>Technical writers use Sprint deliverables immediately and have an opportunity to schedule their work accordingly.</li>
<li>All “urgent customer issues” go first through the Product Owner, who is responsible for prioritizing them and putting into the Product Backlog. If it is really urgent, it goes directly to the Fast Lane on the Task Board to be <em>pulled</em> by a team member.</li>
<li>A few Certified ScrumMasters and Product Owners.</li>
</ul>
<h4>How?</h4>
<p>These are all things that we practice for some time already. Although not everything from the list works frictionless. Nonetheless the “change” on Friday was more like a Scrum training for all teams and an announcement “Oh, by the way, we are actually doing Scrum already” <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>It was an incredibly hard change, I must say. And it did not come by my will only. It could not happen without support from several people in our company who were willing to listen. Together we did it. But there are still a lot of things to do on the way to Agile. The only thing I know for sure is that there is no way back to the stone age of waterfall process anymore.</p>
<p>I write all this because since then Agile has become my topic of interest and I hope to be writing more on it in future. I stumbled upon many obstacles while bringing agile ideas to different people and it was always fascinating and invaluable experience. Stay tuned <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a href="http://technorati.com/tags/agile" rel="tag">agile</a>,<a href="http://technorati.com/tags/scrum" rel="tag">scrum</a></div>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=13&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/12/16/story-of-change/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Reactive Extensions @DNUGK</title>
		<link>http://shishkin.wordpress.com/2009/12/11/reactive-extensions-dnugk/</link>
		<comments>http://shishkin.wordpress.com/2009/12/11/reactive-extensions-dnugk/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 14:48:34 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/12/11/reactive-extensions-dnugk</guid>
		<description><![CDATA[Update: last time I forgot to put the usage example of the ExpectedSequence extension method. Fixed now. See the end of the post. Previously introduced in Siverlight Toolkit, Microsoft Reactive Extensions (aka Rx) is making its way to be shipped within .NET Framework 4 now. Albert Weinert gave me an opportunity to demonstrate some of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=14&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!443" class="bvMsg">
<p><font color="#ff0000">Update: last time I forgot to put the usage example of the ExpectedSequence extension method. Fixed now. See the end of the post.</font></p>
<p>Previously introduced in Siverlight Toolkit, Microsoft Reactive Extensions (aka Rx) is making its way to be shipped within .NET Framework 4 now. <a href="http://der-albert.com">Albert Weinert</a> gave me an opportunity to demonstrate some of my geeky experiments with Rx on the DNUGK meeting yesterday.</p>
<p>The following API comparison between the well-known .NET iterator pattern and the new Rx observer summarizes the intent of Rx: provide API to work with events similar to that of collections, while preserving reactive nature (push-model) of events.</p>
<p><img src="http://shishkin.files.wordpress.com/2009/12/c42878f0a3eed535fcd019ae0916fef9.png?w=300" border="0" /> </p>
<p>That means that we can do the same set-based operations with events as we already do with collections, e.g. Select, Concat, Join, Where, Merge etc. I must admit at this point that by events I don’t mean .NET events but rather more general occurrences of asynchronous nature, speaking Rx – anything that implements IObservable can be treated as an event and even participate in Linq queries.</p>
<p>To following example will make things more concrete:</p>
<div style="font-size:12pt;background:white;color:black;font-family:consolas;">
<p style="margin:0;"><span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">KeySequencer</span></p>
<p style="margin:0;">&#123;</p>
<p style="margin:0;">    <span style="color:blue;">private</span> <span style="color:blue;">readonly</span> <span style="color:#2b91af;">Subject</span>&lt;<span style="color:blue;">char</span>&gt; keys = <span style="color:blue;">new</span> <span style="color:#2b91af;">Subject</span>&lt;<span style="color:blue;">char</span>&gt;();</p>
<p style="margin:0;">    <span style="color:blue;">private</span> <span style="color:blue;">bool</span> shouldStop;</p>
<p style="margin:0;"> </p>
<p style="margin:0;">    <span style="color:blue;">public</span> <span style="color:#2b91af;">IObservable</span>&lt;<span style="color:blue;">char</span>&gt; Keys</p>
<p style="margin:0;">    &#123;</p>
<p style="margin:0;">        <span style="color:blue;">get</span> &#123; <span style="color:blue;">return</span> keys; &#125;</p>
<p style="margin:0;">    &#125;</p>
<p style="margin:0;"> </p>
<p style="margin:0;">    <span style="color:blue;">public</span> <span style="color:blue;">void</span> Start()</p>
<p style="margin:0;">    &#123;</p>
<p style="margin:0;">        <span style="color:blue;">while</span> (!shouldStop)</p>
<p style="margin:0;">        &#123;</p>
<p style="margin:0;">            <span style="color:blue;">var</span> key = <span style="color:#2b91af;">Console</span>.ReadKey(<span style="color:blue;">false</span>).KeyChar;</p>
<p style="margin:0;">            keys.OnNext(key);</p>
<p style="margin:0;">        &#125;</p>
<p style="margin:0;"> </p>
<p style="margin:0;">        <span style="color:#2b91af;">Console</span>.WriteLine(<span style="color:#a31515;">&quot;exit&quot;</span>);</p>
<p style="margin:0;">    &#125;</p>
<p style="margin:0;"> </p>
<p style="margin:0;">    <span style="color:blue;">public</span> <span style="color:blue;">void</span> Stop()</p>
<p style="margin:0;">    &#123;</p>
<p style="margin:0;">        shouldStop = <span style="color:blue;">true</span>;</p>
<p style="margin:0;">    &#125;</p>
<p style="margin:0;">&#125;</p>
</p></div>
<p>The KeySequencer class publishes all the keys that user presses as a sequence of IObservable events via its Keys property. Creating an IObservable is in fact very simple – I use the Subject class from Rx that is an “observable observer”. As an observer it has an OnNext method where I can push keys into, and as an observable it forwards them further to everyone who has subscribed down the line. Note that key events are of type Char. As I said, everything can be an event!</p>
<p>Well, the more interesting part is what we can do with those events published by the KeySequencer. First of all we can subscribe to them:</p>
<div style="font-size:12pt;background:white;color:black;font-family:consolas;">
<p style="margin:0;"><span style="color:blue;">var</span> keySequencer = <span style="color:blue;">new</span> <span style="color:#2b91af;">KeySequencer</span>();</p>
<p style="margin:0;"> </p>
<p style="margin:0;">keySequencer.Keys.Subscribe(<span style="color:#2b91af;">Console</span>.WriteLine);</p>
<p style="margin:0;"> </p>
<p style="margin:0;">keySequencer.Start();</p>
</p></div>
<p>Now every character will be put out to the console twice – first when it’s pressed and after that when the subscribed Console.WriteLine method has been called. Still not impressive? What about that?:</p>
<div style="font-size:12pt;background:white;color:black;font-family:consolas;">
<p style="margin:0;"><span style="color:#2b91af;">Func</span>&lt;<span style="color:blue;">char</span>, <span style="color:#2b91af;">IObservable</span>&lt;<span style="color:blue;">char</span>&gt;&gt; pressed =</p>
<p style="margin:0;">    x =&gt; keySequencer.Keys.Where(key =&gt; key == x);</p>
<p style="margin:0;"><span style="color:#2b91af;">Func</span>&lt;<span style="color:blue;">char</span>, <span style="color:#2b91af;">IObservable</span>&lt;<span style="color:blue;">char</span>&gt;&gt; notPressed =</p>
<p style="margin:0;">    x =&gt; keySequencer.Keys.Where(key =&gt; key != x);</p>
<p style="margin:0;"><span style="color:#2b91af;">Func</span>&lt;<span style="color:blue;">char</span>, <span style="color:#2b91af;">IObservable</span>&lt;<span style="color:blue;">char</span>&gt;&gt; followedBy = x</p>
<p style="margin:0;">    =&gt; pressed(x).Take(1).Until(notPressed(x));</p>
<p style="margin:0;"> </p>
<p style="margin:0;"><span style="color:blue;">var</span> exit =</p>
<p style="margin:0;">    <span style="color:blue;">from</span> e <span style="color:blue;">in</span> pressed(<span style="color:#a31515;">&#8216;e&#8217;</span>)</p>
<p style="margin:0;">    <span style="color:blue;">from</span> x <span style="color:blue;">in</span> followedBy(<span style="color:#a31515;">&#8216;x&#8217;</span>)</p>
<p style="margin:0;">    <span style="color:blue;">from</span> i <span style="color:blue;">in</span> followedBy(<span style="color:#a31515;">&#8216;i&#8217;</span>)</p>
<p style="margin:0;">    <span style="color:blue;">from</span> t <span style="color:blue;">in</span> followedBy(<span style="color:#a31515;">&#8216;t&#8217;</span>)</p>
<p style="margin:0;">    <span style="color:blue;">select</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">Unit</span>();</p>
<p style="margin:0;"> </p>
<p style="margin:0;">exit.Subscribe(x =&gt; keySequencer.Stop());</p>
</p></div>
<p> Here we define four further event sequences (pressed(‘e’), followedBy(‘x), followedBy(‘i’) and followedBy(‘t’)) and combine them into another event sequence (exit) which happens when the user types “exit”, so we can stop listening to keys being pressed and quit the program.
<p> </p>
<p>A further logical step could be to generalize the “expected sequence” pattern, of course with Linq in a nicely functional style:</p>
<div style="font-size:12pt;background:white;color:black;font-family:consolas;">
<p style="margin:0;"><span style="color:blue;">public</span> <span style="color:blue;">static</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">SequenceExtensions</span></p>
<p style="margin:0;">&#123;</p>
<p style="margin:0;">    <span style="color:blue;">public</span> <span style="color:blue;">static</span> <span style="color:#2b91af;">IObservable</span>&lt;T&gt; SelectEqualTo&lt;T&gt;(       <br />        <span style="color:blue;">this</span> <span style="color:#2b91af;">IObservable</span>&lt;T&gt; source,       <br />        T expected)</p>
<p style="margin:0;">    &#123;</p>
<p style="margin:0;">        <span style="color:blue;">return</span> source.Where(x =&gt; Equals(expected, x));</p>
<p style="margin:0;">    &#125;</p>
<p style="margin:0;"> </p>
<p style="margin:0;">    <span style="color:blue;">public</span> <span style="color:blue;">static</span> <span style="color:#2b91af;">IObservable</span>&lt;T&gt; SelectNotEqualTo&lt;T&gt;(       <br />        <span style="color:blue;">this</span> <span style="color:#2b91af;">IObservable</span>&lt;T&gt; source,       <br />        T expected)</p>
<p style="margin:0;">    &#123;</p>
<p style="margin:0;">        <span style="color:blue;">return</span> source.Where(x =&gt; !Equals(expected, x));</p>
<p style="margin:0;">    &#125;</p>
<p style="margin:0;"> </p>
<p style="margin:0;">    <span style="color:blue;">public</span> <span style="color:blue;">static</span> <span style="color:#2b91af;">IObservable</span>&lt;T&gt; FollowedBy&lt;T&gt;(       <br />        <span style="color:blue;">this</span> <span style="color:#2b91af;">IObservable</span>&lt;T&gt; source,       <br />        T expected)</p>
<p style="margin:0;">    &#123;</p>
<p style="margin:0;">        <span style="color:blue;">return</span> SelectEqualTo(source, expected)       <br />            .Take(1).Until(SelectNotEqualTo(source, expected));</p>
<p style="margin:0;">    &#125;</p>
<p style="margin:0;"> </p>
<p style="margin:0;">    <span style="color:blue;">public</span> <span style="color:blue;">static</span> <span style="color:#2b91af;">IObservable</span>&lt;<span style="color:#2b91af;">IEnumerable</span>&lt;T&gt;&gt; ExpectedSequence&lt;T&gt;(</p>
<p style="margin:0;">        <span style="color:blue;">this</span> <span style="color:#2b91af;">IObservable</span>&lt;T&gt; source,</p>
<p style="margin:0;">        <span style="color:#2b91af;">IEnumerable</span>&lt;T&gt; expectedSequence)</p>
<p style="margin:0;">    &#123;</p>
<p style="margin:0;">        <span style="color:blue;">return</span> expectedSequence</p>
<p style="margin:0;">            .Select((item, index) =&gt; index == 0 ?</p>
<p style="margin:0;">                SelectEqualTo(source, item) :</p>
<p style="margin:0;">                FollowedBy(source, item))</p>
<p style="margin:0;">            .Aggregate(</p>
<p style="margin:0;">                <span style="color:#2b91af;">Observable</span>.Return(<span style="color:blue;">default</span>(T)),</p>
<p style="margin:0;">                (accumulator, item) =&gt; accumulator.SelectMany(_ =&gt; item))</p>
<p style="margin:0;">            .Select(_ =&gt; expectedSequence);</p>
<p style="margin:0;">    &#125;</p>
<p style="margin:0;">&#125;</p>
</p></div>
<p>Now I can turn the “exit” sequence into this:</p>
<div style="font-size:12pt;background:white;color:black;font-family:consolas;">
<p style="margin:0;"><span style="color:blue;">var</span> exit = keySequencer.Keys.ExpectedSequence(&quot;exit&quot;);</p>
<p style="margin:0;">exit.Subscribe(x =&gt; keySequencer.Stop());</p>
</p></div>
<p>And of course it works same way for any sequences. Just put a string as a parameter for character a sequence (since String implements IEnumerable&lt;char&gt;) or any other IEnumerable&lt;T&gt; for an IObservable&lt;T&gt; event source of your choice.</p>
<p>So, that were just my first steps in a new world of reactive programming with Rx. And I really liked it!</p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=14&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/12/11/reactive-extensions-dnugk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>

		<media:content url="http://shishkin.files.wordpress.com/2009/12/c42878f0a3eed535fcd019ae0916fef9.png?w=300" medium="image" />
	</item>
		<item>
		<title>Orthogonal Architecture @NRWCONF’09</title>
		<link>http://shishkin.wordpress.com/2009/08/29/orthogonal-architecture-nrwconf%e2%80%9909/</link>
		<comments>http://shishkin.wordpress.com/2009/08/29/orthogonal-architecture-nrwconf%e2%80%9909/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 12:18:33 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/08/29/orthogonal-architecture-nrwconf%e2%80%9909</guid>
		<description><![CDATA[I want to thank everybody who came yesterday to my talk on orthogonal architecture at NRWCONF’09 in Wuppertal. I got useful feedback from several people yesterday and will try to improve this talk in the future. This 1 hour talk just scratched the surface of agile architecture. Almost every second or so slide in the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=15&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!400" class="bvMsg">
<p>I want to thank everybody who came yesterday to my talk on orthogonal architecture at <a href="http://nrwconf.de/NRW09">NRWCONF’09</a> in Wuppertal. I got useful feedback from several people yesterday and will try to improve this talk in the future.</p>
<p>This 1 hour talk just scratched the surface of agile architecture. Almost every second or so slide in the deck deserves a separate talk. I tried keep the talk concrete though by using code samples depicting the discussed architectural patterns.</p>
<p>For those who wonders what SOLID has to do with orthogonal architecture, look at the slide 10 which says:</p>
<p>Open/Closed Principle</p>
<ul>
<li>Open for extension, but closed for modification </li>
<li>Orthogonal architecture = OCP on the architectural level </li>
</ul>
<p>It turns out that I had to stress this point better in the talk.</p>
<p>You can view the slides here, but you need to be a registered attendee to download them from the <a href="http://nrwconf.de/NRW09">conference website</a>.</p>
<div style="width:425px;text-align:left;"><a title="Orthogonal Architecture" style="display:block;font:14px helvetica,arial,sans-serif;text-decoration:underline;margin:12px 0 3px;" href="http://www.slideshare.net/shishkin/orthogonal-architecture">Orthogonal Architecture</a><a href="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=orthogonalarchitecture-090829070710-phpapp01&#038;stripped_title=orthogonal-architecture">http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=orthogonalarchitecture-090829070710-phpapp01&#038;stripped_title=orthogonal-architecture</a>
<div style="font-size:11px;padding-top:2px;font-family:tahoma,arial;height:26px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/shishkin">shishkin</a>.</div>
</p></div>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=15&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/08/29/orthogonal-architecture-nrwconf%e2%80%9909/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>NHibernate Profiler Demo @DNUGK</title>
		<link>http://shishkin.wordpress.com/2009/08/19/nhibernate-profiler-demo-dnugk/</link>
		<comments>http://shishkin.wordpress.com/2009/08/19/nhibernate-profiler-demo-dnugk/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 09:51:04 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/08/19/nhibernate-profiler-demo-dnugk</guid>
		<description><![CDATA[Yesterday I did a small demo of NHibernate Profiler at DNUGK in Cologne. Here is the sample code and some links: NHProfSamples.zip (2.4 MB) NHibernate Profiler builds (build 380 was used in the demo) User Guide User Voice Discussion Group Thanks again everybody who came yesterday to the UG meeting. Technorati Tags: NHProf,DNUGK<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=16&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!399" class="bvMsg">
<p>Yesterday I did a small demo of <a href="http://nhprof.com">NHibernate Profiler</a> at <a href="http://www.dnug-koeln.de/treffen/user-group-treffen/user-group-treffen-details/article/38-treffen-der-net-user-group-koeln/?tx_ttnews[backPid]=52&amp;cHash=4f27fc3d81">DNUGK</a> in Cologne. Here is the sample code and some links:</p>
<ul>
<li><a href="http://cid-9f19e53ba9c1d63f.skydrive.live.com/self.aspx/Public/Code/NHProfSamples.zip">NHProfSamples.zip (2.4 MB)</a></li>
<li><a href="http://builds.hibernatingrhinos.com/builds/NHProf">NHibernate Profiler builds</a> (build 380 was used in the demo)</li>
<li><a href="http://nhprof.com/Learn/UserGuide">User Guide</a></li>
<li><a href="http://nhprof.uservoice.com/pages/17880-nhibernate-profiler">User Voice</a></li>
<li><a href="http://groups.google.com/group/nhprof">Discussion Group</a></li>
</ul>
<p>Thanks again everybody who came yesterday to the UG meeting.</p>
<div style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a href="http://technorati.com/tags/NHProf" rel="tag">NHProf</a>,<a href="http://technorati.com/tags/DNUGK" rel="tag">DNUGK</a></div>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=16&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/08/19/nhibernate-profiler-demo-dnugk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>The Rx Framework &#8211; Linq2Events</title>
		<link>http://shishkin.wordpress.com/2009/07/24/the-rx-framework-linq2events/</link>
		<comments>http://shishkin.wordpress.com/2009/07/24/the-rx-framework-linq2events/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 13:51:31 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/07/24/the-rx-framework-linq2events</guid>
		<description><![CDATA[That’s cool: IObservable&#60;Event&#60;MouseEventArgs&#62;&#62; draggingEvent = from mouseLeftDownEvent in control.GetMouseLeftDown() from mouseMoveEvent in control.GetMouseMove().Until(control.GetMouseLeftUp()) select mouseMoveEvent; Jafar Husain’s blog contains all the details. Technorati Tags: linq,rx,reactive<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=17&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!397" class="bvMsg">
<p>That’s cool:</p>
<pre>IObservable&lt;Event&lt;MouseEventArgs&gt;&gt; draggingEvent =
     <font color="#0000ff">from</font> mouseLeftDownEvent <font color="#0000ff">in</font> control.GetMouseLeftDown()
     <font color="#0000ff">from</font> mouseMoveEvent <font color="#0000ff">in</font> control.GetMouseMove().Until(control.GetMouseLeftUp())
     <font color="#0000ff">select</font> mouseMoveEvent;</pre>
<p><a href="http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html">Jafar Husain’s blog</a> contains all the details.</p>
<div style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a href="http://technorati.com/tags/linq" rel="tag">linq</a>,<a href="http://technorati.com/tags/rx" rel="tag">rx</a>,<a href="http://technorati.com/tags/reactive" rel="tag">reactive</a></div>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=17&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/07/24/the-rx-framework-linq2events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Architecture.NET Open Space</title>
		<link>http://shishkin.wordpress.com/2009/06/08/architecture-net-open-space/</link>
		<comments>http://shishkin.wordpress.com/2009/06/08/architecture-net-open-space/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 23:12:06 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/06/08/architecture-net-open-space</guid>
		<description><![CDATA[The last weekend I participated in my first open space (anti)conference – Architecture.NET Open Space in Düsseldorf. And I must say: It was my best conference experience ever! There are some results in the conf’s wiki in German. Here I just want to write down some of my observations. A couple of things came up [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=18&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!395" class="bvMsg">
<p>The last weekend I participated in my first <a href="http://en.wikipedia.org/wiki/Open_Space_Technology">open space</a> (anti)conference – <a href="http://archnet.mixxt.de/">Architecture.NET Open Space</a> in Düsseldorf. And I must say: It was my best conference experience ever!</p>
<p>There are <a href="http://archnet.mixxt.de/networks/wiki/index.agenda">some results</a> in the conf’s wiki in German. Here I just want to write down some of my observations.</p>
<p>A couple of things came up in almost every session:</p>
<ul>
<li><a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/"><strong>Clean code</strong></a><strong> and </strong><a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/"><strong>agile design</strong></a><strong> principles.</strong> Software architecture consists of decisions that are hard to change. Agile software architecture aims to make changeable as many decisions as possible. So clean code and agile design principles is the absolute minimum that we don’t want to trade off. This statement is not a dogma – it’s the cornerstone that makes other decisions changeable, it makes agile software architecture possible. </li>
<li><strong>Asynchronous communication and messaging.</strong> This is a very hot topic now. Messaging is what enables the <a href="http://en.wikipedia.org/wiki/Open/closed_principle">Open/Closed Principle</a> on the architectural level. And O/CP is what enables architecture to evolve and does not let it rot. </li>
</ul>
<p>Discussions were sometimes heated and controversial, but always very inspiring and thought-provoking. I already count days till Archnet Open Space next year.</p>
<div style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a href="http://technorati.com/tags/archnet09" rel="tag">archnet09</a></div>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=18&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/06/08/architecture-net-open-space/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>
	</item>
		<item>
		<title>Intentional Software Demo</title>
		<link>http://shishkin.wordpress.com/2009/05/05/intentional-software-demo/</link>
		<comments>http://shishkin.wordpress.com/2009/05/05/intentional-software-demo/#comments</comments>
		<pubDate>Tue, 05 May 2009 09:06:30 +0000</pubDate>
		<dc:creator>Sergey Shishkin</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://shishkin.wordpress.com/2009/05/05/intentional-software-demo</guid>
		<description><![CDATA[I just watched a great demo of Intentional Domain Workbench presented at DSL DevCon about a month ago. Beside the fact that the demoed software frightengly looks like a “silver bullet”, &#34;The Holy Grail” or at least “the future” of software development, it is the first demo of a RAD tool I saw that mentioned [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=19&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!9F19E53BA9C1D63F!382" class="bvMsg">
<p>I just watched a great demo of <a href="http://www.intentsoft.com/">Intentional Domain Workbench</a> presented at <a href="http://www.sellsbrothers.com/conference/">DSL DevCon</a> about a month ago. Beside the fact that the demoed software frightengly looks like a “silver bullet”, &quot;The Holy Grail” or at least “the future” of software development, it is the first demo of a RAD tool I saw that mentioned automated tests integration. See for yourself, it looks a lot like <a href="http://fit.c2.com/">FIT</a> acceptance tests:</p>
<p><a href="http://shishkin.files.wordpress.com/2009/05/169a9e2c8b3163ebe7df4626e0628bbb.jpg" rel="WLPP"><img src="http://shishkin.files.wordpress.com/2009/05/169a9e2c8b3163ebe7df4626e0628bbb.jpg?w=300" border="0" /></a> </p>
<p>Enjoy the <a href="http://msdn.microsoft.com/en-us/oslo/dd727740.aspx">full video at MSDN</a>. It’s just awesome!</p>
<div style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a href="http://technorati.com/tags/DSL" rel="tag">DSL</a>,<a href="http://technorati.com/tags/Intentional+Software" rel="tag">Intentional Software</a>,<a href="http://technorati.com/tags/DSL+DevCon" rel="tag">DSL DevCon</a></div>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shishkin.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shishkin.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shishkin.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shishkin.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/shishkin.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/shishkin.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/shishkin.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/shishkin.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shishkin.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shishkin.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shishkin.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shishkin.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shishkin.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shishkin.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shishkin.wordpress.com&#038;blog=1637928&#038;post=19&#038;subd=shishkin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://shishkin.wordpress.com/2009/05/05/intentional-software-demo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74ebf616d740c2a4f9e28b2418464b75?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">serega</media:title>
		</media:content>

		<media:content url="http://shishkin.files.wordpress.com/2009/05/169a9e2c8b3163ebe7df4626e0628bbb.jpg?w=300" medium="image" />
	</item>
	</channel>
</rss>