<?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>Zeznania programisty &#187; Programowanie</title>
	<atom:link href="http://www.jakubiak.eu/category/programowanie/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jakubiak.eu</link>
	<description>Moje przeżycia związane z: FLEX, JEE, EJB, JSF, FreeBSD, PostgreSQL i PHP i Windows ;)</description>
	<lastBuildDate>Sat, 12 Mar 2011 13:00:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Bajki o FastCGI w PHP</title>
		<link>http://www.jakubiak.eu/2009/12/bajki-o-fastcgi-w-php.html</link>
		<comments>http://www.jakubiak.eu/2009/12/bajki-o-fastcgi-w-php.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 10:28:53 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/?p=655</guid>
		<description><![CDATA[Ostatnio docierały do mnie głosy o FastCGI w PHP. Jednak ja w bajki nie wierzę. To co znalazłem w PHP tylko przypomina FastCGI. Otóż, jak sama nazwa wskazuje FastCGI powinno być szybsze od CGI. Tymczasem, FastCGI dla PHP nie ma wpływu na szybkość działania a na zużycie pamięci. Czyli może działać szybciej, ale nie musi [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio docierały do mnie głosy o FastCGI w PHP. Jednak ja w bajki nie wierzę. To co znalazłem w PHP tylko przypomina FastCGI.
</p><p>Otóż, jak sama nazwa wskazuje <a href="http://pl.wikipedia.org/wiki/FastCGI" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/FastCGI?referer=');">FastCGI</a> powinno być szybsze od <a href="http://pl.wikipedia.org/wiki/CGI" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/CGI?referer=');">CGI</a>. Tymczasem, <a href="http://php-fpm.org/wiki/FAQ" onclick="pageTracker._trackPageview('/outgoing/php-fpm.org/wiki/FAQ?referer=');">FastCGI dla PHP nie ma wpływu na szybkość działania</a> a na zużycie pamięci. Czyli może działać szybciej, ale nie musi zależy od sposobu mierzenia. <a href="http://blog.a2o.si/2009/06/24/apache-mod_php-compared-to-nginx-php-fpm/" onclick="pageTracker._trackPageview('/outgoing/blog.a2o.si/2009/06/24/apache-mod_php-compared-to-nginx-php-fpm/?referer=');">Tutaj jest porównanie szybkości mod_php i php-fpm</a>.
</p><p>Brodaci i brzuchaci programiści, tacy jak ja, którzy pamiętają jeszcze czasy Perla, wyobrażają sobie że FastCGI działa w następujący sposób. Serwer WWW uruchamia proces aplikacji, aplikacja startuje (co zwykle trochę trwa) i czeka na kolejne żądania. Aplikacja staje się jedną częścią z serwerem. W porównaniu z CGI lub standardowym sposobem uruchamiania PHP pozwala to zaoszczędzić czas potrzebny na start aplikacji. Wymaga to jednak specjalnego sposobu programowania i sumienności w zarządzaniu zasobami. Tymczasem sumienność w zarządzaniu zasobami nie była potrzebna w świecie PHP. W świecie PHP serwer WWW uruchamia aplikację, aplikacja drukuję stronę, kończy pracę i serwer po niej sprząta. Programista programuje szybciej, bo nie traci czasu na programowanie zarządzania pamięcią. Jednak aplikacja działa wolniej, bo nie może korzystać z dobrodziejstw FastCGI. Coś za coś. Programiści piszą szybko lub aplikacja działa szybko. Wybór należy do biznesu. W PHP nie ma FastCGI takiego, jak znają programiści Perla. W PHP nie ma FastCGI które było by szybsze i pozwalało zaoszczędzić czas potrzebny na inicjalizację aplikacji. 
</p><p>PHP działa tak:
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/12/122209_1028_BajkioFastC16.png" alt=""/>
	</p><p>Tak działa prawdziwe, szybkie i brodate FastCGI:
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/12/122209_1028_BajkioFastC26.png" alt=""/>
	</p><p>
 </p><p>Nie wiem jak działa FastCGI w PHP ale na pewno nie tak gdyż nie ma do tego API i biblioteki w PHP nie są przystosowane do takiej pracy. Jeżeli FastCGI w PHP będzie działać tak jak w Perlu, to chcę o tym wiedzieć. 
</p><p><a href="http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/lib/CGI/Fast.html" onclick="pageTracker._trackPageview('/outgoing/www.sdsc.edu/_moreland/courses/IntroPerl/docs/manual/lib/CGI/Fast.html?referer=');">Tu jest info o FastCGI dla Perla.</a>
	</p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/12/bajki-o-fastcgi-w-php.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Facebook API</title>
		<link>http://www.jakubiak.eu/2009/12/facebook-api.html</link>
		<comments>http://www.jakubiak.eu/2009/12/facebook-api.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 14:53:38 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[digg]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[myspace]]></category>
		<category><![CDATA[open social]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[vimeo]]></category>
		<category><![CDATA[xfbml]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/12/facebook-api.html</guid>
		<description><![CDATA[Ostatnio mam przyjemność walczyć z interfejsami programistycznymi serwisów internetowych takich jak: Facebook, MySpace, Twitter, Digg, Flickr, YouTube, Vimeo czy Open Social. Muszę przyznać, że API które zrobiło na mnie największe wrażenie to Facebook XFBML. Szczerze mówiąc, nie wiedziałem że tak się da zrobić… Spodziewałem się takich technologii jak REST, WebServices czy osadzenie pływających ramek… Ale [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio mam przyjemność walczyć z interfejsami programistycznymi serwisów internetowych takich jak: <a href="http://developers.facebook.com/" onclick="pageTracker._trackPageview('/outgoing/developers.facebook.com/?referer=');">Facebook</a>, <a href="http://developer.myspace.com/" onclick="pageTracker._trackPageview('/outgoing/developer.myspace.com/?referer=');">MySpace</a>, <a href="http://apiwiki.twitter.com/" onclick="pageTracker._trackPageview('/outgoing/apiwiki.twitter.com/?referer=');">Twitter</a>, <a href="http://apidoc.digg.com/" onclick="pageTracker._trackPageview('/outgoing/apidoc.digg.com/?referer=');">Digg</a>, <a href="http://www.flickr.com/services/api/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/services/api/?referer=');">Flickr</a>, <a href="http://code.google.com/apis/youtube/overview.html" onclick="pageTracker._trackPageview('/outgoing/code.google.com/apis/youtube/overview.html?referer=');">YouTube</a>, <a href="http://www.vimeo.com/api" onclick="pageTracker._trackPageview('/outgoing/www.vimeo.com/api?referer=');">Vimeo</a> czy <a href="http://www.opensocial.org/" onclick="pageTracker._trackPageview('/outgoing/www.opensocial.org/?referer=');">Open Social.</a> Muszę przyznać, że API które zrobiło na mnie największe wrażenie to <a href="http://wiki.developers.facebook.com/index.php/XFBML" onclick="pageTracker._trackPageview('/outgoing/wiki.developers.facebook.com/index.php/XFBML?referer=');">Facebook XFBML</a>.</p>  <p>Szczerze mówiąc, nie wiedziałem że tak się da zrobić… Spodziewałem się takich technologii jak REST, WebServices czy osadzenie pływających ramek… Ale to co zrobił Facebook po prostu mnie zaskoczyło. Nie wiedziałem wcześniej że tak się da… I że to takie proste.</p>  <p>Otóż na swojej stronie XHTML osadzam specjalne tagi, które są rozszerzeniami Facebooka dla XHTML. Dodaję kilka linii JavaScriptu i działa. Moja przeglądarka internetowa wyświetla tagi Facebooka, na przykład kod strony: <code>&lt;fb:prompt-permission perms=&quot;publish_stream,offline_access&quot;&gt;Czy zgadzasz się aby publikować na Facebooku&lt;/fb:prompt-permission&gt;</code> wyświetli mi pytanie o prawa dostępu. Inne tagi wyświetlają zdjęcia użytkowników, formularze komentowania i logowania lub przyciski zostań fanem.</p>  <p>Oczywiście, to jest proste tylko z pozoru. Programiści Facebook musieli się nieźle nagimnastykować, chociażby po to żeby współpracować z poziomami bezpieczeństwa przeglądarek internetowych. Podziwiam za odważny pomysł i dobrą realizację.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/12/facebook-api.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>csplit a olbrzymie pliki</title>
		<link>http://www.jakubiak.eu/2009/12/csplit-a-olbrzymie-pliki.html</link>
		<comments>http://www.jakubiak.eu/2009/12/csplit-a-olbrzymie-pliki.html#comments</comments>
		<pubDate>Wed, 02 Dec 2009 11:44:02 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[Bazy danych]]></category>
		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/12/csplit-a-olbrzymie-pliki.html</guid>
		<description><![CDATA[Moim zadaniem było naprawić uszkodzony plik kopii bezpieczeństwa bazy danych PostgreSQL. Wiedziałem w której linii jest błąd i na czym polega, jednak plik kopi bezpieczeństwa był na tyle olbrzymi, że edycja jego edycja była bardzo utrudniona. Z pomocą przyszedł mi program csplit znaleziony w pakiecie GnuWin32. Program ten potrafi podzielić plik na mniejsze na podstawie [...]]]></description>
			<content:encoded><![CDATA[<p>Moim zadaniem było naprawić uszkodzony plik kopii bezpieczeństwa bazy danych PostgreSQL. Wiedziałem w której linii jest błąd i na czym polega, jednak plik kopi bezpieczeństwa był na tyle olbrzymi, że edycja jego edycja była bardzo utrudniona. Z pomocą przyszedł mi program <strong>csplit</strong> znaleziony w pakiecie <a href="http://gnuwin32.sourceforge.net/" onclick="pageTracker._trackPageview('/outgoing/gnuwin32.sourceforge.net/?referer=');">GnuWin32</a>. Program ten potrafi podzielić plik na mniejsze na podstawie dopasowania przez wyrażenie regularne. Wydałem następujące polecenie:
</p><p><pre><code>csplit –f "out_" nazwa_pliku_backup.sql "/^COPY /" {*}
head –n 1 out_*
</code></pre></p><p>W wyniku pracy programu csplit uzyskałem kilkadziesiąt mniejszych plików – po jednym dla każdej tabeli w bazie.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/12/csplit-a-olbrzymie-pliki.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codility vs JavaBlackBelt</title>
		<link>http://www.jakubiak.eu/2009/11/codility-vs-javablackbelt.html</link>
		<comments>http://www.jakubiak.eu/2009/11/codility-vs-javablackbelt.html#comments</comments>
		<pubDate>Mon, 09 Nov 2009 17:21:04 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Recenzje]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/?p=463</guid>
		<description><![CDATA[Jakiś czas temu napisałem, że nie lubię testowania programistów tak jak się testuje kompilatory. Dobry programista nie musi wiedzieć czym różni się i++ od ++i, jednak musi czuć respekt przed takimi niuansami. Szkoda, że ta zasada nie jest znana społeczności JavaBlackBelt. JavaBlackBelt to platforma do nauki Javy. Zawiera między innymi testy wymyślane przez społeczność programistów. [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu napisałem, że nie lubię <a href="http://www.jakubiak.eu/2009/07/javarsowia-a-i-czy-i.html">testowania programistów tak jak się testuje kompilatory</a>. Dobry programista nie musi wiedzieć czym różni się i++ od ++i, jednak musi czuć respekt przed takimi niuansami. Szkoda, że ta zasada nie jest znana społeczności <a href="http://www.javablackbelt.com/" onclick="pageTracker._trackPageview('/outgoing/www.javablackbelt.com/?referer=');">JavaBlackBelt</a>.
</p><p>JavaBlackBelt to platforma do nauki Javy. Zawiera między innymi testy wymyślane przez społeczność programistów. Dzięki nim można wczuć się w rolę kompilatora:
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/11/110909_1721_CodilityvsJ1.png" alt=""/>
	</p><p>Po co programista ma wiedzieć coś takiego? Żaden programista przy zdrowych zmysłach nie napiszę takiego kodu – intuicyjnie. A jak już napisze, to powinien dostać czarnym pasem po d&#8230;.
</p><p>Dlatego nie podoba mi się JavaBlackBelt. Czarnego pasa w karate nie dostaje się za nauczenie się nazw ciosów: &#8220;Mawashi Tobi Geri&#8221;. 
</p><p>

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/v_daZNC5XLQ&#038;hl=pl&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/v_daZNC5XLQ&#038;hl=pl&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

	</p><p>Dlatego spodobał mi się polski program <a href="http://codility.com/" onclick="pageTracker._trackPageview('/outgoing/codility.com/?referer=');">Codility</a>. Dzięki Codility możemy sprawdzić jak programista poradzi sobie z napisaniem prawdziwego programu. Do wyboru mamy kilka języków programowania w których trzeba rozwiązać zadania algorytmiczne. Webowa aplikacja skompiluje podane rozwiązanie i sprawdzi wyniki przy pomocy testu jednostkowego. Genialne <span style="font-family:Wingdings">J</span>. 
</p><p>

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/zk4cfmxPk8o&#038;hl=pl&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/zk4cfmxPk8o&#038;hl=pl&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

	</p><p>Należy jednak pamiętać, że testy są zawsze pewnym uproszczeniem. Prawdziwych programistów poznaje się w pracy nad projektami a nie podczas rozwiązywania testów i zagadek algorytmicznych.
</p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/11/codility-vs-javablackbelt.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Własny renderer dla DataGrid (FLEX)</title>
		<link>http://www.jakubiak.eu/2009/09/wlasny-renderer-dla-datagrid-flex.html</link>
		<comments>http://www.jakubiak.eu/2009/09/wlasny-renderer-dla-datagrid-flex.html#comments</comments>
		<pubDate>Sat, 26 Sep 2009 12:04:51 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[FLEX]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/09/wlasny-renderer-dla-datagrid-flex.html</guid>
		<description><![CDATA[Adobe FLEX posiada komponent do wyświetlania tabelek który nazywa się DataGrid. W komórce tabeli możemy wyświetlić tekst, tekst HTML lub inny prosty komponent. Mi jednak tego było mało. Postanowiłem więc napisać swój własny renderer dla komórek tabeli. Z początku wydawało mi się to proste: napiszę nową klasę dziedziczącą po DataGridItemRenderer i w niej upakuję logikę [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.adobe.com/products/flex/" onclick="pageTracker._trackPageview('/outgoing/www.adobe.com/products/flex/?referer=');">Adobe FLEX</a> posiada komponent do wyświetlania tabelek który nazywa się <a href="http://livedocs.adobe.com/flex/3/langref/mx/controls/DataGrid.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/controls/DataGrid.html?referer=');">DataGrid</a>. W komórce tabeli możemy wyświetlić <a href="http://example.3alves.com/ItemRenderers/" onclick="pageTracker._trackPageview('/outgoing/example.3alves.com/ItemRenderers/?referer=');">tekst, tekst HTML lub inny prosty komponent</a>. Mi jednak tego było mało. Postanowiłem więc napisać swój własny renderer dla komórek tabeli. Z początku wydawało mi się to proste: napiszę nową klasę dziedziczącą po <em>DataGridItemRenderer</em> i w niej upakuję logikę do wyświetlania mojej komórki tabeli. Niestety rzeczywistość okazała się niezwykle zagmatwana i zmusiła mnie do dokopania się do nieprzyzwoitych paskudztw ukrytych wewnątrz FLEX.
</p><p>Nie mogłem zrobić klasy pochodnej z <a href="http://livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridItemRenderer.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridItemRenderer.html?referer=');">DataGridItemRenderer</a>, gdyż tak klasa dziczy po <a href="http://livedocs.adobe.com/flex/3/langref/mx/core/UITextField.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/core/UITextField.html?referer=');">UITextField</a> czyli potrafi wyświetlać tekst. A ja potrzebowałem tekst i coś jeszcze. Spróbowałem więc pisać na płótnie <a href="http://livedocs.adobe.com/flex/3/langref/mx/containers/Canvas.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/containers/Canvas.html?referer=');">Canvas</a>. Okazało się, że <em>Canvas</em> prawie działa. Problemem były wartości, które poprzez interfejs <a href="http://livedocs.adobe.com/flex/3/langref/mx/core/IDataRenderer.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/core/IDataRenderer.html?referer=');">IDataRenderer</a> otrzymywała moja klasa: zamiast spodziewanego obiektu reprezentującego konkretną komórkę tabeli otrzymywałem obiekt reprezentujący cały wiersz. Zastanowiło mnie też dlaczego klasa <em>Canvas</em> – czyli obiekt reprezentujący płótno implementuje interfejs <em>IDataRenderer</em> – może Wy widzicie związek? Dla mnie to tak jak mercedes standardowo wyposażony w pieska kiwającego głową. 
</p><p>Analizując przykłady, odkryłem że klasa <a href="http://livedocs.adobe.com/flex/3/langref/mx/controls/CheckBox.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/controls/CheckBox.html?referer=');">CheckBox</a> powinna zachowywać się w tej materii właściwie, czyli gdy chciałem aby komórka tabeli była wyświetlana obiektem klasy <em>CheckBox</em> – to obiekt ten otrzymywał dane reprezentujące konkretną komórkę a nie cały wiersz. To mnie zastanowiło, dlaczego <em>Canvas</em> dostaje do wyświetlenia wiersz a <em>CheckBox</em> dostaje wartość komórki. Pomyślałem, że problem leży gdzieś w interfejsach. Pomyślałem sobie, że może <em>DataGrid</em> wpisując dane do komórek swojej tabeli sprawdza – czy klasa odpowiedzialna za wyświetlenie tej komórki implementuje wskazany interfejs – i w zależności od tego wysyła do nie odpowiednie dane. To by brzmiało rozsądnie. Niestety, debugger nie potwierdził moich przeczuć. 
</p><p>Zajrzałem więc do źródła <em>CheckBox</em> i oto co znalazłem. Jest tam sobie funkcja setter na pole <em>data</em> wymagana przez interfejs <em>IDataRenderer</em>. Oto ona:
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/09/092609_1204_Wasnyrender1.png" alt=""/>
	</p><p>W moim odczuciu, to nie wygląda jak zwykły setter. Dla mnie to wygląda jak na kod zepsutego projektu. Taka napisana funkcja zachowuje się w sposób nieprzewidywalny. W dodatku, po co ktoś projektował interfejs skoro większość klas FLEXa go odziedziczy? 
</p><p>Wracając do sprawy, aby napisać własną klasę służącą do wyświetlania komórek tabeli powinniśmy zaimplementować interfejsy: <a href="http://livedocs.adobe.com/flex/3/langref/mx/core/IDataRenderer.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/core/IDataRenderer.html?referer=');">IDataRenderer</a>, <a href="http://livedocs.adobe.com/flex/3/langref/mx/controls/listClasses/IDropInListItemRenderer.html" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flex/3/langref/mx/controls/listClasses/IDropInListItemRenderer.html?referer=');">IDropInListItemRenderer</a>. Aby dostać wartość wiersza potrzebny jest nam <em>IDataRenderer</em>, jednak ten interfejs implementują prawie wszystkie komponenty FLEXa. Aby dobrać się do wartości komórki, potrzebujemy <em>IDropInListItemRenderer</em>. Możemy do zrobić na przykład tak:
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/09/092609_1204_Wasnyrender2.png" alt=""/>
	</p><p>Martwię się o FLEX. To wspaniała technologia, która umożliwia tworzenie wspaniałych rzeczy. Jednak bałagan który w niej panuje może być dla tej niej zabójczy. Bałagan, o którym wie każdy programista, który programował w FLEX. Bałagan oczywiście zawsze towarzyszy pracy programistów, jednak w niektórych projektach jest czasami nie do zniesienia.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/09/wlasny-renderer-dla-datagrid-flex.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Druga noc z Hero</title>
		<link>http://www.jakubiak.eu/2009/08/druga-noc-z-hero.html</link>
		<comments>http://www.jakubiak.eu/2009/08/druga-noc-z-hero.html#comments</comments>
		<pubDate>Sat, 29 Aug 2009 10:56:41 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Recenzje]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/08/druga-noc-z-hero.html</guid>
		<description><![CDATA[Postanowiłem przetestować, jak mój nowy telefon poradzi sobie w sytuacji kryzysowej. Kryzys wyobrażam sobie tak. Jestem sobie na wakacjach w górach. Właśnie jadę wyciągiem, by za chwilę zjechać z górki na pazurki. Dzwoni klient. Wykonuję cyrkowe akrobacje by odebrać rozmowę i nie zgubić rękawiczek. Dowiaduję się, że aplikacja nie działa a zaraz jest prezentacja. I [...]]]></description>
			<content:encoded><![CDATA[<p>Postanowiłem przetestować, jak mój nowy telefon poradzi sobie w sytuacji kryzysowej.
</p><p>Kryzys wyobrażam sobie tak. Jestem sobie na wakacjach w górach. Właśnie jadę wyciągiem, by za chwilę zjechać z górki na pazurki. Dzwoni klient. Wykonuję cyrkowe akrobacje by odebrać rozmowę i nie zgubić rękawiczek. Dowiaduję się, że aplikacja nie działa a zaraz jest prezentacja. I że to wyjątkowa sytuacja i czy nie mógł bym sprawdzić o co chodzi bo pewnie zepsuła się jakaś drobnostka… Oczywiście to nie jest wyjątkowa sytuacja, bo aplikacje zwykle psują się wtedy gdy programiści mają wakacje i wtedy gdy będę prezentowane – tak jakby wstydziły się sławy. 
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/08/082909_1056_DruganoczHe1.png" alt=""/>
	</p><p>Czy z moim HTC Hero poradził bym sobie w tej sytuacji? Oczywiście musiałbym dojechać do jakiegoś baru, schroniska. Następnie zobaczyć co jest nie tak z aplikacją WWW. Zalogować się po SSH na serwer. Sprawdzić co jest nie tak. Może ubić kilka procesów, może zrestartować aplikację – nie wiadomo. No i oczywiście nie chciał bym tracić na to całego dnia. Normalnie, siedząc przy komputerze w domu wykonanie tych czynności zajęło by chwilę. Będąc w górach nie mam laptopa ale mogę liczyć na ślamazarne łącze internetowe mojego telefonu.
</p><p>Postanowiłem zrobić symulacje naprawy. Wyobraźmy sobie, że nieszczęście spowodowane było brakiem miejsca na dysku: &#8220;df –h&#8221; wyjaśnia sprawę, bo jakiś dziennik gdzieś spuchł i bo ktoś zapomniał przełączyć logowania z trybu odrobaczania na tryb produkcyjny. Przyczyna awarii brzmi sensownie, co?
</p><p>Wcześniej zainstalowałem klienta <a href="http://code.google.com/p/connectbot/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/connectbot/?referer=');">SSH ConnectBot</a>. Wczoraj miałem problemy z klawiaturą, jednak dziś udało mi się je pokonać. ConnectBot lepiej pracuje w pionowej pozycji telefonu a gdy klawiatura ginie, to można ją włączyć <a href="http://code.google.com/p/connectbot/wiki/UsageWithSoftKeyboard" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/connectbot/wiki/UsageWithSoftKeyboard?referer=');">przyciskiem MENU</a>. Problem w tym, że na HTC Hero to nie działa. Jednak klawiatura włączy się gdy cofniemy i przywrócimy konsole. Klawiatura pionowa jest mniej wygodna niż pozioma ale można się przyzwyczaić i o ile herbata rozmrozi palce to wszystko będzie dobrze. 
</p><p>Tak więc, wczoraj wygenerował w ConnectBot parę kluczy SSH. Zalogowałem się na serwer. Troszkę się męcząc wyedytowałem plik <code>vim .ssh/authorized_keys</code>. Tu niezastąpiona jest znajomość edytora <a href="http://www.vim.org/" onclick="pageTracker._trackPageview('/outgoing/www.vim.org/?referer=');">vim</a>. Bez niego było by dużo trudniej. Do pliku wkleiłem wygenerowany klucz publiczny po to by następnym razem logować się z telefonu bez podawania trudnego hasła. Do pracy w Vimie potrzebny jest nam przycisk ESC, który nie jest dostępny na klawiaturze ekranowej. Dlatego zapoznałem się ze <a href="http://code.google.com/p/connectbot/wiki/UsageWithSoftKeyboard" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/connectbot/wiki/UsageWithSoftKeyboard?referer=');">skrótami klawiatury</a> i <a href="http://code.google.com/p/connectbot/wiki/ScreenGestures" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/connectbot/wiki/ScreenGestures?referer=');">gestami</a> dostępnymi w ConnectBot. ESC osiągamy wciskając dwa razu kulkę. CTRL to wciśnięcie kulki. TAB to kulka później &#8220;i&#8221;. Wyjście z VIMa to: ESC :wq.  <span style="font-family:Wingdings">J</span>
	</p><p>Przerwałem połączenie, zalogowałem się ponownie. Tym razem obeszło się już bez trudnego podawania trudnego hasła do serwera, czyli szybciej. Postanowiłem zobaczyć jak działa polecenie top. Wynik jest akceptowalny. Polecenie top możemy zakończyć wciskając przycisk &#8220;q&#8221;. (W przypadku problemów z dyskiem polecenie top wskaże wysoki load i niskie zużycia procesora &#8211; procesy czekają na dostęp do dysku). Ekran możemy powiększać i zmniejszać korzystając z przycisków głośności. 
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/08/082909_1056_DruganoczHe2.jpg" alt=""/>
	</p><p>Spróbowałem przelogować się na roota. Wprowadzenie hasła może być palcołomne, jednak wytrwałem się to uda. Pewnie trzeba wywalić z dysku jakieś logi lub przestarzałe backupy. Tylko to można zrobić na szybko. Tylko ostrożnie! 
</p><p>Naprawa mojej wyimaginowanej awarii polegała by na poprawieniu pliku konfiguracyjnego. Znów wracam więc do VIMa. VIMa naprawdę warto znać. Gdy ponad 30 lat temu powstawał Vi, pewnie nikt nie pomyślał, że będę wychwalał ten edytor w kontekście telefonów z ekranem dotykowym. VIM rządzi!
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/08/082909_1056_DruganoczHe3.jpg" alt=""/>
	</p><p>Tak więc, dzięki mojemu nowemu bohaterowi, udało mi się zażegnać wyimaginowany kryzys. W prawdziwym kryzysie, nie było by tak łatwo, ale jakaś szansa istnieje. Dzięki telefonowi mogłem sprawdzić działanie strony WWW. Mogłem zalogować się na serwer. Mogłem przelogować się na super użytkownika. Mogłem wykonywać polecenia powłoki. Mogłem też edytować pliki. Dokładnie o to mi zawsze chodziło. Od czasów mojej <a href="http://pl.wikipedia.org/wiki/Nokia_3210" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/Nokia_3210?referer=');">Nokii 3210</a> zawsze chciałem mieć takie możliwości. Teoretycznie <a href="http://en.wikipedia.org/wiki/Nokia_E70" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Nokia_E70?referer=');">Nokia E70</a> której używałem wcześniej też by sobie z tym zadaniem poradziła, jednak Symbian i te diabelne certyfikaty zniechęcały mnie. 
</p><p>Przy okazji, odkryłem wczoraj jeszcze jedną fajną cechę programu ConnectBot. ConnectBot oferuje również terminal lokalny, który wybornie zastępuje programy <a href="http://www.jakubiak.eu/2009/08/pierwsza-noc-z-hero.html">Terminal oraz Better Terminal z którymi miałem problem wcześniej</a>. 
</p><p>
 </p><p>
 </p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/08/druga-noc-z-hero.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>RTMP jak to robi YouTube</title>
		<link>http://www.jakubiak.eu/2009/07/rtmp-jak-to-robi-youtube.html</link>
		<comments>http://www.jakubiak.eu/2009/07/rtmp-jak-to-robi-youtube.html#comments</comments>
		<pubDate>Mon, 06 Jul 2009 13:47:32 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[FLEX]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/07/rtmp-jak-to-robi-youtube.html</guid>
		<description><![CDATA[Z protokołem RTMP jest związany pewien problem. Standardowo działa on na porcie 1935. Właściwie, to nie jest problem z protokołem RTMP ale z ISP. Firmy, które sprzedają nam Internet lubią filtrować i kolejkować pakiety. Dlatego połączenia na porcie 1935 – który jest mało znany w Internecie działają dużo gorzej niż połączenia na porcie 80. Adobe [...]]]></description>
			<content:encoded><![CDATA[<p>Z protokołem <a href="http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Real_Time_Messaging_Protocol?referer=');">RTMP</a> jest związany pewien problem. Standardowo działa on na porcie 1935. Właściwie, to nie jest problem z protokołem RTMP ale z <a href="http://pl.wikipedia.org/wiki/Internet_Service_Provider" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/Internet_Service_Provider?referer=');">ISP</a>. Firmy, które sprzedają nam Internet lubią filtrować i kolejkować pakiety. Dlatego połączenia na porcie 1935 – który jest mało znany w Internecie działają dużo gorzej niż połączenia na porcie 80. Adobe wiedziało o tym, i wprowadziło protokół RTMPT, który jest opakowaniem protokołu RTMP w protokół HTTP, który działa na porcie 80 i który może doprowadzić do połamania języka. 
</p><p>YouTube zrobił coś innego. Otóż, <a href="http://www.youtube.com/my_webcam" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/my_webcam?referer=');">You Tube ma w sobie coś takiego jak nagrywanie z kamery webowej</a>. Do tego celu używają protokołu RTMP. Jednak wydaje mi się, że na porcie 80. Powiedział mi to <a href="http://www.netlimiter.com/" onclick="pageTracker._trackPageview('/outgoing/www.netlimiter.com/?referer=');">NetLimiter</a> – skąd inąd fajny program który polecam. 
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/07/070609_1347_RTMPjaktoro1.png" alt=""/>
	</p><p>Postanowiłem więc dokładnie sprawdzić czy na pewno jest to protokół RTMP – na co wyglądało, czy też może zwyczajnie RTMPT. Zanurkowałem głęboko w system  a jako butli tlenowej użyłem <a href="http://www.wireshark.org/" onclick="pageTracker._trackPageview('/outgoing/www.wireshark.org/?referer=');">Wireshark</a>. Wireshark to program który umożliwia podglądanie danych przekazywanych w połączeniach sieciowych. Chciałem sprawdzić, co tam się przesyłam z mojego komputera na serwery YouTube. Gdyby był to protokół RTMPT to podczas nagrywania wideo znalazło by się tam sporo żądań POST. Nie było ich… Było za to coś takiego: 
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/07/070609_1347_RTMPjaktoro2.png" alt=""/>
	</p><p>rtmp://…:80/ &#8211; na 99% YouTube korzysta z protokołu RTMP na porcie 80. 
</p><p>Dotychczas z serwerem Red5 łączyłem się na porcie 1935 po protokole RTMP. Jeżeli połączenie działało źle – to próbowałem przełączyć się w na połączenie RTMPT na porcie 80 – sterowałem tym ręcznie lub pozwalałem aby Flash robił to automatycznie. Być może nie potrzebnie, skoro YouTube używa RTMP na porcie 80 to ja też powinienem spróbować.
</p><p>
 </p><p>
 </p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/07/rtmp-jak-to-robi-youtube.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Javarsowia a i++ czy ++i</title>
		<link>http://www.jakubiak.eu/2009/07/javarsowia-a-i-czy-i.html</link>
		<comments>http://www.jakubiak.eu/2009/07/javarsowia-a-i-czy-i.html#comments</comments>
		<pubDate>Mon, 06 Jul 2009 11:33:33 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Recenzje]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/07/javarsowia-a-i-czy-i.html</guid>
		<description><![CDATA[W sobotę odbyła się konferencja Javarsowia. Darmowa warszawska konferencja była naprawdę znakomicie zorganizowana i niczym nie ustępowała płatnej krakowskiej konferencji JDD. Wykłady, materiały, prezenty i jedzenie – które wygłodniali informatycy wyskrobywali z garnków – wszystko było na bardzo dobrym poziomie. Mi najbardziej spodobał się wygład Pawła Szulca o Apache Wicket. Dziękuje organizatorom, wykładowcom i sponsorom!!! [...]]]></description>
			<content:encoded><![CDATA[<p>W sobotę odbyła się konferencja <a href="http://javarsovia.mocna-kawa.com/" onclick="pageTracker._trackPageview('/outgoing/javarsovia.mocna-kawa.com/?referer=');">Javarsowia</a>. Darmowa warszawska konferencja była naprawdę znakomicie zorganizowana i niczym nie ustępowała płatnej krakowskiej konferencji <a href="http://jdd.org.pl/" onclick="pageTracker._trackPageview('/outgoing/jdd.org.pl/?referer=');">JDD</a>. Wykłady, materiały, prezenty i jedzenie – które wygłodniali informatycy wyskrobywali z garnków – wszystko było na bardzo dobrym poziomie. Mi najbardziej spodobał się wygład <a href="http://paulszulc.wordpress.com/" onclick="pageTracker._trackPageview('/outgoing/paulszulc.wordpress.com/?referer=');">Pawła Szulca o Apache Wicket</a>. Dziękuje organizatorom, wykładowcom i sponsorom!!!
</p><p>Zauważyłem, że ostatnio na konferencjach Java pojawił się trend na konkursy. Konkursy są najzupełniej w porządku, jednak nie podobają mi się pytania konkursowe. Uważam je za <a href="http://pl.wikipedia.org/wiki/Głupota" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/G_upota?referer=');">głupie</a>. Nie chciałem brać udziału w tych konkursach, ale zobaczyłem małe czarne pudełeczka z tajemniczą nagrodą. Nie wytrzymałem, spróbowałem i nie rozwiązałem poprawnie. Na szczęście – dwa małe czarne pudełeczka udało mi się i tak dostać. Dzięki!!! Oto konkurs. 
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/07/070609_1133_Javarsowiaa1.jpg" alt=""/>
	</p><p>Metoda <em>main</em> wypisze: &#8220;<a href="http://pl.wikiquote.org/wiki/Rejs" onclick="pageTracker._trackPageview('/outgoing/pl.wikiquote.org/wiki/Rejs?referer=');">Koń&#8230; Krowa, kura, kaczka&#8230; Kura, kaczka, drób&#8230;(&#8230;) O! Jest! Widzę! Droga&#8230;</a>&#8220;. &#8220;<a href="http://pl.wikipedia.org/wiki/Głupota" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/G_upota?referer=');">Głupota</a> – niedostatek rozumu przejawiający <strong>nieumiejętnością rozpoznawania istoty rzeczy</strong>&#8220;. To nie jest istota programowania. Tak precyzyjna wiedza o klasach, dziedziczeniu i przysłanianiu metod jest konieczna tylko dla programistów maszyny wirtualnej Java – którzy muszą trzymać się standardów. Programiści Java – nie powinni nigdy w życiu napisać takiego kodu. Programiści Java, gdy zobaczą taki kod powinni zaalarmować. Przypomina mi to trochę <a href="http://pl.wikipedia.org/wiki/Perl_golf" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/Perl_golf?referer=');">Perlowego Golfa</a>. Jednak pomiędzy Perlowym Golfem a takim konkursami jest pewna różnica – Perlowy Golf polega na napisaniu najkrótszego programu co samo w sobie może być pewnym celem. Tymczasem celem tego programiku, zagadki – jest wyłącznie zagmatwanie. Nie o to chodzi. To nie jest istota programowania. W programowaniu nie chodzi o to żeby zagmatwać, ale żeby zarządzać informacją. ++i  lub  i++.
</p><p>Krytykując, zawsze należy podać alternatywę. Jak napisałem wcześniej, konkursy uważam za fajne. Jednak takie pytania uważam za uwłaczający godności programistów. Moją godność kupili czarnymi pudełeczkami… No cóż… O co więc należy pytać na konferencjach, żeby nie obrażać uczestników? O istotę rzeczy!!! Na przykład styl kodowania:  <code><span style="background-color:#c6d9f1">if(coś.equals("Antek"))</span> czy <span style="background-color:#c6d9f1">if("Antek".eqauls(coś))</span> lub <span style="background-color:#c6d9f1">if(coś==null)</span>
			</code></pre>czy<code>
				<span style="background-color:#c6d9f1">if(null==coś)</span>. </code>W tych dwóch króciutkich pytaniach prawidłowy jest tylko jeden styl kodowania – czy wiecie który i czy wiecie czemu? O co jeszcze można pytać na konferencjach. Na przykład o bardzo ważna metodę "<a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" onclick="pageTracker._trackPageview('/outgoing/java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html?referer=');"><span style="font-family:Consolas; font-size:10pt">equals</span></a>" – gdyż pisząc ją łatwo jest się pomylić.
</p><p>Istotą programowania nie jest wiedza, jaka jest różnica pomiędzy i++ czy ++i. Dobry programista nie musi tego wiedzieć. Dobry programista musi wiedzieć natomiast to, że inni mogą nie wiedzieć. Programowanie, to język który wykonują maszyny. Programowanie to język który muszą zrozumieć ludzie. Dlatego istotą programowania nie jest zapis <code>if(7==i++)</code> ale zapis: <code>i++;if(7==i).</code> Istotą programowania jest taki zapis myśli, aby ludzie mogli go odczytać a maszyny wykonać. 
</p><p>Chodzi mi tylko o to, aby ludzie którzy przyjdą na konferencje, którzy wystartują w konkursie i którzy dostaną czarne pudełeczko, nauczyli się przy okazji czegoś pożytecznego. 
</p><p>Programista to taki informatyk. Informatyka to zarządzanie wiedzą. Zarządzanie wiedzą to umiejętność rozpoznania istoty wiedzy. Skończmy z głupimi konkursami. Czas na dobre konkursy. Czekam na Wasze przykłady…
</p><p>
 </p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/07/javarsowia-a-i-czy-i.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Co nowego w Red5 0.9?</title>
		<link>http://www.jakubiak.eu/2009/06/co-nowego-w-red5-09.html</link>
		<comments>http://www.jakubiak.eu/2009/06/co-nowego-w-red5-09.html#comments</comments>
		<pubDate>Tue, 16 Jun 2009 20:43:54 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[Red5]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/06/co-nowego-w-red5-09.html</guid>
		<description><![CDATA[Kilka dni temu świat ujrzał Red5 w wersji 0.8. W zasadzie Red5 0.8 nie wnosi nic nowego – uporządkowano jednak kod i dodano instalator aplikacji. Red5 0.8 to były ważne zmiany dla programistów a nie dla użytkowników. Dopiero Red5 0.9 to będzie coś!!! Popatrzyłem na komentarz programistów w systemie kontroli wersji i znalazłem tam: H264, [...]]]></description>
			<content:encoded><![CDATA[<p>Kilka dni temu świat ujrzał <a href="http://www.red5.org/" onclick="pageTracker._trackPageview('/outgoing/www.red5.org/?referer=');">Red5</a> w wersji 0.8. W zasadzie Red5 0.8 nie wnosi nic nowego – uporządkowano jednak kod i dodano instalator aplikacji. Red5 0.8 to były ważne zmiany dla programistów a nie dla użytkowników. 
</p><p>Dopiero Red5 0.9 to będzie coś!!! <a href="http://code.google.com/p/red5/source/list" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/red5/source/list?referer=');">Popatrzyłem na komentarz programistów w systemie kontroli wersji i znalazłem tam</a>: 
</p><ul><li><a href="http://pl.wikipedia.org/wiki/H.264/MPEG-4_AVC" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/H.264/MPEG-4_AVC?referer=');">H264</a>, <a href="http://pl.wikipedia.org/wiki/AAC" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/AAC?referer=');">AAC</a>, <a href="http://pl.wikipedia.org/wiki/Real-time_Transport_Protocol" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/Real-time_Transport_Protocol?referer=');">RTP</a>, <a href="http://pl.wikipedia.org/wiki/Real_Time_Streaming_Protocol" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/Real_Time_Streaming_Protocol?referer=');">RTSP</a>
		</li><li>PHP Quercus
</li><li>mp4,m4a,f4v,3gp,and 3g2
</li></ul><p>Jak widać programiści Red5 pracują pełną parą. Zachęciło mnie to do zaktualizowania projekt <a href="http://code.google.com/p/jakubiak-red5/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/jakubiak-red5/?referer=');">jakubiak-red5</a> – budowanie Red5 z <a href="http://maven.apache.org/" onclick="pageTracker._trackPageview('/outgoing/maven.apache.org/?referer=');">maven2</a>. <a href="http://jakubiak-red5.googlecode.com/svn/branches/0.8.0/" onclick="pageTracker._trackPageview('/outgoing/jakubiak-red5.googlecode.com/svn/branches/0.8.0/?referer=');">Utworzyłem gałąź 0.8.0</a>. <a href="http://jakubiak-red5.googlecode.com/svn/repo/" onclick="pageTracker._trackPageview('/outgoing/jakubiak-red5.googlecode.com/svn/repo/?referer=');">Utworzyłem repozytorium maven</a>. Posprzątałem trochę kod.  
</p><p>Uważam, że wersja 0.9 Red5 będzie przełomowa. Dotychczas Red5 zostawał w tyle za <a href="http://www.wowzamedia.com/" onclick="pageTracker._trackPageview('/outgoing/www.wowzamedia.com/?referer=');">Wowza</a> i <a href="http://www.adobe.com/products/flashmediaserver/" onclick="pageTracker._trackPageview('/outgoing/www.adobe.com/products/flashmediaserver/?referer=');">FMS</a>. Nowa wersja i potęga <a href="http://www.xuggle.com/" onclick="pageTracker._trackPageview('/outgoing/www.xuggle.com/?referer=');">Xuggle</a> wypchną ten serwer daleko przed konkurencje – przynajmniej w dziedzinie przetwarzania strumieni wideo.
</p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/06/co-nowego-w-red5-09.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>wagon-svn</title>
		<link>http://www.jakubiak.eu/2009/06/wagon-svn.html</link>
		<comments>http://www.jakubiak.eu/2009/06/wagon-svn.html#comments</comments>
		<pubDate>Tue, 02 Jun 2009 13:32:30 +0000</pubDate>
		<dc:creator>Antoni Jakubiak</dc:creator>
				<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://www.jakubiak.eu/2009/06/wagon-svn.html</guid>
		<description><![CDATA[wagon-svn to rozszerzenie do Maven2 które umożliwia publikowanie bibliotek do zdalnego repozytorium SVN. Może być ono szczególnie użyteczne dla osób korzystających z Google Code, na przykład dla mnie J. Instalacja biblioteki jest prosto, nie będę jej opisywał, gdyż zrobiło to już kilku boglerów, na przykład Don Brown. W skrócie, maven2 pozwala określić jakie biblioteki potrzebne [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mvnbrowser.com/artifact-details.html?groupId=org.jvnet.wagon-svn&amp;artifactId=wagon-svn" onclick="pageTracker._trackPageview('/outgoing/mvnbrowser.com/artifact-details.html?groupId=org.jvnet.wagon-svn_amp_artifactId=wagon-svn&amp;referer=');">wagon-svn</a> to rozszerzenie do <a href="http://maven.apache.org/" onclick="pageTracker._trackPageview('/outgoing/maven.apache.org/?referer=');">Maven2</a> które umożliwia publikowanie bibliotek do zdalnego repozytorium <a href="http://pl.wikipedia.org/wiki/Subversion" onclick="pageTracker._trackPageview('/outgoing/pl.wikipedia.org/wiki/Subversion?referer=');">SVN</a>. Może być ono szczególnie użyteczne dla osób korzystających z <a href="http://code.google.com/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/?referer=');">Google Code</a>, na przykład dla mnie <span style="font-family:Wingdings">J</span>. Instalacja biblioteki jest prosto, nie będę jej opisywał, gdyż zrobiło to już kilku boglerów, na przykład <a href="http://www.jroller.com/mrdon/entry/find_of_the_day_wagon" onclick="pageTracker._trackPageview('/outgoing/www.jroller.com/mrdon/entry/find_of_the_day_wagon?referer=');">Don Brown</a>. 
</p><p><img src="http://www.jakubiak.eu/wp-content/uploads/2009/06/060209-1332-wagonsvn11.png" alt=""/>
	</p><p>W skrócie, maven2 pozwala określić jakie biblioteki potrzebne są do skompilowania naszej aplikacji. Biblioteki dostępne są w repozytoriach. Aby umieścić nasz projekt w repozytorium możemy korzystać właśnie z wagon-svn.
</p><p>Z mojego odkrycia cieszę się niezmiernie, gdyż pamiętam że rok temu jeszcze nie było z tym tak prosto.
</p>]]></content:encoded>
			<wfw:commentRss>http://www.jakubiak.eu/2009/06/wagon-svn.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

