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

<channel>
	<title>Blog.Project13.pl &#187; netbeans</title>
	<atom:link href="http://www.blog.project13.pl/index.php/tag/netbeans/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blog.project13.pl</link>
	<description>The Blog of a Coder</description>
	<lastBuildDate>Sun, 05 Feb 2012 02:28:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>git-hacking: pre-commit hook and custom command</title>
		<link>http://www.blog.project13.pl/index.php/fun/1076/git-hacking-pre-commit-hook-and-custom-command/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/1076/git-hacking-pre-commit-hook-and-custom-command/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 02:07:39 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[terminal heroes]]></category>
		<category><![CDATA[#eclipse]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[intellij]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[xsolve]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1076</guid>
		<description><![CDATA[As my team is using a kinda weird source eclipse code formatter setup, that other IDEs can&#8217;t emulate in 100% I sometimes found myself committing in a file with only a few changed spaces. Of course, I could use &#8220;external-formatter&#8221; plugins etc but that&#8217;s no good. Running eclipse&#8217;s formatter each time I want to format [...]]]></description>
			<content:encoded><![CDATA[<p>As my team is using a kinda weird source eclipse code formatter setup, that other IDEs can&#8217;t emulate in 100% I sometimes found myself committing in a file with only a few changed spaces. Of course, I could use &#8220;external-formatter&#8221; plugins etc but that&#8217;s no good. Running eclipse&#8217;s formatter each time I want to format my source (_very_ often) proved to be too slow and really getting on my nerves.</p>
<p>So&#8230; Since I&#8217;ve started using <strong>git</strong>-svn at work, I do have an possibility to make things better now! The answer lies in client-side-<strong>hooks</strong> and <strong>git aliases</strong> (&#8220;custom commands&#8221;). First let&#8217;s write this as an simple bash script, that we&#8217;ll locate in the <strong>.git/hooks/</strong> folder:<br />
<script src="https://gist.github.com/708972.js?file=gistfile1.sh"></script> It&#8217;s a fairly simple script, so I wont bore you explaining it in detail &#8211; if in doubt, feel free to ask. We only need to place this script as &#8220;<strong>.git/hooks/pre-commit</strong>&#8221; and make it executable and git will take care of the rest for us. Oh and in case you&#8217;re wondering where that <strong>org.eclipse.jdt.core.prefs</strong> came from. It&#8217;s created by eclipse into the .settings folder when you check some option to &#8220;use formatter per project&#8221; &#8211; that&#8217;s the only time I had to fire up and click around in eclipse to get it&#8217;s formatter running &#8220;headless&#8221;. Ok, let&#8217;s check if it works&#8230; <script src="https://gist.github.com/708982.js?file=gistfile1.java"></script><br />
<script src="https://gist.github.com/708976.js?file=gistfile1.sh"></script> <script src="https://gist.github.com/708981.js?file=gistfile1.java"></script><br />
Yup, you can agree or not with the formatting rules &#8211; but what matters is that the whole team decided on it and that we keep it consistent throughout the whole project. This hook will definitely help with this. :-)  Step two for me was changing this into a git command, so that I wouldn&#8217;t launch eclipse each time I just do some quick local commiting. The solution is to drop the hook idea (although it&#8217;s quite nice) and create an custom git command. We do this by doing an alias like that:</p>
<pre>git config --global alias.eclipse-formatter '!~/git-hook-eclipse-formatter'</pre>
<p>The <strong>!command </strong>alias<strong> </strong>support is with us in git since 1.5.0 and it enables us to launch any program/script as an git command. Great, just what I wanted! Let&#8217;s now see what this command really did:</p>
<p><script src="https://gist.github.com/708977.js?file=gistfile1.sh"></script><br />
As you can see, adding an alias is as simple as adding it to your<strong> ~/.gitconfig</strong> or, if you want to setup the alias &#8220;per project&#8221;, to <strong>.git/config</strong> &#8211; pretty cool, ay? Also, this command will be included in bash-autocompletition suggestions! :-)</p>
<p>That&#8217;s it for today&#8230; <em>happy hacking!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/1076/git-hacking-pre-commit-hook-and-custom-command/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NetBeans Platform Lookups as communication method</title>
		<link>http://www.blog.project13.pl/index.php/coding/640/netbeans-platform-lookups-as-communication-method/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/640/netbeans-platform-lookups-as-communication-method/#comments</comments>
		<pubDate>Sun, 23 May 2010 14:54:28 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[agh]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[netbeans platform]]></category>
		<category><![CDATA[studies]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[web dev]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=640</guid>
		<description><![CDATA[Helo again! Today&#8217;s post will be an super quick usage scenario for NetBeans Platform Lookups &#8211; the probably most essential part of the Platform. An super simple explanation of them is &#8220;an Map&#60;Class, Object&#62;&#8221;. Sounds simple right? Well it is, and it&#8217;s quite powerful at the same time. It enables you to loosely couple parts [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://github.com/ktoso/TravelingSalesman-NBP/raw/master/doc/screenshots/pieknygraforazwykresy.png" onclick="urchinTracker('/outgoing/github.com/ktoso/TravelingSalesman-NBP/raw/master/doc/screenshots/pieknygraforazwykresy.png?referer=');"><img class="aligncenter" title="Traveling Salesman on NetBeansPlatform" src="http://github.com/ktoso/TravelingSalesman-NBP/raw/master/doc/screenshots/pieknygraforazwykresy.png" alt="Traveling Salesman on NetBeansPlatform" width="300" /></a></p>
<p>Helo again! Today&#8217;s post will be an super quick usage scenario for <strong>NetBeans Platform Lookups</strong> &#8211; the probably most essential part of the Platform. An super simple explanation of them is &#8220;an Map&lt;Class, Object&gt;&#8221;. Sounds <strong>simple </strong>right? Well<strong> it is,</strong> and it&#8217;s quite powerful at the same time. It enables you to loosely couple parts of your app, create extension points etc. Another use case is passing some date around in the app, but you don&#8217;t know where the modules interested in this data are (because you&#8217;re loosely coupled, right?). In an app I&#8217;ve been writing for my Uni since some days, I&#8217;ve used the Lookup to do exactly this &#8211; pass data from an algorithm to an LineChartDrawer that then will update it&#8217;s chart each time the data is being updated.</p>
<p>This is going to be<strong> quite similar </strong>to an  <a href="http://en.wikipedia.org/wiki/Observer_pattern" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Observer_pattern?referer=');">Observer Pattern</a> implementation, but using the lookup as notification mechanism. Let&#8217;s start out with our Algorithm class (and module &#8211; note that this module is not dependent on the chart drawing module!)</p>
<div class="geshi no java">
<div class="head">package pl.edu.netbeans.algorithms;</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.Exceptions;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.Lookup;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.LookupListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.lookup.AbstractLookup;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.lookup.InstanceContent;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.windows.TopComponent;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.windows.WindowManager;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import pl.edu.netbeans.algorithms.genetic.Chromosom;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import pl.edu.netbeans.algorithms.genetic.Population;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import pl.edu.netbeans.toolbox.ChartDataDTO;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import prefuse.data.Graph;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* The algorithm implementation, does some stuff and throws the data into an DTO which is packed into the lookup</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @author ktoso</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> FirstTSSolverAction <span class="kw2">extends</span> SolverAction <span class="kw2">implements</span> TSSolverAction, Lookup.<span class="kw3">Provider</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">final</span> Population population<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//just to get us some fancy names for this algorithm</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw4">int</span> simcount = <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">final</span> <span class="kw3">String</span> SIMULATION_ID = <span class="st0">&quot;symulacja &quot;</span> + FirstTSSolverAction.<span class="me1">simcount</span>++<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* Here we&#39;re setting up the Lookup, to work with dynamic content, thanks to this,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* we&#39;ll be able to modify it&#39;s contents and notify all listeners after some change has happened</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> InstanceContent dynamicContent = <span class="kw2">new</span> InstanceContent<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> Lookup myLookup = <span class="kw2">new</span> AbstractLookup<span class="br0">&#40;</span>dynamicContent<span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//AbstractLookup is NOT an abstract class, it&#39;s an &quot;general purpose lookup&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> Lookup.<span class="me1">Result</span> res<span class="sy0">;</span> <span class="co1">//this is only here because I want to use allItems down there bellow, otherwise it would be just a variable in the method bellow</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> FirstTSSolverAction<span class="br0">&#40;</span>Graph graph<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>graph<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* This is not an Runnable class but the run method will act quite the same as if it was,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* as our framework will call it in constant time delays. We do all the computing here.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> run<span class="br0">&#40;</span><span class="kw4">double</span> frac<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>population.<span class="me1">shouldStop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//&#8230; stop the execution etc.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; population.<span class="me1">nextGeneration</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Chromosom ch = population.<span class="me1">getBestChromosom</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> numerGeneracji = population.<span class="me1">getNumerGeneracji</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">double</span> avgFitness = population.<span class="me1">getAvgFitness</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">double</span> maxFitness = population.<span class="me1">getWorstFittness</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">double</span> minFitness = population.<span class="me1">getBestFitness</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; log<span class="br0">&#40;</span><span class="st0">&quot;Generacja &quot;</span> + numerGeneracji + <span class="st0">&quot;: naj. chromosom: &quot;</span> + ch + <span class="st0">&quot; (&quot;</span> + avgFitness + <span class="st0">&quot;)&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* Słuchający tego lookup zostaną powiadomieni o zmianie, przerysują wykres */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; dynamicContent.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> ChartDataDTO<span class="br0">&#40;</span>SIMULATION_ID, numerGeneracji, avgFitness, maxFitness, minFitness<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; res.<span class="me1">allItems</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="co1">//I found it quite helpful in order to be sure that the listeners will notice the change</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* Since we&#39;re an Lookup.Provider, let&#39;s provide our lookup!</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* It can be implemented in multiple ways, but let&#39;s just return our lookup this time.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> Lookup getLookup<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> myLookup<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* Poszukuje oraz ustawia listenera implementującego LineChartDrawer</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* aby ten reagował na każdorazową zmianę w naszym lookup &#8211; aktualizował wykres</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @SuppressWarnings<span class="br0">&#40;</span><span class="st0">&quot;unchecked&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> setupLineGraphDrawerListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//a sucky but good enough implementation for our usecase</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Better solution: You could use another Lookup to find implementations of the &quot;LineGrapghDrawer&quot; interface and then use this instance here!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TopComponent drawer = WindowManager.<span class="me1">getDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">findTopComponent</span><span class="br0">&#40;</span><span class="st0">&quot;FitnessGraphTopComponent&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>drawer == <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//depending on if you need this or not, throw exceptions or just ignore this if you dont need it</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//throw new RuntimeException(&quot;Nie znaleziono implementacji FitnessGraphTopComponent. Nikt mnie nie słucha!&quot;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//or&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log<span class="br0">&#40;</span><span class="st0">&quot;No FittnessGraphTopComponent found. That&#39;s OK, so I will continue without it&#8230;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//below is the actual settup of our &quot;observer&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; res = myLookup.<span class="me1">lookup</span><span class="br0">&#40;</span><span class="kw2">new</span> Lookup.<span class="me1">Template</span><span class="br0">&#40;</span>ChartDataDTO.<span class="kw2">class</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//setup the resultset to react to changes of ChartDataDTOs in it</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; res.<span class="me1">allItems</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="co1">//THIS IS IMPORTANT! Help out the lookup by &quot;refreshing&quot; its contents</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; res.<span class="me1">addLookupListener</span><span class="br0">&#40;</span><span class="br0">&#40;</span>LookupListener<span class="br0">&#41;</span> drawer<span class="br0">&#41;</span><span class="sy0">;</span><span class="co1">//setup the listener to the drawer we found</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The code is well commented for this post so take a moment and read through it. It&#8217;s just some pieces of the actual class we&#8217;re using &#8211; so no actual computing stuff is shown here, let&#8217;s focus on the lookups. Note that I&#8217;m getting the TopComponent that I&#8217;ll add as an listener &#8220;by name&#8221;, it&#8217;s super simple but would you need to &#8220;find some implementation of some drawer interface&#8221; just use an lookup and get the instance, or even all the instances of such interface implementations. That said, this solution is not the most universal here (getting the instance) but it&#8217;s good enough for our app since it&#8217;s a very small application. No let&#8217;s look at the &#8220;Observer&#8221;, better named as &#8220;LookupListener&#8221;:</p>
<div class="geshi no java">
<div class="head">package pl.edu.netbeans.visualization;</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.awt.BorderLayout;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.ArrayList;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.Collection;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.Iterator;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.List;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.logging.Logger;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.chart.ChartFactory;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.chart.ChartPanel;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.chart.JFreeChart;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.chart.axis.ValueAxis;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.chart.plot.PlotOrientation;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.chart.plot.XYPlot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.data.xy.XYDataset;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.data.xy.XYSeries;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.jfree.data.xy.XYSeriesCollection;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.NbBundle;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.windows.TopComponent;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.windows.WindowManager;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.netbeans.api.settings.ConvertAsProperties;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.Lookup;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.LookupEvent;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.openide.util.LookupListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import pl.edu.netbeans.toolbox.ChartDataDTO;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import pl.edu.netbeans.toolbox.LineChartDrawer;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import prefuse.Visualization;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Top component which will draw graphs for all the data it gets&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">@ConvertAsProperties<span class="br0">&#40;</span>dtd = <span class="st0">&quot;-//pl.edu.netbeans.visualization//FitnessGraph//EN&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">autostore = <span class="kw2">false</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">final</span> <span class="kw2">class</span> FitnessGraphTopComponent <span class="kw2">extends</span> TopComponent <span class="kw2">implements</span> LookupListener, LineChartDrawer <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">static</span> FitnessGraphTopComponent instance<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw3">String</span> PREFERRED_ID = <span class="st0">&quot;FitnessGraphTopComponent&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//&#8230; skipped all the computing/drawing stuff</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> FitnessGraphTopComponent<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; initComponents<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setupChart<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setName<span class="br0">&#40;</span>NbBundle.<span class="me1">getMessage</span><span class="br0">&#40;</span>FitnessGraphTopComponent.<span class="kw2">class</span>, <span class="st0">&quot;CTL_FitnessGraphTopComponent&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setToolTipText<span class="br0">&#40;</span>NbBundle.<span class="me1">getMessage</span><span class="br0">&#40;</span>FitnessGraphTopComponent.<span class="kw2">class</span>, <span class="st0">&quot;HINT_FitnessGraphTopComponent&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//note how easy it will be to internationalize this app :-)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &nbsp; &nbsp; &nbsp; &nbsp;setIcon(ImageUtilities.loadImage(ICON_PATH, true));</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; putClientProperty<span class="br0">&#40;</span>TopComponent.<span class="me1">PROP_CLOSING_DISABLED</span>, <span class="kw3">Boolean</span>.<span class="kw2">TRUE</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; putClientProperty<span class="br0">&#40;</span>TopComponent.<span class="me1">PROP_MAXIMIZATION_DISABLED</span>, <span class="kw3">Boolean</span>.<span class="kw2">FALSE</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; putClientProperty<span class="br0">&#40;</span>TopComponent.<span class="me1">PROP_SLIDING_DISABLED</span>, <span class="kw3">Boolean</span>.<span class="kw2">TRUE</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//skipped graph drawing/setup parts, this post is about lookups only ;-)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;  <span class="co1">//&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw3">String</span> preferredID<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> PREFERRED_ID<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* This is our resultChanged listener. It will be called if the resultSet we&#39;re observing is changed.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* Note that &quot;changed&quot; means all CRUD operations on it.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> resultChanged<span class="br0">&#40;</span>LookupEvent ev<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Lookup.<span class="me1">Result</span> res = <span class="br0">&#40;</span>Lookup.<span class="me1">Result</span><span class="br0">&#41;</span> ev.<span class="me1">getSource</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//this is always an safe cast!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Collection</span> instances = res.<span class="me1">allInstances</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//we get all instances from the lookup</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>instances.<span class="me1">isEmpty</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Iterator</span> it = instances.<span class="me1">iterator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>it.<span class="me1">hasNext</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Object</span> o = it.<span class="me1">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>o <span class="kw2">instanceof</span> ChartDataDTO<span class="br0">&#41;</span><span class="br0">&#123;</span><span class="co1">//you might wan to use this &#8211; better safe than sorry, check if you got what you expected!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ChartDataDTO o = <span class="br0">&#40;</span>ChartDataDTO<span class="br0">&#41;</span> it.<span class="me1">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//If not sure if this will always be the case, use an if( instanceof ) here!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addDTO2Series<span class="br0">&#40;</span>o<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> addDTO2Series<span class="br0">&#40;</span>ChartDataDTO chartDataDTO<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//&#8230;add the stuff to the graphs&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>That&#8217;s about it. We simply have an<strong> resultChanged()</strong> method that <strong>will be called if the contents of the resultset are changed.</strong> We might also want to arr more lookups to be observed, so it&#8217;s better to check this instanceof I think than not, since there might be some unexpected stuff inside of it&#8230;</p>
<p>All in all, you write an <strong>Lookup.Provider</strong> and <strong>LookupListener,</strong> implement both&#8217;s methods and then at some place in your app hook them up. It doesn&#8217;t really matter &#8220;who looks for who&#8221; as long as it&#8217;s consistent and logical. In this case, the algorithm is looking for people interested in his data. Note that at any moment in time, we can add another listener, no problems here. Note that the <strong>Lookup.Provider and LookupListener are quite similar to the Observer and Observables</strong> mentioned before.And the good thing is, the algorithm does not know about any concrete drawer, and the drawer has no idea about some algorithm. They just have one shared API module &#8211; the toolbox, in which there is the <strong>DataTransferObject</strong> we&#8217;re using to pass the data from one to another &#8211; yay, an <strong>loosely coupled</strong> system. (yeah, I know our code is tightly coupled at some other places, but this part is quite ok :-))</p>
<p>If you have anything you&#8217;d like to comment on this code, feel free to do so. It&#8217;s just parts taken from <a href="http://github.com/ktoso/TravelingSalesman-NBP" onclick="urchinTracker('/outgoing/github.com/ktoso/TravelingSalesman-NBP?referer=');">http://github.com/ktoso/TravelingSalesman-NBP</a> our implementation and visualization of the <strong>Traveling Salesman Problem</strong> being solved by <a href="http://pl.wikipedia.org/wiki/Algorytm_genetyczny" onclick="urchinTracker('/outgoing/pl.wikipedia.org/wiki/Algorytm_genetyczny?referer=');"><strong>Genetic Algorithms</strong></a>.</p>
<p>For more information about lookups goto: <a href="http://netbeans.dzone.com/articles/netbeans-lookups-explained" onclick="urchinTracker('/outgoing/netbeans.dzone.com/articles/netbeans-lookups-explained?referer=');">a nice post by Anton Epple on dzone.com</a> or to <a href="http://netbeans.dzone.com/news/top-10-netbeans-apis-part-2" onclick="urchinTracker('/outgoing/netbeans.dzone.com/news/top-10-netbeans-apis-part-2?referer=');">Geertjan&#8217;s post with some good links</a> or <a href="http://www.antonioshome.net/blog/2008/20081023-1.php" onclick="urchinTracker('/outgoing/www.antonioshome.net/blog/2008/20081023-1.php?referer=');">http://www.antonioshome.net/blog/2008/20081023-1.php</a></p>
<hr />
<strong>Update!</strong> Geertjan contacted me and suggested I&#8217;d post this on netbeans.dzone.com as it&#8217;s quite an interesting post &#8211; and so I did :-) You can <a href="http://netbeans.dzone.com/articles/netbeans-platform-lookups" onclick="urchinTracker('/outgoing/netbeans.dzone.com/articles/netbeans-platform-lookups?referer=');">read and comment it now on dzone.com</a>. Hope to get some feedback if this is good or bad code, would be quite helpful :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/640/netbeans-platform-lookups-as-communication-method/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>After the NetBeans Certified Platform Training in Kraków (2010)</title>
		<link>http://www.blog.project13.pl/index.php/project13/551/after-the-netbeans-certified-platform-training-in-krakow-2010/</link>
		<comments>http://www.blog.project13.pl/index.php/project13/551/after-the-netbeans-certified-platform-training-in-krakow-2010/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 13:55:32 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Project13]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[agh]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[JUG]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[polishjug]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=551</guid>
		<description><![CDATA[Amazing days and awesome people It&#8217;s been some amazing days for me during (and before) the NBPTraining. As you probably know already &#8211; I&#8217;ve been the &#8220;one-man-army&#8221; behind the organization and basically everything around this training. I got lots of help from various people, such as Dr Jarosław Wąs (from KN Glider) &#8211; it wouldn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-569" title="netbeans_2010_poster_min" src="http://www.blog.project13.pl/wp-content/uploads/2010/04/netbeans_2010_poster_min-e1272636685851.jpg" alt="" width="124" height="174" /></p>
<h3>Amazing days and awesome people</h3>
<p>It&#8217;s been <strong>some amazing days</strong> for me during (and before) the NBPTraining. As you probably know already &#8211; I&#8217;ve been the &#8220;one-man-army&#8221; behind the organization and basically everything around this training. I got lots of help from various people, such as Dr Jarosław Wąs (from <a href="http://www.glider.agh.edu.pl" onclick="urchinTracker('/outgoing/www.glider.agh.edu.pl?referer=');">KN Glider</a>) &#8211; it wouldn&#8217;t have been possible to make this training such an success  without his great and very active support. And of course &#8211; the <a href="http://www.java.pl" onclick="urchinTracker('/outgoing/www.java.pl?referer=');">PolishJUG</a>, which I&#8217;m a proud member of! :-) But one thing I have to admit, Bureaucracy is a horrible thing and really made some things (needlessly&#8230;) difficult &#8211; thank goodness in the end, we had everything well organized &#8211; as Geertjan put it on dZone:</p>
<blockquote cite="http://netbeans.dzone.com/polish-jug-netbeans-platform"><p>[...] There are also some illustrative pics to share, to give an impression of  the group (really large)<em>,</em> the trainers (really busy), and the  organization (really good) [...]</p></blockquote>
<h3>Day 0: Welcome Dinner</h3>
<p>What&#8217;s so worth mentioning about the guys just coming here anyway? Well it was a quite trip for some, especially Geertian, who had to come by train which took him about 27hours instead of just coming by car from Prague. All because of <a href="http://wiadomosci.gazeta.pl/Wiadomosci/1,80708,7778761,Eksperci_ostrzegaja__znacznie_wiekszy_wulkan__sasiad.html" onclick="urchinTracker('/outgoing/wiadomosci.gazeta.pl/Wiadomosci/1_80708_7778761_Eksperci_ostrzegaja_znacznie_wiekszy_wulkan_sasiad.html?referer=');">Eyjafjoell</a>&#8216;s eruption last week&#8230; And Toni and Geertjan were in Oslo at that time, doing a Training for an company (btw <a title="Interview wirh Gunnar Reinseth" href="http://blogs.sun.com/geertjan/entry/movie_interview_with_netbeans_platform" onclick="urchinTracker('/outgoing/blogs.sun.com/geertjan/entry/movie_interview_with_netbeans_platform?referer=');">nice interview with Gunnar Reinseth</a>) &#8211; so we were worried if they&#8217;ll be able to come to Poland due to all the flights being cancelled&#8230; Anton was lucky and but Geertjan&#8217;s original flight got cancelled&#8230; Well, he had quite an <a href="http://twitter.com/GeertjanW/status/12664576635" onclick="urchinTracker('/outgoing/twitter.com/GeertjanW/status/12664576635?referer=');">interesting</a> journey as he called it himself :-) Later when Karol joined us and soon we all went to eat some pierogi and chat a little :-)</p>
<div style="text-align: center;"><a href="http://www.blog.project13.pl/wp-content/uploads/2010/04/DSC_0001.jpg"><img class="size-medium wp-image-573" title="concentrated " src="http://www.blog.project13.pl/wp-content/uploads/2010/04/DSC_0001-300x198.jpg" alt="concentrated students" width="300" height="198" /></a></div>
<h3>Days 1 &amp; 2: The Training</h3>
<p>Thanks to dr Wąs everything went smooth and without any problems&#8230; Even though some other students also wanted to use the room we had reserved &#8211; due to the chaos caused by the <a href="http://wyborcza.pl/1,75248,7752563,Lista_ofiar__prezydenckim_Tu_154_lecialy_najwazniejsze.html" onclick="urchinTracker('/outgoing/wyborcza.pl/1_75248_7752563_Lista_ofiar_prezydenckim_Tu_154_lecialy_najwazniejsze.html?referer=');">tragic plane accident</a> and them wanting to make up for the classes they&#8217;ve lost last weekend due to the burial ceremonies&#8230; I&#8217;m really glad we managed to get the training rolling with absolutely no problems &#8211; we were really prepared for everything, along with backup projectors etc ;-)</p>
<p>If you&#8217;re not very familiar with the Java World &#8211; please note, that <em>the  training was NOT about NetBeans IDE</em>. Yeah, we did use NetBeans IDE (there&#8217;s some nice little helpers/wizards),  but that&#8217;s absolutely not a must &#8211; NBP is pure Java (<strong>just a bunch of  jar&#8217;s</strong>) and XML &#8211; so you can use anything you want to code stuff  based on NetBeans RCP. That said, the training was about real coding  stuff such as patters used in the RCP, use-cases and<strong> &#8220;</strong><strong> </strong><strong>how do I code such a feature  to scale well?&#8221;</strong>.</p>
<p>The agenda was the basic NetBeans Platform Training as outlined on <a href="http://edu.netbeans.org/courses/nbplatform-certified-training/" onclick="urchinTracker('/outgoing/edu.netbeans.org/courses/nbplatform-certified-training/?referer=');">http://edu.netbeans.org/courses/nbplatform-certified-training/</a> that&#8217;s a good thing, as only a few students actually have used the NetBeans RCP (or even ANY RCP) in their lives. The level of participants was quite diverse, some saw loose coupling in action for the first time in their lives, and others were already planing some advanced use-cases foe the things we were learning. The sources and videos for most of the examples are also hosted on <a href="http://www.netbeans.edu.pl" onclick="urchinTracker('/outgoing/www.netbeans.edu.pl?referer=');">netbeans.edu.pl</a>, so if you want to know what you&#8217;ve missed, feel free to download/watch them (if interested in FullHD versions, contact me per email). The Lookup and Nodes/Explorer Views were the most interesting features of the platform I guess. Of course having an full blown app with menus etc out of the box is also nice, but not a &#8220;life changer&#8221; if it weren&#8217;t for those mechanisms. Sadly we didn&#8217;t talk about the Lexer API (for parsing languages) but I personally talked with the guys a little about it &#8211; and why schielmann was dropped etc&#8230; A really fun and interesting insider talk :-) I simply love such conversations&#8230;<img class="alignright" title="Rich Client Programming" src="http://www.javalobby.org/articles/rich-client-programming/cover.jpg" alt="rich client programming" width="180" height="180" /></p>
<p>After the training Geertjan gave away a copy of his book (&#8220;Rich Client Programming&#8221;), to the person who asked the best, most interesting questions during the course. Of course it was then signed by all the trainers. Sadly I don&#8217;t have a picture of the books&#8217; winner, nonetheless &#8211; <strong>congratulations!</strong> After the training I also asked the guys to sign my copy of the book, hurray for signature collectors ;-)</p>
<p>Anyone interested in some of the response I got concerning the training? After the training plenty of you mailed me and thanked via forums etc, here&#8217;s a few responses:</p>
<blockquote><p>przyznaje, na prawde baaaardzo fajne szkolenie</p></blockquote>
<blockquote>
<div>Faktycznie &#8211; świetna robota.  Wielkie dzięki ;)</div>
</blockquote>
<blockquote>
<div>Tru. <acronym title="Good Job">Gj</acronym>.</div>
</blockquote>
<blockquote>
<div>[...] nie udalo mi sie zjawic a slyszalem ze bylo super ;/</div>
</blockquote>
<blockquote>
<div>[...] bedzie problemem jesli przyjde jutro na to szkolenie NetBeans&#8217;a? Bo slyszalam ze duzo ciekawych i przydatnych dla mnie rzeczy jest wiec chcialabym sobie posluchac :)</div>
</blockquote>
<div>Big big thanks to all of you, I&#8217;m happy you enjoined the training. You may want to check out <a href="http://netbeans.dzone.com/polish-jug-netbeans-platform" onclick="urchinTracker('/outgoing/netbeans.dzone.com/polish-jug-netbeans-platform?referer=');">Geertjan&#8217;s take on it on dZone</a>.</div>
<p style="text-align: center;"><a href="http://www.blog.project13.pl/wp-content/uploads/2010/04/DSC_0004.jpg"><img class="size-medium wp-image-552" title="NetBeans Platform in Cracow" src="http://www.blog.project13.pl/wp-content/uploads/2010/04/DSC_0004-300x198.jpg" alt="Group foto" width="300" height="198" /></a></p>
<h3>See you next time!</h3>
<p>I hope you all enjoined the training &#8211; we certainly did. I&#8217;ve got some opinions from happy participants, so I guess everyone liked it as much as those did.</p>
<p>If you have anything (opinions, sources or even complaints) feel free to contact me: kmalawski@project13.pl or just leave a comment here :-) Also, when you get your<strong> NetBeans Certified Engineer</strong> and would like some more promotion for your open source project &#8211; let me know and we&#8217;ll add a link to it at netbeans.edu.pl!</p>
<p><strong>Some students have already  have started their projects based on the NetBeans Platform &#8211; so what are you waiting for?! ;-)</strong></p>
<h3>What&#8217;s next for me?</h3>
<p>Well, I&#8217;m going to <a href="http://2010.geecon.org/site/schedule" onclick="urchinTracker('/outgoing/2010.geecon.org/site/schedule?referer=');"><strong>GeeCON</strong></a>, to learn about <strong>Gradle</strong>, and tap into facts and myths about <strong>JSF</strong> and other things (the <a href="http://2010.geecon.org/site/schedule" onclick="urchinTracker('/outgoing/2010.geecon.org/site/schedule?referer=');">list of good topics</a> is really long so I wont list them all here, just have a look on your own). The agenda mostly caught up my attecion and I&#8217;m really happy to be going there. What&#8217;s new for me + conferences is that I don&#8217;t have to go alone anymore. I&#8217;m going with a friend (some years older) and potentialy another girl &#8211; as she won the Google trip to GeeCON&#8230; ;-) I&#8217;m also really happy to be able to meet Adam Dudczak, thanks to whom the whole NBPT idea got ignited in me and the NetBeans Guys :-) Of course we&#8217;ll meet up  with all the <strong>PolishJUG</strong> members, (Adrian Nowak, Radosław Holewa, Marcin Gadamer and Kuba Dżon) and Miroslav will be comming too &#8211; lot&#8217;s and lot&#8217;s of programming-friends :-) Seems like Toni and Geertjan will also be comming, yay! Yeah, so that&#8217;ll be 3 days in May&#8230; but that&#8217;s not the end of my Java related stuff in May:</p>
<p>Later in May I&#8217;ll be on an Spring Source Training. It&#8217;s only the &#8220;short introductory one&#8221;, and I&#8217;m well aware that it won&#8217;t make me an spring-guru, but an insider insight about Spring, Roo or Grails is also a good thing to have.</p>
<p>By the way, did you notice that the <strong>netbeans.edu.pl is running on Grails</strong>? I&#8217;ll release it&#8217;s sources when they&#8217;re polished enough~! Viva la free software.</p>
<div id="attachment_554" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.blog.project13.pl/wp-content/uploads/2010/04/DSC_0002-2.jpg"><img class="size-medium wp-image-554 " title="NetBeans guys and Konrad Malawski" src="http://www.blog.project13.pl/wp-content/uploads/2010/04/DSC_0002-2-300x198.jpg" alt="" width="300" height="198" /></a><p class="wp-caption-text">Geertjan, Toni, Konrad (me), Karol</p></div>
<p>Oh, and for those asking: Sadly I didn&#8217;t own an PolishJUG T-Shirt at the  time of the training, so I took the most Java related I had &#8211; from <a href="http://jdd.org.pl/" onclick="urchinTracker('/outgoing/jdd.org.pl/?referer=');">Java Developers  Day</a>. Also a quite nice conference&#8230; :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/project13/551/after-the-netbeans-certified-platform-training-in-krakow-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NetBeans Platform Certified Training Kraków 2010</title>
		<link>http://www.blog.project13.pl/index.php/coding/505/netbeans-platform-certified-training-krakow-2010/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/505/netbeans-platform-certified-training-krakow-2010/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 20:53:56 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JUG]]></category>
		<category><![CDATA[meeting]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[pjug]]></category>
		<category><![CDATA[preview]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=505</guid>
		<description><![CDATA[NetBeans.edu.pl Since Poznań JUG&#8217;s NetBeans Platform Training in January (yeah, the one where there was no place left for me ;-)), I&#8217;ve been in contact with Poznań JUG&#8216;s Adam Dudczak, Polish JUG&#8216;s Adrian Nowak, Sun&#8217;s Geertjan Wielenga and Eppleton&#8217;s Anton Epple and many more&#8230; And a little later Karol Harezlak joined the training team. We&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center; background: white;"><a style="background: white;" href="http://www.netbeans.edu.pl" onclick="urchinTracker('/outgoing/www.netbeans.edu.pl?referer=');"><img class="size-medium wp-image-506" style="background: white repeat scroll 0% 0% white;" title="NB-Platform-logo" src="http://www.blog.project13.pl/wp-content/uploads/2010/04/NB-Platform-logo1-300x41.png" alt="NetBeans Platform " width="300" height="41" /><br />
<span style="font-size: 22px; font-weight: bold;">NetBeans.edu.pl</span><br />
</a></p>
<p>Since <strong>Poznań JUG&#8217;</strong>s NetBeans Platform Training in January (<em>yeah, <a href="http://www.blog.project13.pl/index.php/fun/375/375/">the one</a> where there was no place left for me ;-)</em>), I&#8217;ve been in contact with <strong><a href="http://www.jug.poznan.pl/" onclick="urchinTracker('/outgoing/www.jug.poznan.pl/?referer=');">Poznań JUG</a>&#8216;</strong>s <strong>Adam Dudczak</strong>, <a href="http://java.pl" onclick="urchinTracker('/outgoing/java.pl?referer=');"><strong>Polish JUG</strong></a>&#8216;s <strong>Adrian Nowak</strong>, Sun&#8217;s <a href="http://blogs.sun.com/geertjan/" onclick="urchinTracker('/outgoing/blogs.sun.com/geertjan/?referer=');"><strong>Geertjan Wielenga</strong></a> and Eppleton&#8217;s<strong> <a href="http://eppleton.sharedhost.de/blog/" onclick="urchinTracker('/outgoing/eppleton.sharedhost.de/blog/?referer=');">Anton Epple</a> </strong>and many more&#8230; And a little later <a href="http://blogs.sun.com/kharezlak/" onclick="urchinTracker('/outgoing/blogs.sun.com/kharezlak/?referer=');"><strong>Karol Harezlak</strong></a> joined the training team. We&#8217;ve been planing to organize an NetBeans Platform Training in Cracow &#8211; since there was really an gigantic response to the training. Now it&#8217;s April&#8230; and just around two weeks to the <a href="http://netbeans.edu.pl" onclick="urchinTracker('/outgoing/netbeans.edu.pl?referer=');">NetBeans Platform Certified Training Kraków 2010</a> ;-) All this could not have been possible if not the great help and support from both JUGs and an <strong>amazing amount of help we got from <a href="http://www.glider.agh.edu.pl" onclick="urchinTracker('/outgoing/www.glider.agh.edu.pl?referer=');"><strong>Glider</strong></a></strong> from my University. Also I&#8217;d like to give a big thanks to<em> everyone</em> I&#8217;ve met during this long process of organizing such an meeting &#8211; you&#8217;ve all been a great help! :-)</p>
<p><strong>Allright, so what&#8217;s this</strong><strong> NetBeans Platform</strong> all about? To put it simply, it&#8217;s &#8220;something&#8221; (a platform ;-)) that allows you to use all the stuff you see when you do your daily coding in the NetBeans IDE and code up your own application really quickly. While WebFrameworks are really popular and there&#8217;s a ton of them, there is not much (worth mentioning) &#8220;Desktop App Frameworks&#8221; as one might call them. Such apps are then called <strong>Rich Client Applications</strong> (just a fancy name for &#8220;Desktop Apps&#8221; ;-)), which makes NBP an <strong>Rich Client Platform</strong>&#8230; You may have heard about &#8220;<strong>Eclipse RCP</strong>&#8221; or &#8220;<strong>SWT</strong>&#8221; or &#8220;<strong>Spring RCP</strong>&#8221; &#8211; they&#8217;re in the same legue as NBP. But why is NetBeans RCP more interesting than the rest? Well here&#8217;s a cupple of reasons I personally find important:</p>
<ul>
<li>It&#8217;s all <strong>swing</strong> based, and as Java programmers &#8211; we know swing, not necesarrily some &#8220;SWT&#8221; or &#8220;Swing RPC&#8221; &#8211; right? Less totaly new stuff = better learning curve.</li>
<li>Your app gets an windowing system abstraction, file system abstraction,  lots of GUI elements out of the box &#8211; Tree&#8217;s etc</li>
<li>You can just extend NetBeans IDE or build your own app that <a href="http://platform.netbeans.org/screenshots.html" onclick="urchinTracker('/outgoing/platform.netbeans.org/screenshots.html?referer=');">looks like an IDE</a>&#8230; or <a href="http://bluemarine.tidalwave.it/" onclick="urchinTracker('/outgoing/bluemarine.tidalwave.it/?referer=');">doesn&#8217;t look like one</a> ;-)</li>
<li>It&#8217;s 100% modular &#8211; that means you can use just the stuff you want, or can easily exchange or &#8220;<strong>lookup</strong>&#8221; (important word in the NetBeans world) stuff in order to develop apps that can handle plugins and are easily extendible.</li>
<li>There are quite some inteligent and interesting opinions about<a href="http://www.adam-bien.com/roller/abien/entry/eclipse_rcp_vs_netbeans_rcp" onclick="urchinTracker('/outgoing/www.adam-bien.com/roller/abien/entry/eclipse_rcp_vs_netbeans_rcp?referer=');"> NetBeans RCP vs Eclipse RCP on Adam Bien&#8217;s blog</a> &#8211; (found this blogpost thanks to @timoreilly)</li>
</ul>
<p>I find the Lexer Api quite interesting but didn&#8217;t have the time to really dive into it yet &#8211; basically it allows you to write programming language parsing, support into your app or netbeans IDE.<br />
The most amazing&#8230; Hmm let&#8217;s say &#8220;the most<em> visually</em> amazing&#8221; app based on the NBP I&#8217;ve seen is <a href="http://gephi.org/" onclick="urchinTracker('/outgoing/gephi.org/?referer=');">Gephi</a> (video below). There are lot&#8217;s of very complicated apps for biology or airlines and stuff) based on NBP, but let&#8217;s face it such apps don&#8217;t create an &#8220;WOW&#8221; effect, unless you totaly understand what&#8217;s going on inside of it.</p>
<p style="text-align: center;">Take a deep breath, and enjoy<br />
<strong>NetBeans Platform + Gephi = Graph Awesomeness<br />
</strong></p>
<div style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="551" height="310" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9726202&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="551" height="310" src="http://vimeo.com/moogaloop.swf?clip_id=9726202&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div style="text-align: center;">
<p>All that said&#8230; I hope that the Training in Cracow will be a nice experience for every participant<br />
see you there &#8211; <em>24+25 April 2010</em>.<br />
<strong><a href="http://netbeans.edu.pl" onclick="urchinTracker('/outgoing/netbeans.edu.pl?referer=');">netbeans.edu.pl</a></strong></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/505/netbeans-platform-certified-training-krakow-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NetBeans Platform Training 2010</title>
		<link>http://www.blog.project13.pl/index.php/fun/375/375/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/375/375/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 01:16:40 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[JUG]]></category>
		<category><![CDATA[meeting]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[trip]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=375</guid>
		<description><![CDATA[Yeah! It&#8217;s time for another great JUG meeting. I&#8217;ll have to go quite far this time, as it&#8217;ll be in Poznań and that&#8217;s about 7h by train from Cracow&#8230; but at the very moment I saw who was going to be there, that is: Geertjan Wielenga (whose blog I&#8217;ve been reading for a long long [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="poznan jug" src="http://www.jug.poznan.pl/wp-content/themes/mandigo/schemes/blue/images/head-1024.jpg" alt="" width="535" height="126" /></p>
<p style="text-align: left;">Yeah! It&#8217;s time for another great JUG meeting. I&#8217;ll have to go quite far this time, as it&#8217;ll be in Poznań and that&#8217;s about 7h by train from Cracow&#8230; but at the very moment I saw who was going to be there, that is: <a href="http://blogs.sun.com/geertjan/" onclick="urchinTracker('/outgoing/blogs.sun.com/geertjan/?referer=');"><strong>Geertjan Wielenga</strong></a> (whose blog I&#8217;ve been reading for a long long time and also Romuen Strobl&#8217;s pal from the Netbeans team) and <strong><a href="http://eppleton.sharedhost.de/blog/?p=1089" onclick="urchinTracker('/outgoing/eppleton.sharedhost.de/blog/?p=1089&amp;referer=');">Tony Epple</a></strong><strong>, </strong>I just knew I can&#8217;t miss such a <strong>2-day</strong> crash course about <a href="http://platform.netbeans.org/" onclick="urchinTracker('/outgoing/platform.netbeans.org/?referer=');"><strong>NetBeans Platform</strong>.</a> I&#8217;m mostly interested in EE stuff and didn&#8217;t really look all so much into SE apps (just the few while I was very fresh to Java) and this&#8217;ll be a great opportunity to see the NBP in action and explained by the pr0s!<strong> </strong></p>
<p style="text-align: left;">It would seem that<a href="http://eppleton.sharedhost.de/blog/?p=1089" onclick="urchinTracker('/outgoing/eppleton.sharedhost.de/blog/?p=1089&amp;referer=');"> I&#8217;m not the only person who&#8217;s excited about this JUG Meeting</a> as during only one day, already <a href="http://blogs.sun.com/geertjan/entry/poznan_jug_netbeans_platform_certified" onclick="urchinTracker('/outgoing/blogs.sun.com/geertjan/entry/poznan_jug_netbeans_platform_certified?referer=');">42 out of 45 possible attendands got registered</a>! I already got my Hotel booked and tommorow I&#8217;ll buy the train tickets. Oh, and one more great thing  this trip. My girlfriend will some with me so after I code some stuff we&#8217;ll check out Poznań &#8211; some people told ma that it&#8217;s a really nice city. :-)</p>
<p style="text-align: left;">More information can be found here: (in polish)<a href="http://www.jug.poznan.pl/2010/01/bezplatne-szkolenie-netbeans-platform/ " onclick="urchinTracker('/outgoing/www.jug.poznan.pl/2010/01/bezplatne-szkolenie-netbeans-platform/?referer=');"> http://www.jug.poznan.pl/2010/01/bezplatne-szkolenie-netbeans-platform/ </a>or here: <a href="http://www.jug.poznan.pl/materialy-ze-spotkan/netbeans-platform-training-2010/" onclick="urchinTracker('/outgoing/www.jug.poznan.pl/materialy-ze-spotkan/netbeans-platform-training-2010/?referer=');">http://www.jug.poznan.pl/materialy-ze-spotkan/netbeans-platform-training-2010/</a> (in english)</p>
<p style="text-align: left;">&#8212;EDIT&#8212;</p>
<p style="text-align: left;">Sadly I wasn&#8217;t able to go to this meeting since there were no free places left for students from outside Poznan. I guess thats understandable since they are Poznań JUG, so they want to teach Poznań students more than Cracows students ;-) As sad as that has been for me, <em>something even better came out of it! </em>What? Well, just wait a month or two and I&#8217;ll let you know JavaGeeks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/375/375/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

