<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/2.3.1" --><rss 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/" version="2.0">

<channel>
	<title>Piotr Woloszyn</title>
	<link>http://www.woloszyn.org</link>
	<description>Mumbling about software</description>
	<pubDate>Fri, 10 Jul 2009 17:18:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/PiotrWoloszyn" type="application/rss+xml" /><item>
		<title>High transactional throughput and global transactions</title>
		<link>http://www.woloszyn.org/2009/07/10/high-transactional-throughput-and-global-transactions/</link>
		<comments>http://www.woloszyn.org/2009/07/10/high-transactional-throughput-and-global-transactions/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 17:18:03 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[Functional]]></category>

		<category><![CDATA[Scala]]></category>

		<category><![CDATA[Scalability]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[data grids]]></category>

		<category><![CDATA[throughput]]></category>

		<category><![CDATA[transactional]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/07/10/high-transactional-throughput-and-global-transactions/</guid>
		<description><![CDATA[First of all it&#8217;s Friday afternoon. Yeah! Time for some software musing.
I&#8217;ve been profiling recently a legacy J2EE system in an attempt to improve its performance as the system is expected to get much bigger hit in near future. Turned out that only severe architectural changes and essentially rewriting core components would dramatically improve throughput [...]]]></description>
			<content:encoded><![CDATA[<p>First of all it&#8217;s Friday afternoon. Yeah! Time for some software musing.</p>
<p>I&#8217;ve been profiling recently a legacy J2EE system in an attempt to improve its performance as the system is expected to get much bigger hit in near future. Turned out that only severe architectural changes and essentially rewriting core components would dramatically improve throughput of the system. The underlying issue was the long standing enemy: distributed transactions. This experience led me to thinking more about high performance systems and principles to follow.</p>
<p>Executing a distributed, long transaction and blocking until everything is committed will always be a bottleneck, so we need to make sure to avoid mistakes from the past as we can see everywhere increased business demand for greater scalability. Therefore we can forget about traditional model of the two phase commit. However, in most cases, we can&#8217;t trade the reliability and consistency of the system for its performance. So, what are our options? I think the keywords would be:</p>
<ul>
<li>loosely coupled</li>
<li>locally transactional</li>
<li>operating on local data</li>
<li>taking advantage of multi-core/machine power</li>
</ul>
<p>Which leads to:</p>
<ul>
<li>data grids</li>
<li>concurrent programming languages (Erlang, Scala, Clojure, &#8230;)</li>
<li>actor model</li>
</ul>
<p>To achieve high throughput system that scales but remains consistent and reliable we have to change couple of things. Instead of distributed transactions consider using  smaller, independent stages (workflow) that can fail or succeed independently. No need for transaction coordination. Operations by mean of partitioning would be executed where the data regarding the operation exists. The partitioning which is given in data grid solutions like Coherence can be a bit tricky with solutions which don&#8217;t provide this feature (Terracotta, at least the version 2.7.3).</p>
<p>Personally for me database is dead.  Personally I would go for Scala.</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=68&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_68" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/07/10/high-transactional-throughput-and-global-transactions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rolling out an agile development process</title>
		<link>http://www.woloszyn.org/2009/06/29/rolling-out-an-agile-development-process/</link>
		<comments>http://www.woloszyn.org/2009/06/29/rolling-out-an-agile-development-process/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 17:06:16 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[process]]></category>

		<category><![CDATA[scrum]]></category>

		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/06/29/rolling-out-an-agile-development-process/</guid>
		<description><![CDATA[ I have been asked to help in introduction of a development process for the team working on a greenfield project. The team consist of dozen or so developers with a given task to replace an old legacy system with something which will perform better, will be more flexible and easier to maintain. The existing [...]]]></description>
			<content:encoded><![CDATA[<p> I have been asked to help in introduction of a development process for the team working on a greenfield project. The team consist of dozen or so developers with a given task to replace an old legacy system with something which will perform better, will be more flexible and easier to maintain. The existing process that is based on individuals being assigned to never-ending stream of tasks (mostly maintenance, bugfixes and improvements) might work, in my opinion, when system is not in active development stage, therefore not ideal for the greenfield project when there is much bigger density of innovation and collaboration required to succeed.</p>
<p>Interesting task I have to say. I think I will approach this by addressing both project management and engineering requirements by setting up an iterative process based on bits and pieces from <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> and <a href="http://en.wikipedia.org/wiki/Extreme_Programming">XP</a>. It shouldn&#8217;t be a surprise to anyone involved in the past in <a href="http://web21c.bt.com/">Web21C Experiment</a>. The Scrum process will kick off with pretty standard set of features hence I will not bother you with details.</p>
<p>What I want to achieve in field of team organisation is to:</p>
<ul>
<li>grow a successful team that delivers business value (doh!) as soon as possible (doh!)</li>
<li>improve internal and external communication and information flow</li>
<li>share common understanding of the domain and the system</li>
<li>learn how to cope with inevitable change</li>
<li>activate developers to be more encouraged to introduce new ideas and solutions</li>
<li>put the team in position to be more in the partner relationship with business</li>
<li>improve motivation and satisfaction from work</li>
<li>encourage being passionate about technology and sharing that passion</li>
</ul>
<p>In the same time in field of engineering practices I&#8217;ll stand my ground on:</p>
<ul>
<li>automation, automation, automation</li>
<li>continuous integration</li>
<li>code coverage</li>
<li>automated integration tests</li>
<li>patterns</li>
<li>non mandated on-request pairing (you wonder what it is?)</li>
<li>lightweight solutions</li>
<li>shared code-ownership</li>
</ul>
<p>There is an interesting lean Kanban process on horizon which looks as a good match for the environment however I will not be pushing for this initially. As the process should evolve over time there is always time to navigate original agile scrum process towards something which can be maybe a better choice. Only time will prove.</p>
<p>Comments, advice?</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=67&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_67" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/06/29/rolling-out-an-agile-development-process/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bupa London 10000</title>
		<link>http://www.woloszyn.org/2009/05/26/bupa-london-10000/</link>
		<comments>http://www.woloszyn.org/2009/05/26/bupa-london-10000/#comments</comments>
		<pubDate>Tue, 26 May 2009 21:15:48 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Running]]></category>

		<category><![CDATA[10k]]></category>

		<category><![CDATA[bupa]]></category>

		<category><![CDATA[london]]></category>

		<category><![CDATA[run]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/05/26/bupa-london-10000/</guid>
		<description><![CDATA[I meant to write about something different than running, but it seams I more enjoy writing about this topic right now, so I will not be constraining myself and will give you an update.
I participated yesterday in the Bupa London 10k race, second edition of this, as organizers were trying to sell, premiere London 10k [...]]]></description>
			<content:encoded><![CDATA[<p>I meant to write about something different than running, but it seams I more enjoy writing about this topic right now, so I will not be constraining myself and will give you an update.</p>
<p><a href="http://farm3.static.flickr.com/2476/3567173717_7ce4ff67cc_o.jpg" target="_blank"><img src="http://farm3.static.flickr.com/2476/3567173717_de67efe100.jpg" alt="Bupa London 10k" align="left" border="0" height="255" hspace="0" vspace="0" width="500" /></a>I participated yesterday in the <a href="http://www.london10000.co.uk">Bupa London 10k</a> race, second edition of this, as organizers were trying to sell, premiere London 10k run. They are not far from the truth to be honest. Click on the image of the route. With starting line on next to Buckingham Palace and St. James&#8217;s Park and with the finish on The Mall, taking runners almost for a sightseeing including Westminster Abbey, Houses of Parliament, Big Ben, The London Eye, Cleopatra’s Needle, Tate Gallery, Millennium Bridge, The Monument, Lloyds of London, Leadenhall Market, Bank of England, Mansion House, St. Paul’s Cathedral, Horseguards, Nelson&#8217;s Column and Admiralty Arch is a running event in the capital not to miss for medium to long distance runners. It is a race organized by the same people working hard each year to make the London Marathon what it is, so everything what was needed was there. Even weather, comparing with previous year&#8217;s torrential rain, was just perfect.</p>
<p>I haven&#8217;t been preparing for this race in particular, mainly because after finishing <a href="http://www.woloszyn.org/2009/04/11/paris-marathon-2009/">Paris Marathon</a> I decided to have a month off running. Only a week ago I started some training, first week of the <a href="http://www.halhigdon.com/marathon/inter1.html">18 weeks programme</a> which I am going to follow this time as preparation for the <a href="http://www.real-berlin-marathon.com">Berlin Marathon</a>, <a href="http://www.royalparkshalf.com">Royal Parks Half Marathon</a> and the <a href="http://www.frankfurt-marathon.com">Frankfurt Marathon</a>. Yes, 2 marathons and a half in 5 weeks. I know, I know. I will write a bit more about this another time.</p>
<p>Coming back to the Bupa 10k. My time was <a href="http://london10000.mikatiming.de/2009/index.php?content=detail&amp;id=0000170F5ECC82000003EE12&amp;lang=EN&amp;event=B10K">48 min 26 sec</a> (5k  		split 24m56s), the official new personal best for this distance. Taking into account irresponsible but much <a href="http://www.flickr.com/photos/znachor/3566129290/">appreciated</a> <a href="http://www.flickr.com/photos/znachor/3566130220/">BBQ</a> the night before I am really happy with the time. It is slightly worse than my unofficial <a href="http://sportstracker.nokia.com/nts/workoutdetail/index.do?id=778364">46m52sec</a> for first 10k from the Lisbon Half Marathon. I am using Garmin 405 for GPS tracking now so the details of the run are available on the <a href="http://connect.garmin.com/activity/6119938">Garmin Connect</a> site.</p>
<p>The public registration for the London Bupa 10k 2010 opens next week on the 10th of June. It seems pretty early for a run happening in 12 months, but if someone wants to take part in the next year&#8217;s event I recommend signing up asap as I am sure the places will be sold out quickly.</p>
<p>Congratulations to <a href="http://www.flickr.com/photos/znachor/3566138644/">Dave</a> for achieving his dream target of sub-1h, Milan for not showing up, <a href="http://www.flickr.com/photos/znachor/3566139576/">Andrew and Rachel</a> for finishing their first 10k in a very good style and <a href="http://twitter.com/takaczapka">Maciej</a> for being just scary fast for a first timer.</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=66&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_66" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/05/26/bupa-london-10000/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Paris Marathon 2009</title>
		<link>http://www.woloszyn.org/2009/04/11/paris-marathon-2009/</link>
		<comments>http://www.woloszyn.org/2009/04/11/paris-marathon-2009/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 18:43:16 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Running]]></category>

		<category><![CDATA[2009]]></category>

		<category><![CDATA[marathon]]></category>

		<category><![CDATA[paris]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/04/11/paris-marathon-2009/</guid>
		<description><![CDATA[More than 31,000 runners lined up last Sunday at 8.45am on the the Champs-Elysées to take part in 33rd edition of the Paris Marathon, among them me in an attempt to finish my first marathon.
It is an awesome tour of Paris. The route leads from the Champs-Elysées to the  									Place de la Concorde, Rue de [...]]]></description>
			<content:encoded><![CDATA[<p>More than 31,000 runners lined up last Sunday at 8.45am on the the Champs-Elysées to take part in 33rd edition of the <a href="http://www.parismarathon.com">Paris Marathon</a>, among them me in an attempt to finish my first marathon.</p>
<p><img src="http://farm4.static.flickr.com/3392/3431508121_b2369cc31a_m.jpg" vspace="0" width="160" align="right" border="0" height="240" hspace="0" />It is an awesome tour of Paris. The route leads from the Champs-Elysées to the  									Place de la Concorde, Rue de Rivoli along the Louvre, then Place de la Bastille and roundabout of the Place de la Nation. Not far next is the second biggest park in the city: Bois des  Vincennes where runners make a 7km loop. Half marathon mark is on the way back from the park to Bastille where slight downhill helps save some energy for the second and final part. From Bastille the route goes towards the river Saine and the next 10km give everyone chance to enjoy river side views of Paris. The famous-infamous 31km mark is next to the Eiffel Tower where couple of hundred meter up hill stints remind about the distance behind and the already drained to minimum resources in the body. The biggest park in Paris, Parc de Boulogne, is a place for final effort where each passed kilometer brings us closer to the finish line on the Avenue Foch overlooking Arc de Triomphe.</p>
<p>It was the fastest race in Paris of all time, this year. Winner of the men&#8217;s event Vincent Kipruto of Kenya set a course record of 2:05:47.</p>
<p><img src="http://farm4.static.flickr.com/3311/3431520945_f1446219a6_o.jpg" vspace="0" width="202" align="left" border="0" height="300" hspace="0" />On personal note I am happy with my own performance, far from above mentioned time, but within my sub-4h target. The <a href="http://results.parismarathon.com/index.php?content=detail&amp;id=13795&amp;lang=EN&amp;event=M">official split times</a> from the chip were:</p>
<p>5km      00:28:29<br />
10km     00:56:34<br />
15km     01:22:50<br />
21.1km 01:55:44<br />
25km     02:18:02<br />
30km     02:47:28<br />
35km     03:15:43<br />
42,2km  03:57:21</p>
<p>Second part, let say from 32km hasn&#8217;t been easy but I managed to avoid hitting the wall and kept my pace at reasonable level. GPS track from the race is <a href="https://sportstracker.nokia.com/nts/workoutdetail/index.do?id=843255">here</a> and <a href="https://sportstracker.nokia.com/nts/workoutdetail/index.do?id=843256">here</a> (my phone crashed!). The race course and conditions were very good, maybe slightly too hot but is there anyone who knows how to control it? Great experience in a beautiful city though! I paid my personal price for this by missing the best snowboarding trip of the year to Laax but I think at the end it was worth it. That&#8217;s what she said.</p>
<p>So, the first marathon done! I already have got plans for the next one. Berlin in September, here we go.</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=65&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_65" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/04/11/paris-marathon-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lisbon Half Marathon 2009</title>
		<link>http://www.woloszyn.org/2009/03/31/lisbon-half-marathon-2009/</link>
		<comments>http://www.woloszyn.org/2009/03/31/lisbon-half-marathon-2009/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 21:32:06 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Running]]></category>

		<category><![CDATA[half marathon]]></category>

		<category><![CDATA[lisbon]]></category>

		<category><![CDATA[marathon]]></category>

		<category><![CDATA[paris]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/03/31/lisbon-half-marathon-2009/</guid>
		<description><![CDATA[Update on my running journey. Week and a bit ago, on Sunday 22nd March 2009, I&#8217;ve participated in the Lisbon Half Marathon. Starting in Almada, high on the toll plaza of the 25 de Abril suspension bridge, the race run over the bridge towards the city and eastwards along the river Tagus. It then turned [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm4.static.flickr.com/3617/3383798605_ab612091a6_m.jpg" align="left" border="0" vspace="0" width="240" height="160" hspace="0" />Update on my running journey. Week and a bit ago, on Sunday 22nd March 2009, I&#8217;ve participated in the <a href="http://www.lisbon-half-marathon.com">Lisbon Half Marathon</a>. Starting in Almada, high on the toll plaza of the <a href="http://en.wikipedia.org/wiki/25_de_Abril_Bridge">25 de Abril suspension bridge</a>, the race run over the bridge towards the city and eastwards along the river <a href="http://en.wikipedia.org/wiki/Tagus">Tagus</a>. It then turned towards Belém to finish at the Mosteiro dos Jerónimos.</p>
<p>For me it was a tune-up race before the <a href="http://www.parismarathon.com">Paris Marathon</a>. I tried to take this as easy as possible which in race conditions is not a trivial task to do. As a result of this I have beaten my personal best by 11min :) Official time from the chip was <a href="http://www.lisbon-half-marathon.com/results/2009/Men_22-03-2009.xls">1h 47min 14sec</a>. As always <a href="https://sportstracker.nokia.com/nts/workoutdetail/index.do?id=778364">more details on the run together with GPS data is on the Nokia Sports tracker</a> site.</p>
<p>Interesting city, ok organisation of the race, nice route and superb weather. Clearly worth doing.</p>
<p>Countdown to Paris continues. 5 days left, excitement is getting more and more obvious every day. I have to say I am really looking forward for that one. I am really lucky with my health, no major injuries during the prep. As it turns out at the <a href="http://www.runnersworld.co.uk/forum/forummessages.asp?UTN=122900&amp;URN=6&amp;SP=&amp;V=5&amp;searchdate=0&amp;cp=572&amp;dt=4">Runner&#8217;s World forum</a> there is a quite big group of runners from UK so I believe I will meet some of them in Eurostar on the way to Paris this Friday. If not then certainly in the <a href="http://www.corcorans.fr">Corcoran&#8217;s</a> after the run!</p>
<p>Race starts on Sunday at 8.45am local time. Target time 3h 55min. Wish me good luck.</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=64&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_64" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/03/31/lisbon-half-marathon-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>12 weeks marathon training plan</title>
		<link>http://www.woloszyn.org/2009/02/28/12-weeks-marathon-training-plan/</link>
		<comments>http://www.woloszyn.org/2009/02/28/12-weeks-marathon-training-plan/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 22:18:52 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Running]]></category>

		<category><![CDATA[marathon]]></category>

		<category><![CDATA[plan]]></category>

		<category><![CDATA[run]]></category>

		<category><![CDATA[schedule]]></category>

		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/02/28/12-weeks-marathon-training-plan/</guid>
		<description><![CDATA[I spent some time at the beginning of the year looking for a marathon training plan suitable for me. If I had to find a common pattern in the structure of the plans I found it would be fair to say that most of them consist of a one long weekend run (20km - 25 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm4.static.flickr.com/3535/3318200317_a7eb4c4603_o.jpg" align="left" border="0" height="161" hspace="0" vspace="0" width="230" />I spent some time at the beginning of the year looking for a marathon training plan suitable for me. If I had to find a common pattern in the structure of the plans I found it would be fair to say that most of them consist of a one long weekend run (20km - 25 km) and, depending how long and intensive the plan is, 2 - 3 other shorter runs (5km - 10km, intervals, hills) a week. The main message usually is: the more kilometers a week you run, the better you are prepared. D&#8217;oh!</p>
<p><strong>My plan</strong></p>
<p>It is a 12 week program which intends to accommodate my existing sport activities to replace some of the shorter runs with just around 30km of actual running a week. It is intended for people who are already in overall good shape as the plan is rather short. The week structure is:</p>
<blockquote><p>Monday - rest</p></blockquote>
<blockquote><p>Tuesday - 5-a-side foolball - 60 min</p></blockquote>
<blockquote><p>Wednesday - squash 45 min</p></blockquote>
<blockquote><p>Thursday - fast run &lt;= 10km</p></blockquote>
<blockquote><p>Friday - squash 45min</p></blockquote>
<blockquote><p>Sathurday - gym - cross training</p></blockquote>
<blockquote><p>Sunday - long run &gt;= 20 km</p></blockquote>
<p>The intention is that the squash and football replace hills repetitions and intervals often used in marathon preparation plans. Important to mention is that exercises at gym are not focused on legs. Rather everything else but legs. The distance of the long run should start with around 15km, then gradually get to 25km with maybe one 30km run during the training cycle. Last two weeks is a tampering time when  training impact should be decreased. Allocation of activities to the days of the week is flexible with only the long run to be done preferably on weekend.</p>
<p>My plan doesn&#8217;t really follow the rule mentioned above about making as much distance a week as possible but instead gives me a range of different activities. I believe it prevents fatigue often caused by excessive running which then might lead to injuries and overall lower performance.</p>
<p>Certainly it prevents boredom and allows you to have a social life for those 12 weeks! Also the length of the training is suitable for preparation for European marathons taking place at the beginning of April allowing someone to have normal Christmas and New Year&#8217;s break unlike the longer schedules. You know what I am talking about, don&#8217;t you?</p>
<p>I should know how well the training works in just 5 weeks as I will stand on the start line of the <a href="http://www.parismarathon.com">Paris Marathon</a> on April the 5th. I replaced a usual long run 2 weeks before the final race day with a start in the <a href="http://www.lisbon-half-marathon.com/">Lisbon half marathon</a>. That will be the gear, hydration and feeding strategy test day. More to come.</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=63&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_63" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/02/28/12-weeks-marathon-training-plan/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Install Erlang on Mac OSX from sources</title>
		<link>http://www.woloszyn.org/2009/01/24/install-erlang-on-mac-osx-from-sources/</link>
		<comments>http://www.woloszyn.org/2009/01/24/install-erlang-on-mac-osx-from-sources/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 17:11:34 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[Functional]]></category>

		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[install]]></category>

		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/01/24/install-erlang-on-mac-osx-from-sources/</guid>
		<description><![CDATA[If you don&#8217;t want to use Flink or MacPorts to get you up and running with Erlang environment then you can follow these steps to compile and install Erlang from sources on your Mac.
First make sure you have installed latest Apple&#8217;s Xcode Developer Tools which will provide gcc compiler among the other toys.
The next step [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm4.static.flickr.com/3524/3222228319_6384e5d169_o.gif" align="left" border="0" height="96" hspace="0" vspace="0" width="114" />If you don&#8217;t want to use <a href="http://www.finkproject.org/">Flink</a> or <a href="http://www.macports.org/">MacPorts</a> to get you up and running with <a href="http://erlang.org/">Erlang</a> environment then you can follow these steps to compile and install Erlang from sources on your Mac.</p>
<p>First make sure you have installed latest Apple&#8217;s <a href="http://developer.apple.com/technology/xcode.html">Xcode Developer Tools</a> which will provide gcc compiler among the other toys.</p>
<p>The next step is to download Erlang sources and man pages. At the time of writing this post the latest version of Erlang was R12B-5. Consult the <a href="http://erlang.org/download.html">Erlang download page</a> for details of current release. Let&#8217;s get the above mentioned files :</p>
<pre class="prettyprint">
%  wget http://erlang.org/download/otp_src_R12B-5.tar.gz
%  wget http://erlang.org/download/otp_doc_man_R12B-5.tar.gz</pre>
<p>Untar the sources and change current directory:</p>
<pre class="prettyprint">
%  tar xzvf otp_src_R12B-5.tar.gz
%  cd otp_src_R12B-5</pre>
<p>What we have to do now is to do usual <em>configure/make/make install</em> steps of compilation. To check available configuration options run:</p>
<pre class="prettyprint">
%  ./configure --help</pre>
<p>I will configure Erlang with:</p>
<pre class="prettyprint">
%  ./configure --prefix=/sw/erlang --enable-threads
--enable-smp-support --enable-kernel-poll</pre>
<p>Next steps are creating the target directory, compilation and installation, uncompressing the man pages:</p>
<pre class="prettyprint">
%  sudo mkdir /sw/erlang
%  make
%  sudo make install
%  sudo cp ../otp_doc_man_R12B-5.tar.gz /sw/erlang/
%  cd /sw/erlang
%  sudo tar xzvf otp_doc_man_R12B-5.tar.gz
%  sudo rm otp_doc_man_R12B-5.tar.gz</pre>
<p>The last step will create man folder in <em>/sw/erlang</em>. Everything almost ready. We should add Erlang to the <strong>PATH</strong> and man pages to the <strong>MANPATH</strong> i.e. in <em>~/.bashrc.</em></p>
<pre class="prettyprint">
export PATH=$PATH:/sw/erlang/bin
export MANPATH=$MANPATH:/sw/erlang/man</pre>
<p>The last step is to load the updated .bashrc file:</p>
<pre class="prettyprint">
%  . ~/.bashrc</pre>
<p>Everything should be up and running now. Try:</p>
<pre class="prettyprint">
%  man erlang
%  erl</pre>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=62&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_62" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/01/24/install-erlang-on-mac-osx-from-sources/feed/</wfw:commentRss>
		</item>
		<item>
		<title>On dynamic cluster configuration using Terracotta Cluster Events</title>
		<link>http://www.woloszyn.org/2009/01/21/on-dynamic-cluster-configuration-using-terracotta-cluster-events/</link>
		<comments>http://www.woloszyn.org/2009/01/21/on-dynamic-cluster-configuration-using-terracotta-cluster-events/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 10:41:34 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Scalability]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[cluster]]></category>

		<category><![CDATA[dynamic]]></category>

		<category><![CDATA[management]]></category>

		<category><![CDATA[partitioning]]></category>

		<category><![CDATA[terracotta]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/01/21/on-dynamic-cluster-configuration-using-terracotta-cluster-events/</guid>
		<description><![CDATA[World awaits Obama&#8217;s magic but I&#8217;ll write about something slightly more down-to-earth. I&#8217;ve been thinking recently about an implementation possibilities for the dynamic cluster configuration. Lets simplify and assume that a system will consist of identical nodes which can take on different responsibilities depending only on a configuration on the node. The communication between nodes [...]]]></description>
			<content:encoded><![CDATA[<p>World awaits Obama&#8217;s magic but I&#8217;ll write about something slightly more down-to-earth. I&#8217;ve been thinking recently about an implementation possibilities for the dynamic cluster configuration. Lets simplify and assume that a system will consist of identical nodes which can take on different responsibilities depending only on a configuration on the node. The communication between nodes would be achieved by using some kind of messaging technology. So, where am I going with this? It would be good to be able to dynamically reconfigure the cluster nodes to serve as required at the time. The cluster can obviously change over time, some nodes might fail, some other nodes might join the cluster and having a cluster manager which can apply configuration to the current cluster shape and size would be great from flexibility and maintainability perspective. And then the Terracotta comes into the picture. Its feature which can be really useful here is set of cluster events which one can listen to:</p>
<ul>
<li>com.tc.cluster.event.thisNodeConnected — The local client connecting to a Terracotta server</li>
<li>com.tc.cluster.event.thisNodeDisconnected — The local client disconnecting from a Terracotta server</li>
<li>com.tc.cluster.event.nodeConnected — Another client connecting to a Terracotta server</li>
<li>com.tc.cluster.event.nodeDisconnected — Another client disconnecting from a Terracotta server</li>
</ul>
<p>To consume the events we will use <strong>javax.management</strong> classes and first we will get reference to a MBeanServer:</p>
<pre class="”prettyprint”">
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();</pre>
<p>Then we should get the cluster bean. I created small helper class ClusterUtils as described in the <a href="http://www.terracotta.org/confluence/display/docs1/JMX+Guide#JMXGuide-ClusterEventsandClusterNodeData">Terracotta JMX Guide</a>:</p>
<pre class="”prettyprint”">
ObjectName clusterBean = ClusterUtils.getClusterBean(mbeanServer);</pre>
<p>We can alrady check what is the identificator of the current node:</p>
<pre class="”prettyprint”">
String nodeId = mbeanServer.getAttribute(clusterBean, "NodeId").toString();</pre>
<p>The only remaining step is registration to the JMX notifications:</p>
<pre class="”prettyprint”">
mbeanServer.addNotificationListener(clusterBean, new SimpleJmxNotificationListener(), null, null);</pre>
<p>Where the SimpleJmxNotificationListener implements javax.management.NotificationListener. We are ready now to consume the events and react accordingly to the changes in the size of the cluster. There is also a <a href="http://forge.terracotta.org/releases/projects/jmx-util/index.html">JMX Util library</a> that makes using Terracotta Cluster Events even more easy.</p>
<p>By default the cluster nodes will be indentified by strings in format <strong>ClientID[</strong><seq_number><strong>SEQ_NUMBER]</strong> </seq_number>like ClientID[85]. If we wanted to set different identification in theory we could use <strong>-Dtc.node-name=NAME</strong> property when starting a given JVM. However there is currently (Terracotta 2.7.1) an <a href="https://jira.terracotta.org/jira/browse/CDV-806">open problem with handling of that property</a> which hopefully will be resolved soon.</p>
<p>Everything what is needed to create a dynamic cluster manager is in place now. Cluster manager would be deployed on each node and share own state in Terracotta cluster. It is not difficult to imagine creating a bit of logic to handle connections/disconnections of new nodes in a cluster and dynamically reconfigure the existing nodes to accommodate to the change. There is always a recurring topic of partitioning when using Terracotta, how to follow paradigm of locality of reference when building a low latency, scalable systems. Combination of the cluster management described above with dynamic subscription to messaging topics with sticky routing could be a nice solution to the problem. Just musing&#8230;</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=61&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_61" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/01/21/on-dynamic-cluster-configuration-using-terracotta-cluster-events/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Last value queues in Apache Qpid</title>
		<link>http://www.woloszyn.org/2009/01/15/last-value-queues-in-apache-qpid/</link>
		<comments>http://www.woloszyn.org/2009/01/15/last-value-queues-in-apache-qpid/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 16:56:21 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[amqp]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[lastvaluequeue]]></category>

		<category><![CDATA[lvq]]></category>

		<category><![CDATA[mrg]]></category>

		<category><![CDATA[qpid]]></category>

		<category><![CDATA[redhat]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2009/01/15/last-value-queues-in-apache-qpid/</guid>
		<description><![CDATA[Apache Qpid is an open source implementation of Advance Message Queuing Protocol (AMQP), an emerging open standard for inter-operable Message Oriented Middleware (MOM) communication in financial market data delivery. I have been looking recently at Red Hat MRG Messaging which is based on Apache Qpid.
The feature of Qpid which I wanted to write about today [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://qpid.apache.org/">Apache Qpid</a> is an open source implementation of <a href="http://en.wikipedia.org/wiki/AMQP">Advance Message Queuing Protocol</a> (AMQP), an emerging open standard for inter-operable Message Oriented Middleware (MOM) communication in financial market data delivery. I have been looking recently at <a href="http://www.redhat.com/mrg/messaging/">Red Hat MRG Messaging</a> which is based on Apache Qpid.<br />
The feature of Qpid which I wanted to write about today is called Last Value Queues. Definition from MRG User Guide:</p>
<blockquote><p><em>&#8220;The last value queue type causes logically updated versions of previous messages to appear to overwrite the older messages. To use this feature, add a <strong>qpid.last_value_queue</strong> key to the arguments supplied. The value of the key is irrelevant. Messages published to the queue then need to specify a value for the <strong>qpid.LVQ_key</strong> in the headers of messages they publish. The last value queue uses the value of the <strong>qpid.LVQ_key</strong> to determine whether a newly published message is an update to an existing message on the queue. If this is the case, the new message will appear to overwrite the older message. A subscriber that requests messages after this has occurred will see only the newer message.&#8221;</em></p></blockquote>
<p>Common example would be a queue with latest price updates per symbol when we are interested only in the last value per instrument. The documentation of MRG Messaging mentions only last value queues defined by providing qpid.last_value_queue parameter when creating a queue. There is also slightly different implementation of this feature defined by parameter qpid.last_value_queue_no_browse. The difference is <a href="http://qpid.apache.org/lvq.html">described on qpid website</a>.</p>
<p>Let start and create a last value queue using qpid-config tool:</p>
<pre class="prettyprint">
qpid-config add queue lvq --last-value-queue</pre>
<p>Check if the queue has been created:</p>
<pre class="prettyprint">
qpid-config queues

Queue Name                                        Attributes
======================================================================
lvq                                               --last-value-queue</pre>
<p>The messages with the same value of the qpid.LVQ_key property will be replaced, so if we wanted to write simple price publisher that publishes 12 messages of four symbols <em><strong>SYMBOLS = new String [] {&#8221;Crude&#8221;, &#8220;Gold&#8221;, &#8220;Silver&#8221;, &#8220;Copper&#8221;}</strong></em> which uses the last value queue feature the code would look like:</p>
<pre class="prettyprint">
Destination destinationQueue = new AMQQueue("amq.direct", "lvq");
MessageProducer producerQueue = session.createProducer(destinationQueue);
TextMessage txtQueueMsg = session.createTextMessage();
for (int i=1; i &lt; = 12; i++) {
    String symbol = SYMBOLS[(i-1)%4];
    txtQueueMsg.setStringProperty("qpid.LVQ_key", symbol);
    txtQueueMsg.setText(String.format("Tick %d for symbol %s", i, symbol));
    producerQueue.send(txtQueueMsg);
    log.info(String.format("Producer: sent message =&gt; %s",  txtQueueMsg.getText()));
}</pre>
<p>Let&#8217;s create a synchronous client to consume the messages:</p>
<pre class="prettyprint">
Destination destinationQueue = new AMQQueue("amq.direct", "lvq");
MessageConsumer consumerQueue = session.createConsumer(destinationQueue);

boolean finished = false;
while(!finished) {
    TextMessage message = (TextMessage) consumerQueue.receive(5000);
    if (message != null) {
        log.info(String.format("Consumer: received message %s key=%s", message.getText(), message.getStringProperty("qpid.LVQ_key")));
        message.acknowledge();
    } else {
        log.info("Timeout");
        finished = true;
    }
}</pre>
<p>Assume that consumer subscribed to the queue after publisher finished publishing the 12 messages. In this case the consumer will receive only 4 messages, one per symbol:</p>
<pre class="prettyprint">
Consumer: received message Tick 9 for symbol Crude key=Crude
Consumer: received message Tick 10 for symbol Gold key=Gold
Consumer: received message Tick 11 for symbol Silver key=Silver
Consumer: received message Tick 12 for symbol Copper key=Copper</pre>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=60&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_60" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2009/01/15/last-value-queues-in-apache-qpid/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installing Midnight Commander on Mac OSX</title>
		<link>http://www.woloszyn.org/2008/12/21/installing-midnight-commander-on-mac-osx/</link>
		<comments>http://www.woloszyn.org/2008/12/21/installing-midnight-commander-on-mac-osx/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 09:39:42 +0000</pubDate>
		<dc:creator>znachor</dc:creator>
		
		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[file]]></category>

		<category><![CDATA[file manager]]></category>

		<category><![CDATA[fink]]></category>

		<category><![CDATA[mc]]></category>

		<category><![CDATA[midnight commander]]></category>

		<guid isPermaLink="false">http://www.woloszyn.org/2008/12/21/installing-midnight-commander-on-mac-osx/</guid>
		<description><![CDATA[Midnight Commander (mc) is one of the tools which I always like to see on *nix systems I use. I just can&#8217;t understand why Orthodox file managers like good old Norton Commander on DOS or more up to date excellent Total Commander on Windows are not more popular, but nevertheless I am not here to [...]]]></description>
			<content:encoded><![CDATA[<p>Midnight Commander (mc) is one of the tools which I always like to see on *nix systems I use. I just can&#8217;t understand why <a href="http://en.wikipedia.org/wiki/Orthodox_file_manager#Orthodox_file_managers">Orthodox file managers</a> like good old <a href="http://en.wikipedia.org/wiki/Norton_Commander">Norton Commander</a> on DOS or more up to date excellent <a href="http://www.ghisler.com/">Total Commander</a> on Windows are not more popular, but nevertheless I am not here to convince anyone to use them, just want to mention that even if you are a deep command line devotee you could find the tools useful. And certainly if you are deep mouse devotee you should try.</p>
<p>I will explain quickly how to install mc on mac (Mac OSX Leopard 10.5.6) using Fink. Installation with Fink should be painless and this blog post should not exist but I experienced an issue with the process I wanted to share quick solution:</p>
<p>1. If you don&#8217;t have <a href="http://www.finkproject.org/">Fink</a> yet install it<br />
2. Run:</p>
<pre class="prettyprint">
sudo apt-get install mc</pre>
<p>3. Try to start Midnight Commander:</p>
<pre class="prettyprint">
mc</pre>
<p>4. Fink should install all dependencies but if you encounter following error go to step 5, if not you are done:</p>
<pre class="prettyprint">
dyld: Library not loaded: /sw/lib/libintl.1.dylib  Referenced from: /sw/bin/mc

Reason: image not found</pre>
<p>5. Small dirty hack to fix the previous problem:</p>
<pre class="prettyprint">
sudo ln -s /sw/lib/libintl.3.4.3.dylib /sw/lib/libintl.1.dylib</pre>
<p>I know that there are more clean solutions than this one. Share this with me! What&#8217;s your favourite OFM?</p>
<p class="akst_link"><a href="http://www.woloszyn.org/?p=59&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_59" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.woloszyn.org/2008/12/21/installing-midnight-commander-on-mac-osx/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
