<?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>Dariusz [LocK] Łuksza &#187; fun</title>
	<atom:link href="http://luksza.org/category/fun/feed/" rel="self" type="application/rss+xml" />
	<link>http://luksza.org</link>
	<description>myśli luźno zebrane ... ja i moja jaźń w intenecie</description>
	<lastBuildDate>Fri, 30 Jul 2010 01:22:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>

   <image>
    <title>Dariusz [LocK] Łuksza</title>
    <url>http://0.gravatar.com/avatar/ed2d261ca5db36a17e690dc736dcd9ef?s=48&amp;d=http%3A%2F%2Fluksza.org%2Fwp-includes%2Fimages%2F</url>
    <link>http://luksza.org</link>
   </image>
		<item>
		<title>XMPP-PubSub w Java i nie tylko (cz. 1)</title>
		<link>http://luksza.org/2008/11/01/xmpp-pubsub-w-java-i-nie-tylko-cz1/</link>
		<comments>http://luksza.org/2008/11/01/xmpp-pubsub-w-java-i-nie-tylko-cz1/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 17:07:48 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[polish]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[xmpp-pubsub]]></category>
		<category><![CDATA[pubsub]]></category>
		<category><![CDATA[smack]]></category>
		<category><![CDATA[su-smack]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=148</guid>
		<description><![CDATA[W ramach eksternistycznego zaliczenia przedmiotu Systemy internetowe, muszę wykonać aplikację w architekturze SOA z wykorzystaniem XMPP-PubSub (XEP-0060). Jako, że temat jest ciekawy i (IMHO) przyszłościowy postaram się go przybliżyć w paru notkach. Czego można się po tych notkach spodziewać ? Przede wszystkim działających (w chwili publikacji ) fragmentów kodu, opisów problemów jakie napotkałem podczas realizacji [...]]]></description>
			<content:encoded><![CDATA[<p>W ramach eksternistycznego zaliczenia przedmiotu Systemy internetowe, muszę wykonać aplikację w architekturze SOA z wykorzystaniem</p>
<p><a href="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3htcHAub3JnL2V4dGVuc2lvbnMveGVwLTAwNjAuaHRtbA==" target=\"_blank\">XMPP-PubSub (XEP-0060)</a>. Jako, że temat jest ciekawy i (IMHO) przyszłościowy postaram się go przybliżyć w paru notkach.</p>
<p>Czego można się po tych notkach spodziewać ? Przede wszystkim działających (w chwili publikacji <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) fragmentów kodu, opisów problemów jakie napotkałem podczas realizacji projektu &#8230; oraz ich rozwiązań. Wszystko oczywiście, jak to u mnie bywa, w mniej lub bardziej chaotycznej formie ;&gt;</p>
<p><span id="more-148"></span></p>
<p>Na początek może trochę teorii i historii (oczywiście z mojego punktu widzenia).</p>
<p>Co to jest XMPP ? Cóż, część osób będzie kojarzyć ten termin z Jabber&#8217;em &#8230; i słusznie, sam Jabber jest przodkiem XMPP , jako że całość bazuje na XML&#8217;u jest to <em>potężne</em> &#8222;<em>narzędzie</em>&#8221; mogące służyć nie tylko do komunikacji w internecie, ale też do wielu innych celów.</p>
<p>Co to jest PubSub ? Właściwie to Publish-Subscribe; jest to jedna z wielu &#8221; usług&#8221; jakie udostępnia XMPP, umożliwia ona &#8222;wystawianie&#8221; wiadomości. Dzięki wykorzystaniu Observer patter eliminuje zbędny ruch sieciowy (klient nie pyta serwera co 5 min &#8222;masz już coś dla mnie?&#8221; &#8230; &#8222;a może teraz masz ?&#8221;), umożliwa praktycznie natychmiastowe informowanie klientów o zmianach/nowościach.</p>
<p>Z czym to się je ? Właściwie to ze wszystkim i niczym &#8230; tj. na pewno potrzebny jest serwer Jabbera z zaimplementowaną obsługa pub-sub (może to być np. ejabberd2 czy jabberd2, ja będę używał tego pierwszego z racji że &#8222;posiadam&#8221; go od paru lat <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) i to by był na tyle &#8230; no ale w sumie to jeszcze można by z tego zrobić jakis użytek, dosłownie &#8222;jakiś&#8221;. Tak więc będą nam do tego potrzebne jakieś biblioteki &#8230; z takowymi nie ma problemu, chwila googlania zaprowadziła mnie do (wspominanego wyżej) smack&#8217;a i su-smack&#8217;a. Ok, całkiem fajnie, mi się to podoba &#8230; tylko po co mi do tego jeszcze jakiś dodatkowy serwer i to jeszcze jabbera ? Jest on po to, żeby ułatwić sobie życie, robi on za taki &#8222;programowy switch&#8221;, z wykorzystaniem smack&#8217;a można na takim serwerze wystawić node&#8217;a z danymi i odpowiednią konfiguracją &#8230; i o nim poprostu zapomnieć, dalej nasza zewnętrzna aplikacja (czyli OpenSource&#8217;owy, całkowicie darmowy soft) zrobi za nas wszystko, tj. roześle informacje do tych klientów którzy się zapisali na listę chętnych do odebrania informacji (tutaj jest właśnie nasz Observer pattern). Architektura jest bardzo prosta, klient podłącza się do serwera i zapisuje się (lub jak kto woli subscribe&#8217;uje), na zdarzenia (eventy), z drugiej strony łączy się inny klient czy serwer i wystawia dane (tu się znowu powtórzę) reszte robi za nas Observer pattern i serwer jabbera. &#8230; Ok wszystko fajnie, no ale ja nie chce czy też nie mogę/nie umiem/nie mam gdzie (nie potrzebne skreślić) postawić taki serwer. Nie musisz ;P możesz użyć jakiegoś publicznego, wystarczy rejestracja (a czasem nawet i to nie jest wymagane).</p>
<p><a href="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5pZ25pdGVyZWFsdGltZS5vcmcvcHJvamVjdHMvc21hY2sv" target=\"_blank\">Smack</a> i <a href="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3N0YXRpYy5kZXZlbC5pdC5zdS5zZS9zdS1zbWFjay8=" target=\"_blank\">su-smack</a>. Obie biblioteki są open-source&#8217;owe, pierwszy na licencji Apache, a drugi na Stockholm university BSD License. Więc nie będą sprawiać żadnych problemów ;&gt;. Obie są w całości napisane w Java&#8217;ie, trafiłem na nie po chwili google&#8217;ania <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>OK, koniec tego długiego i nudnego wstępu, czas zabrać się za to co tygryski lubią najbardziej ;&gt; &#8230; czyli konfiguracje &#8230; żartuje, oczywiście najlepszą częścią będzie kodowanie, ale chcąc być trendy i wogole super &#8230; zwłaszcza, że oba projekty na to pozwalają &#8230; chciał bym przedstawić konfigurację <a href="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL21hdmVuLmFwYWNoZS5vcmcv" target=\"_blank\">maven</a>&#8216;a. W pliku pom.xml w sekcji repositories dodajemy repo (lub jak kto woli można to zrobić w $M2_HOME/setttings.xml, ale lepiej nie uzależniać projektu od globalnej konfiguracji <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>
<p><code>&lt;repository&gt;<br />
&lt;id&gt;it.su.se&lt;/id&gt;<br />
&lt;name&gt;su-smack&lt;/name&gt;<br />
&lt;url&gt;http://maven.it.su.se/it.su.se/maven2&lt;/url&gt;<br />
&lt;/repository&gt;</code></p>
<p>natomiast do sekcji dependenties dodajemy:</p>
<p><code>&lt;dependency&gt;<br />
&lt;artifactId&gt;su-smack&lt;/artifactId&gt;<br />
&lt;groupId&gt;su-smack&lt;/groupId&gt;<br />
&lt;version&gt;1.4-SNAPSHOT&lt;/version&gt;<br />
&lt;/dependency&gt;</code></p>
<p>Teraz właściwa część notki &#8230; kod ;&gt;. Najpierw założenia, chcemy się podlaczyć do serwera jabber&#8217;a, zalogować się i stworzyć w węzeł, dodatkowo dodam PacketListener żeby widzieć jak wygladą komunikacja pomiędzy serwerem jabber&#8217;a, a kodem. Kod nie jest zaawansowany więc nie sądze żeby wymagał opisu.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
</pre></td><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
 * 	Published on GNU GPLv2
 */</span>
<span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">org.luksza.xmpp.pubsub</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jivesoftware.smack.PacketListener</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jivesoftware.smack.XMPPConnection</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jivesoftware.smack.packet.Packet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jivesoftware.smack.packet.IQ.Type</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">se.su.it.smack.pubsub.PubSub</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">se.su.it.smack.pubsub.elements.ConfigureElement</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">se.su.it.smack.pubsub.elements.CreateElement</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
* @author Dariusz [LocK] Łuksza
*/</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PubSubCreateNode <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #006600; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399; font-weight: bold;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> argv<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399; font-weight: bold;">Exception</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399; font-weight: bold;">String</span> login = <span style="color: #0000ff;">&quot;login&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">final</span> XMPPConnection con = <span style="color: #000000; font-weight: bold;">new</span> XMPPConnection<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;jabber.host&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        con.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        con.<span style="color: #006633;">addPacketListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> PacketListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> processPacket<span style="color: #009900;">&#40;</span>Packet pkt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>pkt.<span style="color: #006633;">toXML</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>, <span style="color: #006600; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            con.<span style="color: #006633;">login</span><span style="color: #009900;">&#40;</span>login, <span style="color: #0000ff;">&quot;pass&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>con.<span style="color: #006633;">isAuthenticated</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">final</span> PubSub pubSub = <span style="color: #000000; font-weight: bold;">new</span> PubSub<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pubSub.<span style="color: #006633;">setType</span><span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Type</span>.<span style="color: #006633;">SET</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pubSub.<span style="color: #006633;">setTo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pubsub.jabber.host&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pubSub.<span style="color: #006633;">setFrom</span><span style="color: #009900;">&#40;</span>con.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pubSub.<span style="color: #006633;">addChild</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> CreateElement<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/home/jabber.host/&quot;</span> + login<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pubSub.<span style="color: #006633;">addChild</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ConfigureElement<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                con.<span style="color: #006633;">sendPacket</span><span style="color: #009900;">&#40;</span>pubSub<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #003399; font-weight: bold;">Thread</span>.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000;  font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Not authenticated!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span> <span style="color: #009900;">&#123;</span>
            con.<span style="color: #006633;">disconnect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Po uruchowmieniu, używając jakiegoś klienta jabber&#8217;a (tkabber&#8217;a czy np. psi) możemy sprawdzić czy węzeł został utworzony. Należy pamiętać o tym że nie można tworzyć wiely węzłów naraz.I to by było chyba na tyle <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=148" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2008/11/01/xmpp-pubsub-w-java-i-nie-tylko-cz1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jestem programistą &#8230; ;)</title>
		<link>http://luksza.org/2008/08/31/jestem-programista/</link>
		<comments>http://luksza.org/2008/08/31/jestem-programista/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 12:44:51 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[krzywe zwierciadło]]></category>
		<category><![CDATA[polish]]></category>
		<category><![CDATA[live programmer]]></category>
		<category><![CDATA[pralka]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=121</guid>
		<description><![CDATA[Dziś stałem się programistą &#8230; pierwszy raz zaprogramowałem pralkę automatyczna Proces programowania przebiegł bez najmniejszych problemów (przecież nie może ich aż tak wiele sprawić jedno pokrętło i parę przycisków). Następnie odbył się ręczny proces segregacji obiektów do procesu prania (nie stety nie da sie tego procesu zautomatyzować (sic!)), potem nastąpiło automatyczne wykonanie programu (żaden wyjątek [...]]]></description>
			<content:encoded><![CDATA[<p>Dziś stałem się programistą &#8230; pierwszy raz zaprogramowałem pralkę automatyczna <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Proces programowania przebiegł bez najmniejszych problemów (przecież nie może ich aż tak wiele sprawić jedno pokrętło i parę przycisków). Następnie odbył się ręczny proces segregacji obiektów do procesu prania (nie stety nie da sie tego procesu zautomatyzować (sic!)), potem nastąpiło automatyczne wykonanie programu (żaden wyjątek nie został rzucony &#8230; więc nie było co łapać przynajmniej w tej fazie). Samo wykonaie programu zajeło sporo czasu (to pewnie przez słaby procesor zamontowany w maszynie wykonującej &#8230; albo całkowity jego brak <img src='http://luksza.org/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> ), później odbył się proces wieszania prania, również ręczny i bez możliwości automatyzacji (i tu właśnie musiałem <em>łapać</em>, nie wyjątki, ale same obiekty spadające z suszarki).</p>
<p>Jak widać proces pierwszego prania i programowania przebiegł bez żadnego problemu &#8230; no i tak to wyglądał mój pierwszy raz z pralką <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ;&gt;</p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=121" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2008/08/31/jestem-programista/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
