<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Python blogowo.net</title>
	<link rel="self" href="http://python.blogowo.net/atom.xml"/>
	<link href="http://python.blogowo.net/"/>
	<id>http://python.blogowo.net/atom.xml</id>
	<updated>2008-07-05T16:47:09+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry xml:lang="pl">
		<title type="html">W niedzielę obieram kierunek na północny wschód</title>
		<link href="http://zgodowie.org/2008/07/03/w-niedziele-obieram-kierunek-na-polnocny-wschod/"/>
		<id>http://zgodowie.org/2008/07/03/w-niedziele-obieram-kierunek-na-polnocny-wschod/</id>
		<updated>2008-07-03T19:47:13+00:00</updated>
		<content type="html">&lt;p&gt;Znaczy: do Wilna, tak jak rok temu na &lt;a href=&quot;http://www.europython.org/&quot;&gt;EuroPython&lt;/a&gt;. Tym razem wybieramy się w większym towarzystwie, a jak podejrzewam reprezentacja Polski też będzie liczniejsza, niż w ubiegłym roku.
&lt;/p&gt;
&lt;p&gt;Do zobaczenia w Wilnie!
&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Diamanda 2008.07 Test 2</title>
		<link href="http://www.python.rk.edu.pl/w/p/diamanda-200807-test-2/"/>
		<id>http://www.python.rk.edu.pl/w/p/diamanda-200807-test-2/</id>
		<updated>2008-07-02T16:24:13+00:00</updated>
		<content type="html">Można &lt;a href=&quot;http://code.google.com/p/diamanda/downloads/list&quot;&gt;pobrać&lt;/a&gt; już drugą &quot;wersję testową&quot; zbliżającego się wydania Diamandy 2008. W porównaniu z Test 1 wprowadziłem wiele zmian (większość z zamierzanych dla wersji finalnej):
&lt;ul&gt;
&lt;li&gt;Obsługa prefiksów, moderatorów na forach. Oznaczanie tematów jako &quot;rozwiązany&quot; (solved). Możliwość zezwalania anonimom na postowanie w określonych forach&lt;/li&gt;
&lt;li&gt;Dodanie Feeda &quot;Co nowego?&quot; na stronie głównej (+RSS) zbierającego zmiany i nowości (obecnie dla artykułów i postów)&lt;/li&gt;
&lt;li&gt;Obsługa OpenID (logowanie na openID, możliwość stworzenia konta Django (bez hasła) i automatyczne logowanie na nie po zalogowaniu się na openID)&lt;/li&gt;
&lt;li&gt;Kilka mniejszych zmian we wszystkich aplikacjach i komponentach&lt;/li&gt;
&lt;/ul&gt;
W przeciągu 1-2 tygodni pojawi się Test 3, który po około tygodniu przerodzi się w wydanie finalne. W Test 3 znajdą się poprawki, oraz pozostałe planowane zmiany (wykończenie OpenID i zgłaszania treści).</content>
		<author>
			<name>Riklaunim</name>
			<uri>http://www.python.rk.edu.pl/</uri>
		</author>
		<source>
			<title type="html">Biblioteka Riklaunima  - python.rk.edu.pl</title>
			<subtitle type="html">Artykuły i Wiadomości z python.rk.edu.pl</subtitle>
			<link rel="self" href="http://www.python.rk.edu.pl/w/rss/"/>
			<id>http://www.python.rk.edu.pl/w/rss/</id>
			<updated>2008-07-05T16:47:05+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Sprzątanie po PHP czyli Passenger 2.0 i Ruby Enterprise 1.0</title>
		<link href="http://blog.zabiello.com/articles/2008/06/04/passenger2-ruby-enterprise"/>
		<id>urn:uuid:77d6b3df-2b86-4365-b5de-d4fd9b153ecc</id>
		<updated>2008-07-01T17:49:32+00:00</updated>
		<content type="html">&lt;p&gt;Stało się! &lt;a href=&quot;http://www.phusion.nl/&quot;&gt;Twórcy&lt;/a&gt; świetnego modułu Apache&amp;#8217;a &amp;#8211; &lt;a href=&quot;http://www.modrails.com/&quot;&gt;mod_rails&lt;/a&gt; &amp;#8211; zmieniają jego nazwę na &lt;strong&gt;mod_passenger&lt;/strong&gt;, bo mod_rails nie jest już więcej modułem tylko dla &lt;a href=&quot;http://rubyonrails.pl&quot;&gt;Rails&lt;/a&gt;. W nowej wersji 2.0 (ktora ma wyjść &lt;a href=&quot;http://groups.google.com/group/phusion-passenger/browse_thread/thread/a2b63650c1b9394&quot;&gt;na dniach&lt;/a&gt;) dodano pełne wsparcie dla &lt;a href=&quot;http://blog.zabiello.com/articles/2008/03/04/frameworki-rubiego-rack-wsgi&quot;&gt;Rack&lt;/a&gt; i tym samym mod_passenger 2.0 obsługuje wszystkie pozostałe frameworki używające Rack&amp;#8217;a (ze świetnym &lt;a href=&quot;http://merbivore.com&quot;&gt;Merbem&lt;/a&gt; włącznie).&lt;/p&gt;


	&lt;p&gt;Drugim, ciekawym projektem firmy &lt;a href=&quot;http://www.phusion.nl/&quot;&gt;Phusion&lt;/a&gt; jest &lt;a href=&quot;http://www.rubyenterpriseedition.com/&quot;&gt;Ruby Enterprise&lt;/a&gt; (wersja 1.0 ma być dostępna lada dzień razem z Passenger 2.0). Jest to podrasowana wersja interpretera Rubiego (MRI) powodująca nie tylko przyśpieszenie ale także znaczne zmniejszenie zużycia pamięci &lt;span class=&quot;caps&quot;&gt;RAM&lt;/span&gt; (dodano technikę copy-on-write do garbage collectora interpretera &lt;span class=&quot;caps&quot;&gt;MRI&lt;/span&gt;, dokładniej opisano to na &lt;a href=&quot;https://dl.getdropbox.com/u/26205/railsconf.pdf&quot;&gt;slajdach&lt;/a&gt;). Wg tego co twierdzą ludzie z Phusion, uzyskano zmniejszenie o 33% zużycia pamięci przez Rails. To bardzo dobra wiadomość, bo pamięć mimo, że jest generalnie tania, nie jest tania w ofertach hostingowych &lt;span class=&quot;caps&quot;&gt;VPS&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Passenger wprowadza nową jakość dla frameworków Rubiego. Coraz więcej firm hostingowych to docenia i przechodzi na Passenger&amp;#8217;a (z tych bardziej znanych, &lt;a href=&quot;http://blog.dreamhost.com/2008/05/13/passenger-for-ruby-on-rails/&quot;&gt;Dreamhost już tego używa&lt;/a&gt;). Sam moduł mod_passenger jest nie tylko trywialny w użyciu, jest też bardzo szybki i stabilny. Chyba nadchodzą ciężkie chwile dla tych, co trzymali się &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; głównie z powodu jego taniego hostingu i prostoty uruchomiania serwerze. Rails i Merb mogą wkrótce trochę pozamiatać po &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;. :)&lt;/p&gt;


	&lt;p&gt;Szybkość mod_passenger&amp;#8217;a robi wrażenie. Bije wydajnością kombinację &lt;a href=&quot;http://nginx.net/&quot;&gt;Nginx&lt;/a&gt; + asynchroniczny &lt;a href=&quot;http://code.macournoyer.com/thin/&quot;&gt;Thin&lt;/a&gt; używający szybkich, uniksowych socketów. Jest też szybszy od komercyjnego &lt;a href=&quot;http://litespeedtech.com/&quot;&gt;Litespeed&amp;#8217;a&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://blog.zabiello.com/images/passenger_vs_thin.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://blog.zabiello.com/images/passenger_vs_litespeed.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;Co ciekawe, mod_passenger obsługuje interfejs &lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; do Pythona&lt;/strong&gt;! Jeden moduł pozwoli więc na odpalanie Rails, Merb&amp;#8217;a i Django równocześnie. Mało tego, jeśli mod_passenger dla Pythona będzie działał tak sprawnie jak dla Rails, to będziemy mieć trywialne przeładowywanie aplikacji Django bez konieczności restartu całego Apache&amp;#8217;a.&lt;/p&gt;


	&lt;p&gt;Vide:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.railsjedi.com/posts/52-The-Holy-Grail-for-Rails-Deployment&quot;&gt;The Holy Grail for Rails Deployment&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.rubyinside.com/28_mod_rails_and_passenger_resources-899.html&quot;&gt;28 mod_rails / Passenger Resources To Help You Deploy Rails Applications Faster&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://github.com/FooBarWidget/passenger/tree/master&quot;&gt;Passenger 2.0 na GitHub.com&lt;/a&gt; dla tych, co chcą już teraz zainstalować mod_passenger 2.0 (ja już to zainstalowałem)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Update&lt;/h3&gt;


	&lt;p&gt;&lt;em&gt;2008-06-25&lt;/em&gt;&lt;/p&gt;


                &lt;br /&gt;&lt;a href=&quot;http://www.vimeo.com/1198020?pg=embed&amp;sec=1198020&quot;&gt;Phusion Passenger 2.0 and Ruby Enterprise Edition&lt;/a&gt; from &lt;a href=&quot;http://www.vimeo.com/user519957?pg=embed&amp;sec=1198020&quot;&gt;Carl Youngblood&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com?pg=embed&amp;sec=1198020&quot;&gt;Vimeo&lt;/a&gt;

	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://blog.dmilith.pl/2008/06/25/ruby-enterprise-edition-32bit-na-debianie-etch-64bit&quot;&gt;Ruby Enterprise Edition 32bit na debianie etch 64bit?&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;</content>
		<author>
			<name>Jarosław Zabiełło</name>
			<uri>http://blog.zabiello.com/articles/tag/python</uri>
		</author>
		<source>
			<title type="html">Jarosław Zabiełło - BLOG: Tag python</title>
			<subtitle type="html">moje notatki, linki, komentarze</subtitle>
			<link rel="self" href="http://blog.zabiello.com/xml/atom/tag/python/feed.xml"/>
			<id>tag:blog.zabiello.com,2005:Typo</id>
			<updated>2008-07-04T10:47:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">KomodoEdit i Pyflakes</title>
		<link href="http://zgodowie.org/2008/06/30/komodoedit-i-pyflakes/"/>
		<id>http://zgodowie.org/2008/06/30/komodoedit-i-pyflakes/</id>
		<updated>2008-06-30T07:54:48+00:00</updated>
		<content type="html">&lt;p&gt;Ponieważ &lt;a href=&quot;http://pida.co.uk/&quot;&gt;PIDA&lt;/a&gt; zaczęła mnie wkurzać (co chwilę a to coś działa, a to nie działa), postanowiłem dać szansę &lt;a href=&quot;http://www.openkomodo.com/&quot;&gt;KomodoEdit&lt;/a&gt;, mocno okrojonej, ale darmowej wersji niezłego Komodo IDE. Ponieważ mój nowy &lt;em&gt;lapek&lt;/em&gt; ma 2GB RAM na pokładzie i mocny, dwurdzeniowy procesor, &lt;em&gt;żerność&lt;/em&gt; Komodo nie była aż tak wielkim problemem jak dawniej ...&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Popularność języków programowania vs oferty pracy</title>
		<link href="http://blog.zeromski.com.pl/2008/05/11/popularnosc-jezykow-programowania-vs-oferty-pracy/"/>
		<id>http://blog.zeromski.com.pl/2008/05/11/popularnosc-jezykow-programowania-vs-oferty-pracy/</id>
		<updated>2008-06-29T06:47:11+00:00</updated>
		<content type="html">Od czasu do czasy dyskutuję z ludźmi na temat popularności języków programowania oraz o tym jak to się ma do możliwości znalezienia pracy. Postanowiłem więc, znaleźć stronkę na której by była przedstawiana popularność języków programowania oraz ilość ofert pracy w polskich serwisach - sam jestem ciekaw jak wyjdzie taki test. ...</content>
		<author>
			<name>Mateusz Zeromski</name>
			<uri>http://blog.zeromski.com.pl</uri>
		</author>
		<source>
			<title type="html">Mateusz Żeromski - Blog » python</title>
			<subtitle type="html">IT z innej strony :)</subtitle>
			<link rel="self" href="http://blog.zeromski.com.pl/tag/python/rss"/>
			<id>http://blog.zeromski.com.pl/tag/python/rss</id>
			<updated>2008-07-03T22:47:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Kodowanie UTF-8 w python (django, pylons, sqlalchemy, mako)</title>
		<link href="http://blog.zeromski.com.pl/2008/05/11/kodowanie-utf-8-w-python-django-pylons-sqlalchemy-mako-polskie-znaczki/"/>
		<id>http://blog.zeromski.com.pl/2008/05/11/kodowanie-utf-8-w-python-django-pylons-sqlalchemy-mako-polskie-znaczki/</id>
		<updated>2008-06-29T06:47:11+00:00</updated>
		<content type="html">Pisanie aplikacji pythonowskich, dla początkujących wiąże się z problemami z kodowaniem. Jako, że już mam te początki za sobą w tym artykule postaram się omówić te problemy i podać rozwiązanie.



Mysql - założenia

Zanim przystąpimy do prac, musimy się upewnić, że nasza baza jest w kodowaniu utf-8. Ogólnie wszystko jest napisane w ...</content>
		<author>
			<name>Mateusz Zeromski</name>
			<uri>http://blog.zeromski.com.pl</uri>
		</author>
		<source>
			<title type="html">Mateusz Żeromski - Blog » python</title>
			<subtitle type="html">IT z innej strony :)</subtitle>
			<link rel="self" href="http://blog.zeromski.com.pl/tag/python/rss"/>
			<id>http://blog.zeromski.com.pl/tag/python/rss</id>
			<updated>2008-07-03T22:47:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Archiwum is back</title>
		<link href="http://zgodowie.org/2008/06/25/archiwum-is-back/"/>
		<id>http://zgodowie.org/2008/06/25/archiwum-is-back/</id>
		<updated>2008-06-25T22:35:29+00:00</updated>
		<content type="html">&lt;p&gt;Poprawiono najbardziej denerwujący mnie błąd w Django z ostatnich czasów i dzięki temu wróciło archiwum. Oh, my...
&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Sława, sława!</title>
		<link href="http://zgodowie.org/2008/06/24/slawa-slawa/"/>
		<id>http://zgodowie.org/2008/06/24/slawa-slawa/</id>
		<updated>2008-06-24T20:51:10+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://oebfare.com/blog/2008/jun/24/django-code_swarm/&quot;&gt;http://oebfare.com/blog/2008/jun/24/django-code_swarm/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Około drugiej minuty, w prawym górnym rogu...
&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Zmiana planów w ostatniej chwili</title>
		<link href="http://zgodowie.org/2008/06/24/zmiana-planow-w-ostatniej-chwili/"/>
		<id>http://zgodowie.org/2008/06/24/zmiana-planow-w-ostatniej-chwili/</id>
		<updated>2008-06-24T10:40:54+00:00</updated>
		<content type="html">&lt;p&gt;Dosłownie w ostatniej chwili zdecydowałem się na zmianę dostawcy hostingu na &lt;a href=&quot;http://djangohosting.ch&quot;&gt;djangohosting.ch&lt;/a&gt;, pomimo że byłem zdecydowany na coś innego. Po sugestii Thomasa (dzięki!) przyjrzałem się usłudze dokładniej i postanowiłem dać szansę. Wykupiłem najtańszą opcję, wypróbowałem &lt;a href=&quot;http://djangohosting.ch/support/getting-started/&quot;&gt;one-click-django-installer&lt;/a&gt; i oczywiście zameldowałem się po SSH. Już pierwsze pół godziny sesji przekonało mnie ...&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Sztuczny tłok</title>
		<link href="http://zgodowie.org/2008/06/23/sztuczny-tlok/"/>
		<id>http://zgodowie.org/2008/06/23/sztuczny-tlok/</id>
		<updated>2008-06-23T09:13:37+00:00</updated>
		<content type="html">&lt;p&gt;Dużo się ostatnio dzieje w &lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt; &amp;mdash; co chwilę ktoś &lt;em&gt;commituje&lt;/em&gt; zmiany do repozytorium i można odnieść wrażenie, że &lt;a href=&quot;http://www.djangoproject.com/weblog/2008/jun/16/save-the-date/&quot;&gt;opublikowanie daty wydania wersji 1.0&lt;/a&gt; obudziło w developerach nowy zapał i chęć do posprintowania na zakończenie wyścigu.
&lt;/p&gt;
&lt;p&gt;To mylne wrażenie. Przytłaczająca większość pojawiających się w repozytorium zmian to są poprawki w ...&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Zdecydowałem się na dostawcę</title>
		<link href="http://zgodowie.org/2008/06/22/zdecydowalem-sie-na-dostawce/"/>
		<id>http://zgodowie.org/2008/06/22/zdecydowalem-sie-na-dostawce/</id>
		<updated>2008-06-22T22:11:46+00:00</updated>
		<content type="html">&lt;p&gt;To był tydzień pełen przemyśleń, ale w końcu doszedłem do jakichś wniosków. Mój najbliższy projekt będę hostował na &lt;a href=&quot;http://www.alwaysdata.com/&quot;&gt;Alwaysdata&lt;/a&gt;. Co prawda całość serwisu jest po francusku, ale jakoś daję sobie z tym radę.
&lt;/p&gt;
&lt;p&gt;Ujęło mnie to, że jest:
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;
     tanio (&amp;euro; 6 za miesiąc w najtańszej opcji);
 &lt;/li&gt;

 &lt;li&gt;
     dobry &lt;em&gt;support&lt;/em&gt; na forum (po ...&lt;/li&gt;&lt;/ul&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">PyCon teraz w Polsce</title>
		<link href="http://django.jogger.pl/2008/06/21/pycon-teraz-w-polsce/"/>
		<id>http://django.jogger.pl/2008/06/21/pycon-teraz-w-polsce/</id>
		<updated>2008-06-21T13:51:24+00:00</updated>
		<content type="html">&lt;h4&gt;Autorem poniższego tekstu jest Katharsis&lt;/h4&gt;
&lt;p&gt;Rybnik pozazdrościł Pcimowi Pythona i organizuje po raz pierwszy polską edycję konferencji PyCon.&lt;/p&gt;
&lt;p&gt;PyCon PL, jedyna w Polsce konferencja poświęcona w całości językowi programowania Python odbędzie się w dniach 18-19 października 2008. Celem organizowanej wspólnymi siłami trzech grup entuzjastów Pythona konferencji jest wprowadzać w życie hasło PyCona &quot;Connecting The Python Community&quot;.&lt;/p&gt;
&lt;p&gt;Wszystkich syczących w tym samym języku zapraszamy do przypełznięcia na konferencję oraz do odwiedzenia strony internetowej: http://liwo.polsl.pl/pycon-pl/ Masz coś do powiedzenia? Chcesz nas wspomóc i zostać sponsorem? Masz pytania? Odwiedź stronę konferencji.&lt;/p&gt;
&lt;p&gt;W chwili obecnej ruszyło przyjmowanie zgłoszeń od osób, które chciałyby wystąpić z własnym wykładem. Termin do którego można wysyłać swoje propozycje to 2 lipca.&lt;/p&gt;
&lt;p&gt;Szczegóły: &lt;a href=&quot;http://liwo.polsl.pl/pycon-pl/aktualnosci/call-for-papers/&quot;&gt;http://liwo.polsl.pl/pycon-pl/aktualnosci/call-for-papers/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zapraszamy wszystkich zainteresowanych.&lt;br /&gt;
Polska Grupa Użytkowników Linuksa Oddział Śląsk&lt;br /&gt;
Polska Grupa Programistów Pythona&lt;br /&gt;
Studenckie Koło Naukowe Linuksa i Wolnego Oprogramowania z Politechniki Śląskiej&lt;/p&gt;</content>
		<author>
			<name>Perełki Django</name>
			<uri>http://django.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">Perełki Django</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://django.jogger.pl/rss/content/html/20/"/>
			<id>http://django.jogger.pl/rss/content/html/20/</id>
			<updated>2008-07-03T19:47:05+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Wersja 1.0 już niedługo!</title>
		<link href="http://django.jogger.pl/2008/06/21/wersja-1-0-juz-niedlugo/"/>
		<id>http://django.jogger.pl/2008/06/21/wersja-1-0-juz-niedlugo/</id>
		<updated>2008-06-21T12:15:49+00:00</updated>
		<content type="html">&lt;p&gt;Niedawno pojawiła się informacja, że już niedługo wyjdzie bardzo oczekiwana wersja 1.0 Django. Termin został ustalony na 2. września. Dokładna lista rzeczy, które będą dodane i te które zostaną być może dodane wraz z dokładnymi terminami znajduje się na stronie: &lt;a href=&quot;http://code.djangoproject.com/wiki/VersionOneRoadmap&quot;&gt;VersionOneRoadmap&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Perełki Django</name>
			<uri>http://django.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">Perełki Django</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://django.jogger.pl/rss/content/html/20/"/>
			<id>http://django.jogger.pl/rss/content/html/20/</id>
			<updated>2008-07-03T19:47:05+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Zdrada? To się dopiero okaże...</title>
		<link href="http://zgodowie.org/2008/06/19/zdrada-to-sie-dopiero-okaze/"/>
		<id>http://zgodowie.org/2008/06/19/zdrada-to-sie-dopiero-okaze/</id>
		<updated>2008-06-19T16:40:00+00:00</updated>
		<content type="html">&lt;p&gt;No i będę miał w pracy MacBooka. Niby zwykłego, ale tak nie do końca, bo czarnego. Nigdy nie miałem Maca, nigdy też go nie używałem, więc zacząłem od czytania, co też mnie czeka po przesiadce z linuksa. Nie zapowiada się różowo, głównie z powodu problemów z bibliotekami. Ale może jakoś ...&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">PyCon PL 2008</title>
		<link href="http://web-dev.pl/pycon-pl-2008"/>
		<id>http://web-dev.pl/55 at http://web-dev.pl</id>
		<updated>2008-06-18T07:47:02+00:00</updated>
		<content type="html">&lt;p&gt;Rybnik pozazdrościł Pcimiowi Pythona i organizuje po raz pierwszy polską edycję konferencji PyCon - żartobliwym stwierdzeniem mówią o PyConie organizatorzy imprezy.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://web-dev.pl/pycon-pl-2008&quot; target=&quot;_blank&quot;&gt;czytaj dalej&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Web-Dev</name>
			<uri>http://web-dev.pl/taxonomy/term/25/0</uri>
		</author>
		<source>
			<title type="html">Web-Dev.pl - python</title>
			<link rel="self" href="http://web-dev.pl/index.php?q=taxonomy/term/25/0/feed"/>
			<id>http://web-dev.pl/index.php?q=taxonomy/term/25/0/feed</id>
			<updated>2008-07-05T16:47:03+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl-pl">
		<title type="html">PyCon w Polsce</title>
		<link href="http://dominno.pl/blog/2008/06/18/pycon-w-polsce/"/>
		<id>http://dominno.pl/blog/2008/06/18/pycon-w-polsce/</id>
		<updated>2008-06-17T22:00:00+00:00</updated>
		<content type="html">PyCon w Polsce</content>
		<author>
			<name>Dominik Szopa</name>
			<uri>http://dominno.pl/blog/tag/python/</uri>
		</author>
		<source>
			<title type="html">Najnowsze wpisy dla kategorii Python na dominno.pl</title>
			<subtitle type="html">Dodano nowy wpis dla kategorii Python</subtitle>
			<link rel="self" href="http://www.dominno.pl/blog/feeds/tags/python/"/>
			<id>http://www.dominno.pl/blog/feeds/tags/python/</id>
			<updated>2008-07-05T16:47:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Python Magazine 2008-04</title>
		<link href="http://web-dev.pl/python-magazine-2008-04"/>
		<id>http://web-dev.pl/52 at http://web-dev.pl</id>
		<updated>2008-06-11T20:33:34+00:00</updated>
		<content type="html">&lt;p&gt;Ukazał się właśnie (trzymam świeży, jeszcze ciepły wydruk:) nowy numer Python Magazine.&lt;/p&gt;
&lt;p&gt;Co w nim znajdziemy?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://web-dev.pl/python-magazine-2008-04&quot; target=&quot;_blank&quot;&gt;czytaj dalej&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Web-Dev</name>
			<uri>http://web-dev.pl/taxonomy/term/25/0</uri>
		</author>
		<source>
			<title type="html">Web-Dev.pl - python</title>
			<link rel="self" href="http://web-dev.pl/index.php?q=taxonomy/term/25/0/feed"/>
			<id>http://web-dev.pl/index.php?q=taxonomy/term/25/0/feed</id>
			<updated>2008-07-05T16:47:03+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Google App Engine</title>
		<link href="http://web-dev.pl/nowa-usluga-google-app-engine"/>
		<id>http://web-dev.pl/48 at http://web-dev.pl</id>
		<updated>2008-06-11T20:33:34+00:00</updated>
		<content type="html">&lt;p&gt;Ostatnimi dniami Google zaprezentowało nową usługę &lt;em&gt;Google App Engine&lt;/em&gt; . Czym się ona charakteryzuje?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://web-dev.pl/nowa-usluga-google-app-engine&quot; target=&quot;_blank&quot;&gt;czytaj dalej&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Web-Dev</name>
			<uri>http://web-dev.pl/taxonomy/term/25/0</uri>
		</author>
		<source>
			<title type="html">Web-Dev.pl - python</title>
			<link rel="self" href="http://web-dev.pl/index.php?q=taxonomy/term/25/0/feed"/>
			<id>http://web-dev.pl/index.php?q=taxonomy/term/25/0/feed</id>
			<updated>2008-07-05T16:47:03+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Passenger bliżej - Rails, Rack i WSGI</title>
		<link href="http://blog.zabiello.com/articles/2008/06/07/passenger-rack-wsgi"/>
		<id>urn:uuid:1dc84c82-1634-41dd-9aa1-9c744a876dff</id>
		<updated>2008-06-11T08:55:01+00:00</updated>
		<content type="html">&lt;p&gt;Stworzony pierwotnie na użytek Rails, aktualnie mod_passenger już obsługuje nie tylko Rails ale także masę innych frameworków używających Rack&amp;#8217;a. W &lt;a href=&quot;http://tinyurl.com/6edmve&quot;&gt;nowej dokumentacji&lt;/a&gt; wymienione są frameworki: &lt;a href=&quot;http://code.whytheluckystiff.net/camping&quot;&gt;Camping&lt;/a&gt;, &lt;a href=&quot;http://halcyon.rubyforge.org/&quot;&gt;Halcyon&lt;/a&gt;, &lt;a href=&quot;http://www.mackframework.com/&quot;&gt;Mack&lt;/a&gt;, &lt;a href=&quot;http://merbivore.org/&quot;&gt;Merb&lt;/a&gt;, &lt;a href=&quot;http://ramaze.net/&quot;&gt;Ramaze&lt;/a&gt; i &lt;a href=&quot;http://sinatrarb.com/Home&quot;&gt;Sinatra&lt;/a&gt;. W dokumentacji nie wymieniono jeszcze &amp;#8220;drugiej listy&amp;#8221;, zawierającej frameworki korzystające z &lt;a href=&quot;http://www.wsgi.org/wsgi&quot;&gt;&lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;&lt;/a&gt; i Pythona (np. &lt;a href=&quot;http://pylonshq.com/&quot;&gt;Pylons&lt;/a&gt;, &lt;a href=&quot;http://djangoproject.com&quot;&gt;Django&lt;/a&gt;, &lt;a href=&quot;http://turbogears.org/&quot;&gt;TurboGears&lt;/a&gt; itp.). Chcąc sprawdzić plotki wokół tej sprawy, sprawdziłem, czy faktycznie mod_passenger pracuje nie tylko z Ruby, ale także z Pythonem. Sprawdziłem także jak to jest faktycznie z obługą Rails i frameworków na Rack&amp;#8217;u (tu sprawdziłem tylko Merba). Sprawdziłem też JRuby dla Rails i Merba.&lt;/p&gt;


	&lt;p&gt;Wszystkie testy były wykonywane na laptopie MacBook Pro Core 2 Duo, 2.16GHZ, 4GB &lt;span class=&quot;caps&quot;&gt;RAM&lt;/span&gt; (OSX 10.5.3 dla tego modelu widzi tylko 3GB) i dyskiem 200GB kręcącym się z szybkością 7200 rpm. Ruby 1.8.6, Python 2.5.2, Apache 2.2.8 (mpm-prefork) były instalowane z MacPortów. Passenger, mimo że instalowany &lt;a href=&quot;http://github.com/FooBarWidget/passenger/tree/master&quot;&gt;ze źródeł&lt;/a&gt; w Apache&amp;#8217;u był wyświetlany jako &amp;#8220;Phusion_Passenger/1.1.0&amp;#8221; (być może więc to nie jest jeszcze ta nowa wersja 2.0 o której pisałem &lt;a href=&quot;http://blog.zabiello.com/articles/2008/06/04/passenger2-ruby-enterprise&quot;&gt;wcześniej&lt;/a&gt;) Nie sprawdzałem Linuksa, być może wyniki i wnioski będą wtedy inne.&lt;/p&gt;


	&lt;p&gt;Dla tych co chcieliby sami popróbować podaję wpierw konfigurację serwerów wirtualnych dla Apache&amp;#8217;a potrafiącą unieść razem: &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; (2.5.6), Rails (2.1), Merb (0.9.4 edge), i Django (edge).&lt;/p&gt;


	&lt;h2&gt;Konfiguracja Apache&amp;#8217;a  2.2.8&lt;/h2&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_apache &quot;&gt;
# Ruby (Rails):
&amp;lt;VirtualHost *:80&amp;gt;     
  DocumentRoot &amp;quot;/opt/local/apache2/vhosts/rails_app/public&amp;quot;  
  ServerName rails_app
&amp;lt;/VirtualHost&amp;gt;

# Ruby (Merb):        
&amp;lt;VirtualHost *:80&amp;gt;  
  RailsAutoDetect off  
  DocumentRoot &amp;quot;/opt/local/apache2/vhosts/merb_app/public&amp;quot;    
  ServerName merb_app       
&amp;lt;/VirtualHost&amp;gt;

# Python (WSGI):
&amp;lt;VirtualHost *:80&amp;gt;          
  DocumentRoot &amp;quot;/opt/local/apache2/vhosts/wsgi_app/public&amp;quot;    
  ServerName wsgi_app
&amp;lt;/VirtualHost&amp;gt;      

# Django (mod_python)
&amp;lt;VirtualHost *:80&amp;gt;         
  DocumentRoot &amp;quot;/opt/local/apache2/vhosts/djangus/public&amp;quot;    
  ServerName django_modpython 
  &amp;lt;Location &amp;quot;/&amp;quot;&amp;gt;
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE djangus.settings
    PythonDebug On        
    PythonPath &amp;quot;['/opt/local/apache2/vhosts'] + sys.path&amp;quot;    
  &amp;lt;/Location&amp;gt;       
&amp;lt;/VirtualHost&amp;gt;   

# PHP:
&amp;lt;VirtualHost *:80&amp;gt;  
  RailsAutoDetect off  
  DocumentRoot &amp;quot;/opt/local/apache2/vhosts/php_app/public&amp;quot;        
  ServerName php_app   
&amp;lt;/VirtualHost&amp;gt;    &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Wszystkie aplikacje korzystające z mod_passengera muszą posiadać folder &lt;code&gt;public&lt;/code&gt; i &lt;code&gt;tmp&lt;/code&gt;. Gdy do katalogu &lt;code&gt;tmp&lt;/code&gt; dorzucimy jakikolwiek (może być pusty) plik o nazwie &lt;code&gt;restart.txt&lt;/code&gt;, to przy następnym przeładowaniu przeglądarki nastąpi restart aplikacji.&lt;/p&gt;


	&lt;p&gt;We wszystkich przypadkach użyłem dosyć banalnego kodu polegającego na wyświetleniu &amp;#8220;Hello World!&amp;#8221;. Z wyników programu &lt;code&gt;ab&lt;/code&gt; wyciąłem nieistotne informacje.&lt;/p&gt;


	&lt;h2&gt;Rails (2.1)&lt;/h2&gt;


	&lt;h3&gt;Rails 2.1 + mod_passenger 1.1.0&lt;/h3&gt;


	&lt;p&gt;Rails obsługiwane są w Passengerze praktycznie bezobsługowo. Wystarczy wkopiować pliki na serwer i to wszystko.&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;ab -n 1000 -c 1 http://rails/ 
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Total transferred:      582000 bytes
HTML transferred:       12000 bytes
Requests per second:    430.20 [#/sec] (mean)
Transfer rate:          244.35 [Kbytes/sec] received

ab -n 1000 -c 4 http://rails/
...
Concurrency Level:      4
Failed requests:        239
   (Connect: 0, Length: 239, Exceptions: 0)
Write errors:           0
Total transferred:      488073 bytes
HTML transferred:       9132 bytes
Requests per second:    520.75 [#/sec] (mean)
Transfer rate:          247.88 [Kbytes/sec] received&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; 

	&lt;p&gt;Szybkość nie jest najgorsza, ale niepokojąca jest duża lista błędnych requestów w wypadku zapytań równoległych. Jak się dalej okazuje, ten problem dotyczy także obługi Rack jak i &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;. Albo to jakaś specyfika &lt;span class=&quot;caps&quot;&gt;OSX&lt;/span&gt;, albo wcale nie jest tak dobrze ze stabilnością mod_passengera dla równoległych zapytań. Trzeba by było też zbadać, czy ten efekt występuje także dla Linuksa. Zdziwiłbym się gdyby tam było podobnie skoro Dreamhost już oferuje hosting z mod_rails&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Dla porównania Rails używający Mongrela, Thin oraz Ebb. Można by pokusić aby odpalić Ebb i Thina na uniksowych socketach (Ebb też to już potrafi!), ale wtedy musiałbym zestawiać klaster i uruchamiać to przez proxy. Jak ktoś chce to niech się sam pobawi. Dla prostoty użyłem portów &lt;span class=&quot;caps&quot;&gt;TCP&lt;/span&gt;. Sprawdziłem też JRuby.&lt;/p&gt;


	&lt;h3&gt;Rails 2.1 + Ebb 0.2.0&lt;/h3&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;ebb_rails -e production start

ab -n 1000 -c 1 http://127.0.0.1:3000/
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    488.95 [#/sec] (mean)

ab -n 1000 -c 4 http://127.0.0.1:3000/
..
Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    533.22 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; 

	&lt;p&gt;Szybkość większa od mod_passengera i co ważniejsze, zero jakichkolwiek błędów przy pracy równoległej.&lt;/p&gt;


	&lt;h3&gt;Rails 2.1 + Thin 0.8.1&lt;/h3&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;thin start -e production              

ab -n 1000 -c 1 http://127.0.0.1:3000/
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    485.95 [#/sec] (mean)

ab -n 1000 -c 4 http://127.0.0.1:3000/
...              
Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    506.21 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Szybkość trochę mniejsza od Ebb, ale stabilność b. dobra.&lt;/p&gt;


	&lt;h3&gt;Rails 2.1 + Mongrel 1.1.5&lt;/h3&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;script/server -e production

ab -n 1000 -c 1 http://127.0.0.1:3000/
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    373.74 [#/sec] (mean)

ab -n 1000 -c 4 http://127.0.0.1:3000/
...
Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    360.46 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Stabilność bez zarzutu, wydajność jednak mniejsza od serwerów pracujących asynchronicznie.&lt;/p&gt;


	&lt;h3&gt;Rails 2.1 + JRuby 1.1.2&lt;/h3&gt;


	&lt;p&gt;W wypadku JRuby trzeba go trochę &amp;#8220;rozgrzać&amp;#8221;. Pełna wydajność Javy pojawia się po jakimś czasie pracy. Wynika to ze specyfiki i możliwośći &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; która dokonuje dynamicznych optymalizacji kodu w trakcie jego działania (z tego powodu Java potrafi przewyższyć wydajnością C++). &amp;#8220;Dla rozgrzewki&amp;#8221; przepuściłem Rails przez 30 tys. requestów co spowodowało że początkowych 137 req/s zrobiło się 257 req/s.&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;jruby script/server -e production    

ab -n 1000 -c 1 http://127.0.0.1:3000/
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    200.48 [#/sec] (mean)

ab -n 1000 -c 4 http://127.0.0.1:3000/
...
Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    257.05 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;JRuby jest stabilny ale z wydajnością dla Rails jeszcze jest trochę do poprawienia. Dorzucenie opcji optymalizacyjnych, czyli odpalenie Rails przez&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;  
jruby -J-server -J-Djruby.compile.frameless=true script/server -e production&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;trochę poprawiło wynik: 273 req/s, ale generalnie nie jest to wielka różnica. JRuby 1.1.x już ma domyślnie powłączane optymalizacje.&lt;/p&gt;


	&lt;h3&gt;Rails &amp;#8211; wnioski&lt;/h3&gt;


	&lt;p&gt;mod_passenger dla Rails faktycznie jest wydajny, choć trzeba jeszcze by zbadać dlaczego zwraca tyle błędnych requestów dla równoległych zapytań i czy ten problem występuje też na Linuksie. Dlatego na razie najwydajniejszym i najstabilniejszym rozwiązaniem dla Rails wciąż pozostaje kombinacja nginx + proxy do ebb lub thin. mod_passenger kusi głównie prostotą konfiguracji (właściwie brakiem konfiguracji). No i chyba ja to testowałem dla mod_passengera w wersji 1.1, a nie 2.0 (przynajmniej taka się wyświetla w Apache).&lt;/p&gt;


	&lt;h2&gt;Merb 0.9.4 edge&lt;/h2&gt;


	&lt;h3&gt;Merb 0.9.4 edge + mod_passenger 1.1.0&lt;/h3&gt;


	&lt;p&gt;Aby użyć frameworka Rack z Passengerem trzeba w katalogu projektu tworzyć plik &lt;code&gt;config.ru&lt;/code&gt; zawierający konfigurację Rack&amp;#8217;a. W wypadku Merba będzie to&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_ruby &quot;&gt;&lt;span class=&quot;ident&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;rubygems&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;'&lt;/span&gt;
&lt;span class=&quot;ident&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;merb-core&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;'&lt;/span&gt;

&lt;span class=&quot;constant&quot;&gt;Merb&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;constant&quot;&gt;Config&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;symbol&quot;&gt;:merb_root&lt;/span&gt;   &lt;span class=&quot;punct&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;&amp;quot;,&lt;/span&gt;
                   &lt;span class=&quot;symbol&quot;&gt;:environment&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;['&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;RACK_ENV&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;'])&lt;/span&gt;
&lt;span class=&quot;constant&quot;&gt;Merb&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;environment&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;Merb&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;constant&quot;&gt;Config&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;symbol&quot;&gt;:environment&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;constant&quot;&gt;Merb&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;root&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;Merb&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;constant&quot;&gt;Config&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;symbol&quot;&gt;:merb_root&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;constant&quot;&gt;Merb&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;constant&quot;&gt;BootLoader&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;run&lt;/span&gt;

&lt;span class=&quot;ident&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;Merb&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;constant&quot;&gt;Rack&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;constant&quot;&gt;Application&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;new&lt;/span&gt;  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    762.62 [#/sec] (mean)

Concurrency Level:      4
Failed requests:        247
   (Connect: 0, Length: 247, Exceptions: 0)
Write errors:           0
Requests per second:    985.15 [#/sec] (mean) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Merb jest wciąż dużo szybszy od Rails. Podobnie jak dla Rails, wiele równoległych zapytań nie zostało poprawnie wykonanych. Na produkcyjne użycie Passengera dla Merba jest jeszcze trochę za wcześnie.&lt;/p&gt;


	&lt;h3&gt;Merb 0.9.4 edge + ebb 0.2.0&lt;/h3&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;merb -e production -a ebb  
...                              
Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    1463.69 [#/sec] (mean)

Concurrency Level:      10
Failed requests:        0
Write errors:           0
Requests per second:    1560.60 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  

	&lt;p&gt;Merb na Ebb deklasuje wydajnością wszystkie inne rozwiązania. Tylko czysty &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; jest w stanie mu dorównać, ale porównywanie &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; z całym, złożonym frameworkiem Rubiego jest trochę bez sensu. Z tego co mówił ostatnio (na kanale &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt;) Ezra Zygmuntowicz, podpięcie Ebb na czystym Rack&amp;#8217;u, daje nawet &lt;strong&gt;7 tys req/s&lt;/strong&gt; i deklasuje (rzekomo) szybkiego &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;. Gadanie o wyższej wydajności &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; jest po prostu głupie. Można się założyć, że jakiekolwiek porównanie frameworka naprzeciw frameworka, tj. Merba z Symfony czy Cake &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;, obnaży bezlitośnie słabości &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; &lt;a href=&quot;http://blog.zabiello.com/articles/2006/07/14/django-i-rails-bij%C4%85-php&quot;&gt;tak, jak to zrobił Django&lt;/a&gt; w jednym ze starszych testów.&lt;/p&gt;


	&lt;h3&gt;Merb 0.9.4 edge + thin 0.8.1&lt;/h3&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;merb -e production -a thin 
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    1147.78 [#/sec] (mean)

Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    1234.82 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  

	&lt;p&gt;Wydajność równie dobra, choć trochę słabsza od Ebb. Sporo więcej od Rails i zero problemów ze stabilnością.&lt;/p&gt;


	&lt;h3&gt;Merb 0.9.4 edge + mongrel 1.1.5&lt;/h3&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;merb -e production -a mongrel
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    868.10 [#/sec] (mean)

Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    837.01 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;   

	&lt;p&gt;Mongrel jest wolniejszy od serwerów asynchronicznych ale i tak wyraźnie szybszy od Rails.&lt;/p&gt;


	&lt;h3&gt;Merb 0.9.4 edge + JRuby 1.1.2&lt;/h3&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt; 
jruby -S merb -e production 
...
Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    449.52 [#/sec] (mean)

Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    505.52 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Merb na &amp;#8220;rozgrzanym&amp;#8221; (30 tys. req) JRuby osiąga wydajność taką jak najszybsze rozwiązania dla Rails z użyciem asynchronicznego Ebb! To znaczy, że użycie produkcyjne Merba w systemach Javy ma jak najbardziej sens.&lt;/p&gt;


	&lt;h2&gt;Passenger &amp;#38; &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;&lt;/h2&gt;


	&lt;p&gt;Pora na przyjrzenie się temu jak mod_passenger daje sobie radę z Pythonem. W katalogu ze źródłami Passengera leży gotowa, prosta aplikacja &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;. Dzieki dobrej dokumentacji Django, udało mi się uruchomić ten framework pod Passengerem. Gorzej było z Pylons. Nie udało mi się stworzyć poprawnego pliku passenger_wsgi.py, niezbędnego do tego aby Passenger uruchomił aplikację &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;.&lt;/p&gt;


	&lt;h3&gt;Django edge&lt;/h3&gt;


	&lt;p&gt;Django, mimo swych zalet, stosuje bardzo głupią politykę nie wypuszczania kolejnych wersji kodu. Dostępna na stronie wersa 0.96 jest stara i generalnie zaleca się aby używać nowszą wersję, która istnieje tylko w repozytorium Subversion. Oparcie kodu produkcyjnego o wersję edge jest trochę ryzykowne i szybko sprowadza się do złej praktyki ciągłego  łatania kodu.&lt;/p&gt;


	&lt;p&gt;W wypadku Django plik &lt;code&gt;passenger_wsgi.py&lt;/code&gt; zawiera kod:&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_ruby &quot;&gt;&lt;span class=&quot;ident&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;ident&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ident&quot;&gt;sys&lt;/span&gt;
&lt;span class=&quot;ident&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;('&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;/bezwl/sciezka/do/nazwaprojektu&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;')&lt;/span&gt; 
&lt;span class=&quot;ident&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;environ&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;['&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;DJANGO_SETTINGS_MODULE&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;']&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;nazwaprojektu.settings&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;'&lt;/span&gt;
&lt;span class=&quot;ident&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;ident&quot;&gt;django&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;core&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;handlers&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;wsgi&lt;/span&gt;
&lt;span class=&quot;ident&quot;&gt;application&lt;/span&gt; &lt;span class=&quot;punct&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;ident&quot;&gt;django&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;core&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;handlers&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;wsgi&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ident&quot;&gt;WSGIHandler&lt;/span&gt;&lt;span class=&quot;punct&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;  ab -n 10000 -c 10            
  ...   
  apr_poll: The timeout specified has expired (70007)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Test padł po 9tys requestach. Dalej nie można było uruchomić Django. Dopiero restart calego Apache&amp;#8217;a pomógł. Dla niższej ilości równoległych zapytań (ab -n 1000 -c 4) Django nie padło, ale było dużo błędnych requestów. Okazało się, że problem wynikał z równoczesnej obecności modułu mod_python i mod_passenger. Nie można ich razem włączać.&lt;/p&gt;


	&lt;p&gt;Usunięcie mod_passengera i zostawienie samego mod_pythona pomogło. (Albo jest jakiś konflikt między nimi, albo (co bardziej jest prawdopodobne) trzeba poczekać na opcję wyłączającą passengera dla serwera wirtualnego używającego mod_pythona. Dla Rails i Rack są takie opcje (RailsAutoDetect, RackAutoDetect), dla &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; nie mogłem nic takiego znaleźć w kodzie źródłowym. Modułu mod_wsgi nie sprawdzałem, bo nie było go dostępnego w portach &lt;span class=&quot;caps&quot;&gt;OSX&lt;/span&gt;.)&lt;/p&gt;


	&lt;p&gt;Po zablokowaniu mod_passenger&amp;#8217;a tym razem mod_python nie zwracał żadnego błędnego requestu.&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    934.87 [#/sec] (mean)

Concurrency Level:      4
Failed requests:        0
Write errors:           0
Requests per second:    1240.26 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Nie jest źle. Django jest tu wyraźnie szybsze od Rails (co nikogo nie dziwi), ale jest wolniejsze od Merba, co dla miłośników Pythona może być przykrą niespodzianką. Większość krytyki Rubiego oparta jest na krytyce (słabszej) wydajności Railsów. Okazuje się, że winny nie jest Ruby, ale słabo zoptymalizowany Rails. Merb jest dowodem na to, że można napisać w Rubim framework, który nie tylko będzie partnerem dla rozwiązan Pythona, ale nawet potrafi je przewyższać wydajnościowo.&lt;/p&gt;


	&lt;p&gt;Zobaczmy jak wypadnie &lt;strong&gt;mod_passenger&lt;/strong&gt;.&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;Concurrency Level:      1
Failed requests:        0
Write errors:           0
Requests per second:    904.60 [#/sec] (mean)

Concurrency Level:      4
Failed requests:        240
   (Connect: 0, Length: 240, Exceptions: 0)
Write errors:           0
Requests per second:    497.51 [#/sec] (mean)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;W pracy jednoprocesowej nie można mieć zastrzeżeń. Szybkość jest niezła. Niestety praca równoległa to porażka. Dużo requestów nie zostało obsłużonych. Gorzej, za drugim razem (tylko dla 4 rownoległych zapytań) Django kompletnie się załamało i zwróciło wyjątek &amp;#8220;apr_poll: The timeout specified has expired (70007)&amp;#8221;. Nie można było go dłużej używać. Wymagany był restart Apache&amp;#8217;a.&lt;/p&gt;


	&lt;p&gt;Aby sprawdzić czy to tylko problem Django czy ogólnie implementacji &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; dla mod_passengera, uruchomiłem test na prostej aplikacji &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;. Niestety sytuacja jest ta sama.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Wniosek&lt;/strong&gt;: mod_passenger dla Pythona wymaga dopracowania pracy równoległej. Jeszcze za wcześnie aby go używać z Pythonem. Ale z drugiej strony uruchomiłem mod_passengera z &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;  trochę przedwcześnie. Nie ma przecież w manualu ani jednego zdania o tym, że Passenger działa z &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;. Oparłem się tylko na pogłoskach i wygrzebałem tą opcję ze źródeł. Więc jeszcze wszystko może się tu zmienić. To samo dotyczy Rack&amp;#8217;a. Twórcy muszą przyjrzeć się problemom związanym z obsługą równoległych zapytań.&lt;/p&gt;


	&lt;h3&gt;Update&lt;/h3&gt;


	&lt;p&gt;Jednak dobrze się domyślałem, Apache nie oszukiwał. W tekście testowałem starszego Passengera 1.1. Także nie był to Ruby Enterprise. &lt;span class=&quot;caps&quot;&gt;NOWY&lt;/span&gt; Passenger 2.0RC1 oraz Ruby Enterprise został dopiero niedawno &lt;a href=&quot;http://blog.phusion.nl/2008/06/09/phusion-passenger-20-rc-1-and-ruby-enterprise-edition-released/&quot;&gt;opublikowany&lt;/a&gt;. Co ciekawe, dodano obsługę Apache &lt;span class=&quot;caps&quot;&gt;MPM&lt;/span&gt; &lt;strong&gt;Worker&lt;/strong&gt; a nie &lt;span class=&quot;caps&quot;&gt;MPM&lt;/span&gt; Prefork, co dodatkowo zmniejsza zużycie pamięci. Niestety Passenger 2.0RC1 jest na razie dostępny tylko w wersji na Linuksa.&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zabiełło</name>
			<uri>http://blog.zabiello.com/articles/tag/python</uri>
		</author>
		<source>
			<title type="html">Jarosław Zabiełło - BLOG: Tag python</title>
			<subtitle type="html">moje notatki, linki, komentarze</subtitle>
			<link rel="self" href="http://blog.zabiello.com/xml/atom/tag/python/feed.xml"/>
			<id>tag:blog.zabiello.com,2005:Typo</id>
			<updated>2008-07-04T10:47:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Rozszerzenia do Kate w Pythonie</title>
		<link href="http://www.python.rk.edu.pl/w/p/rozszerzenia-do-kate-w-pythonie/"/>
		<id>http://www.python.rk.edu.pl/w/p/rozszerzenia-do-kate-w-pythonie/</id>
		<updated>2008-05-28T03:26:50+00:00</updated>
		<content type="html">&lt;a href=&quot;http://paul.giannaros.org/pate/&quot;&gt;Pate&lt;/a&gt; to wtyczka do Kate z KDE3 umożliwiająca pisanie wtyczek w Pythonie. Pate pozwala tworzyć wtyczki dodające elementy interfejsu, operujące na otwartym pliku - &quot;tekście&quot;, w sumie to co zwykłe wtyczki Kate. Działające &quot;hello world&quot; to:
&lt;div class=&quot;box&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;kate&lt;/span&gt;

&lt;span class=&quot;nd&quot;&gt;@kate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;onAction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Ctrl+H&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;insertHelloWorld&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;currentDocument&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;kate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;currentDocument&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;insertText&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;.c { color: #008800; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #AA22FF; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.cm { color: #008800; font-style: italic } /* Comment.Multiline */
.cp { color: #008800 } /* Comment.Preproc */
.c1 { color: #008800; font-style: italic } /* Comment.Single */
.cs { color: #008800; font-weight: bold } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #808080 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0040D0 } /* Generic.Traceback */
.kc { color: #AA22FF; font-weight: bold } /* Keyword.Constant */
.kd { color: #AA22FF; font-weight: bold } /* Keyword.Declaration */
.kp { color: #AA22FF } /* Keyword.Pseudo */
.kr { color: #AA22FF; font-weight: bold } /* Keyword.Reserved */
.kt { color: #AA22FF; font-weight: bold } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BB4444 } /* Literal.String */
.na { color: #BB4444 } /* Name.Attribute */
.nb { color: #AA22FF } /* Name.Builtin */
.nc { color: #0000FF } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #00A000 } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #B8860B } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sb { color: #BB4444 } /* Literal.String.Backtick */
.sc { color: #BB4444 } /* Literal.String.Char */
.sd { color: #BB4444; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BB4444 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BB4444 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BB4444 } /* Literal.String.Single */
.ss { color: #B8860B } /* Literal.String.Symbol */
.bp { color: #AA22FF } /* Name.Builtin.Pseudo */
.vc { color: #B8860B } /* Name.Variable.Class */
.vg { color: #B8860B } /* Name.Variable.Global */
.vi { color: #B8860B } /* Name.Variable.Instance */
.il { color: #666666 } /* Literal.Number.Integer.Long */</content>
		<author>
			<name>Riklaunim</name>
			<uri>http://www.python.rk.edu.pl/</uri>
		</author>
		<source>
			<title type="html">Biblioteka Riklaunima  - python.rk.edu.pl</title>
			<subtitle type="html">Artykuły i Wiadomości z python.rk.edu.pl</subtitle>
			<link rel="self" href="http://www.python.rk.edu.pl/w/rss/"/>
			<id>http://www.python.rk.edu.pl/w/rss/</id>
			<updated>2008-07-05T16:47:05+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Python</title>
		<link href="http://maar.jogger.pl/2008/05/25/test/"/>
		<id>http://maar.jogger.pl/2008/05/25/test/</id>
		<updated>2008-05-25T18:14:48+00:00</updated>
		<content type="html">&lt;p&gt;&quot;Popularność pythona, perla i ruby mnie nie dziwi - tylko zaawansowane firmy technologiczne używają na co dzień tych języków.&quot;&lt;br /&gt;
&lt;br /&gt;
Ten cytat tlumaczy dlaczego zaczalem interesowac sie tym jezykiem i w takiej firmie chcialbym pracowac (poszukiwanie posady programisty pythona trwa).&lt;/p&gt;</content>
		<author>
			<name>Maar</name>
			<uri>http://maar.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">http://maar.jogger.pl/</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://maar.jogger.pl/rss/content/html/20/"/>
			<id>http://maar.jogger.pl/rss/content/html/20/</id>
			<updated>2008-07-05T15:47:03+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">PPCG i NAC</title>
		<link href="http://www.hellsource.com/python/ppcg-i-nac"/>
		<id>http://www.hellsource.com/?p=61</id>
		<updated>2008-05-20T21:39:56+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a title=&quot;Python&quot; href=&quot;http://www.ppcg.eu.org/&quot;&gt;Portal PPCG (Polish Python Coders Group)&lt;/a&gt;, z którym jestem w jakiś sposób związany, nawiązał współpracę z  &lt;a href=&quot;http://www.nac.gov.pl/cms/&quot; target=&quot;_blank&quot;&gt;Narodowym Archiwum Cyfrowym (NAC)&lt;/a&gt;. Dzięki porozumieniu pomiędzy organizacjami, programiści Pythona będą mogli uczestniczyć w projektach związanych z przetwarzaniem informacji.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NAC&lt;/strong&gt; tworzy oprogramowanie w oparciu o technologie opern-source (&lt;strong&gt;Python&lt;/strong&gt;, &lt;strong&gt;PostgreSQL&lt;/strong&gt; itd.). Na chwilę obecną trwają prace nad dwoma projektami przewodnimi - &amp;#8220;ZoSIA&amp;#8221; (Zintegrowany System Informacji Archiwalnej) oraz &amp;#8220;SeDAN&amp;#8221; (System Digitalizacji Archiwalnej).&lt;/p&gt;
&lt;p&gt;Współpraca pomiędzy &lt;strong&gt;PPCG &lt;/strong&gt;i &lt;strong&gt;NAC&lt;/strong&gt; na pewno doprowadzi do zwiększenia popularności Pythona w naszym kraju. Wierzę, że inne organizacje wezmą przykład z &lt;strong&gt;NAC&lt;/strong&gt; i zainteresują się tym niezwykle ciekawym językiem.&lt;/p&gt;</content>
		<author>
			<name>Hellsource</name>
			<uri>http://www.hellsource.com</uri>
		</author>
		<source>
			<title type="html">Hellsource - Bezpieczeństwo i Programowanie » Python</title>
			<link rel="self" href="http://www.hellsource.com/category/python/feed"/>
			<id>http://www.hellsource.com/category/python/feed</id>
			<updated>2008-06-11T20:33:46+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Garść nowości.</title>
		<link href="http://django.jogger.pl/2008/05/19/garsc-nowosci/"/>
		<id>http://django.jogger.pl/2008/05/19/garsc-nowosci/</id>
		<updated>2008-05-19T10:06:58+00:00</updated>
		<content type="html">&lt;p&gt;Trochę informacji na temat co się dzieje w świecie Django.&lt;/p&gt;
&lt;h4&gt;Dodatkowe opcje dla funkcji 'update' w nowym ORM-ie&lt;/h4&gt;
&lt;p&gt;Sebastian Noack napisał rozszerzenie funkcjonalności funkcji update. Dotychczas mogliśmy podać tam tylko stałe wartości (np. &lt;code&gt;foo=42&lt;/code&gt;). Z jego rozszerzeniem możemy podać całe wyrażenie zmieniające wartość. Przykładowo: &lt;code&gt;foo = aktualna_wartość + 1&lt;/code&gt;&lt;br /&gt;
Więcej informacji na: &lt;a href=&quot;http://groups.google.com/group/django-developers/browse_thread/thread/d150c28e9dfe07a7&quot;&gt;groups.google.com&lt;/a&gt; &lt;a href=&quot;http://code.djangoproject.com/ticket/7210&quot;&gt;code.djangoproject.com/ticket/7210&lt;/a&gt;&lt;br /&gt;
Przykłady:&lt;/p&gt;
&lt;pre&gt;
from django.db.models.sql.expressions import *

qset = model.objects.all()

# Equivalent to qset.update(foo=42)
qset.update(foo=LiteralExpr(42))

# Increment column 'foo' by one.
qset.update(foo=CurrentExpr() + LiteralExpr(1))

# Swap the value of the column 'foo' and 'bar'.
qset.update(foo=ColumnExpr('bar'), bar=ColumnExpr('foo')) 
&lt;/pre&gt;
&lt;p&gt;Być może zostanie to wrzucone do głównego drzewa Django&lt;/p&gt;
&lt;h4&gt;Błąd bezpieczeństwa w Django&lt;/h4&gt;
&lt;p&gt;Poprawiono błąd typu XSS, który był w aplikacji &lt;code&gt;admin&lt;/code&gt;. Zalecana jest aktualizacja do nowszych wersji. Więcej informacji na: &lt;a href=&quot;http://www.djangoproject.com/weblog/2008/may/14/security/&quot;&gt;www.djangoproject.com/weblog/2008/may/14/security/&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Byteflow Blog Engine&lt;/h4&gt;
&lt;p&gt;Duży silnik blogowy z pełną funkcjonalnościa z dostępnymi źródłami napisany w Django: &lt;a href=&quot;http://byteflow.su/&quot;&gt;http://byteflow.su/&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Perełki Django</name>
			<uri>http://django.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">Perełki Django</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://django.jogger.pl/rss/content/html/20/"/>
			<id>http://django.jogger.pl/rss/content/html/20/</id>
			<updated>2008-07-03T19:47:05+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">EuroPython 2008</title>
		<link href="http://zgodowie.org/2008/05/16/europython-2008/"/>
		<id>http://zgodowie.org/2008/05/16/europython-2008/</id>
		<updated>2008-05-16T10:44:13+00:00</updated>
		<content type="html">&lt;p&gt;Już można się rejestrować na &lt;a href=&quot;http://www.europython.org/&quot;&gt;EuroPython 2008&lt;/a&gt;, do końca maja opłata wynosi &amp;euro;100 (od 1 czerwca &amp;euro;160, &lt;em&gt;przy drzwiach&lt;/em&gt; &amp;euro;200), więc warto się pospieszyć. Ja się już zarejestrowałem. ;)
&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">PIDA mnie rozczarowuje</title>
		<link href="http://zgodowie.org/2008/05/04/pida-mnie-rozczarowuje/"/>
		<id>http://zgodowie.org/2008/05/04/pida-mnie-rozczarowuje/</id>
		<updated>2008-05-04T17:17:13+00:00</updated>
		<content type="html">&lt;p&gt;Większość mojego kodu w Pythonie (a właściwie kodu w ogóle, włączając w to HTML i skrypty SQL) piszę w &lt;a href=&quot;http://pida.co.uk/&quot;&gt;PIDA&lt;/a&gt;. Jak dla mnie to środowisko pozostawia mi ultrawygodnego &lt;a href=&quot;http://www.vim.org/&quot;&gt;Vima&lt;/a&gt;, dodając to, czego potrzebuję podczas pracy: zarządzanie grupą plików jako &lt;em&gt;projektem&lt;/em&gt;, kilka podstawowych poleceń systemu kontroli wersji, przeglądarkę klas i integrację ...&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Tak łatwo to jeszcze nie było</title>
		<link href="http://zgodowie.org/2008/04/29/tak-latwo-to-jeszcze-nie-bylo/"/>
		<id>http://zgodowie.org/2008/04/29/tak-latwo-to-jeszcze-nie-bylo/</id>
		<updated>2008-04-29T23:10:46+00:00</updated>
		<content type="html">&lt;p&gt;Znalazłem kilka dni temu &lt;a href=&quot;http://pythonpaste.org/webob/do-it-yourself.html&quot;&gt;samouczek&lt;/a&gt; pisania własnych ramówek webowych w Pythonie w oparciu o &lt;a href=&quot;http://en.wikipedia.org/wiki/WSGI&quot;&gt;WSGI&lt;/a&gt; i bibliotekę &lt;a href=&quot;http://pythonpaste.org/webob/&quot;&gt;WebOb&lt;/a&gt;. Tak łatwo to chyba jeszcze nie było...
&lt;/p&gt;
&lt;p&gt;Na szczęście minęły czasy pączkujących ramówek (w tempie dwóch tygodniowo, strach było otworzyć lodówkę), ale może takie samouczki pokażą pretendentom, co ich czeka od strony ...&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Materiały z trzeciego spotkania</title>
		<link href="http://feeds.feedburner.com/~r/PythonKrakow/~3/276158589/materiay-z-trzeciego-spotkania.html"/>
		<id>tag:blogger.com,1999:blog-2185302290921210260.post-7353183034242088925</id>
		<updated>2008-04-28T17:56:43+00:00</updated>
		<content type="html">Poniżej prezentacja &lt;span&gt;Michała Bugno&lt;/span&gt; i &lt;span&gt;Krzysztofa Goja&lt;/span&gt; z trzeciego spotkania Pykonika, czyli &lt;span&gt;&quot;Systemy kontroli wersji Bazaar i Mercurial&quot;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Oprócz &lt;a href=&quot;http://pykonik.org/download/03/%5bPykonik%5d%5b03%5dDVCS.pdf&quot;&gt;slajdów&lt;/a&gt; mamy także obiecany &lt;span&gt;podcast&lt;/span&gt;: &lt;a href=&quot;http://pykonik.org/download/03/%5bPykonik%5d%5b03%5dDVCS.ogg&quot;&gt;[Pykonik][03]DVCS.ogg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Happy listening.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Całe spotkanie było nagrywane kamerą w związku z tym, jak tylko uda ma się obrobić obraz, wystawimy też &lt;span&gt;videocast&lt;/span&gt;. Możliwe, że uda się również zrobić &lt;span&gt;slidecast&lt;/span&gt; z użyciem powyższego audio, choć to w dużej mierze zależy od obłożenia czasowego ekipy.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id=&quot;__ss_376679&quot;&gt;&lt;div&gt;&lt;a href=&quot;http://www.slideshare.net/?src=embed&quot;&gt;&lt;img src=&quot;http://static.slideshare.net/swf/logo_embd.png&quot; alt=&quot;SlideShare&quot; /&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.slideshare.net/vardo/systemy-kontroli-wersji-bazaar-i-mercurial?src=embed&quot; title=&quot;View 'Systemy kontroli wersji Bazaar i Mercurial' on SlideShare&quot;&gt;View&lt;/a&gt; | &lt;a href=&quot;http://www.slideshare.net/upload?src=embed&quot;&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;/div&gt;</content>
		<author>
			<name>vArDo</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.pykonik.org/</uri>
		</author>
		<source>
			<title type="html">Pykonik blog</title>
			<subtitle type="html">&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;G&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#f3c518&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;g&lt;/font&gt;&lt;font color=&quot;#30a72f&quot; size=&quot;10&quot;&gt;l&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;e&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td valign=&quot;middle&quot; width=&quot;100%&quot;&gt;
&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font size=&quot;+1&quot;&gt; &lt;b&gt;Error&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; nowrap=&quot;nowrap&quot;&gt;&lt;font size=&quot;-1&quot;&gt; &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;h1&gt;We're sorry...&lt;/h1&gt;
&lt;p&gt;... but your query looks similar
to automated requests from a computer virus or spyware
application.  To protect our users, we can't process your request
right now.
&lt;/p&gt;
&lt;p&gt;We'll restore your access as quickly as possible, so try again soon. In the meantime, if you suspect that your computer or network has been infected,
you might want to run a &lt;a href=&quot;http://www.download.com/Antivirus/3150-2239-0.html&quot;&gt; virus checker&lt;/a&gt; or &lt;a href=&quot;http://www.download.com/sort/3150-8022-0-1-4.html&quot;&gt;spyware remover&lt;/a&gt; to make sure that your systems are free of viruses and other spurious software.
&lt;/p&gt;
&lt;p&gt;
If you're continually receiving this error, you may be able to resolve the
problem by deleting your Google cookie and revisiting Google. For
browser-specific instructions, please consult your browser's online support
center.
&lt;/p&gt;
&lt;p&gt;
If your entire network is affected, more information is available in the &lt;a href=&quot;http://www.google.com/support/bin/answer.py?answer=86640&quot;&gt;Google
Web Search Help Center&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;We apologize for the inconvenience, and hope we'll see you again on Google.





&lt;/blockquote&gt;
&lt;br /&gt;&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;&lt;td&gt;&lt;img alt=&quot;&quot; width=&quot;1&quot; height=&quot;3&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</subtitle>
			<link rel="self" href="http://blog.pykonik.org/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-2185302290921210260</id>
			<updated>2008-06-29T05:47:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Queryset-Refactor Merged!</title>
		<link href="http://django.jogger.pl/2008/04/28/queryset-refactor-merged/"/>
		<id>http://django.jogger.pl/2008/04/28/queryset-refactor-merged/</id>
		<updated>2008-04-28T13:32:04+00:00</updated>
		<content type="html">&lt;p&gt;Od dawna rozwijany w osobnym branchu ulepszony ORM został połączony z drzewem głównym. W końcu możemy uaktualniać wiele rekordów w tabeli na raz, czy też korzystać z dziedziczenia modeli.&lt;/p&gt;
&lt;p&gt;Jedyne niekompatybilność na które natrafiłem, to OneToOneField nie jest teraz domyślnie kluczem podstawowym, oraz zmieniło się użycie order_by jeżeli sortujemy po dowiązanej tabeli (jest dużo bardziej intuicyjne).&lt;/p&gt;
&lt;p&gt;Więcej informacji na: &lt;a href=&quot;http://blog.michaeltrier.com/2008/4/27/django-queryset-refactor-merged&quot;&gt;http://blog.michaeltrier.com/2008/4/27/django-queryset-refactor-merged&lt;/a&gt;, opis nowych rzeczy: &lt;a href=&quot;http://code.djangoproject.com/wiki/QuerysetRefactorBranch&quot;&gt;http://code.djangoproject.com/wiki/QuerysetRefactorBranch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS. Jeszcze został do połączenia branch newforms-admin i być może kolejnym krokiem będzie wersja stabilna.&lt;/p&gt;</content>
		<author>
			<name>Perełki Django</name>
			<uri>http://django.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">Perełki Django</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://django.jogger.pl/rss/content/html/20/"/>
			<id>http://django.jogger.pl/rss/content/html/20/</id>
			<updated>2008-07-03T19:47:05+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pl">
		<title type="html">Gówniażeria</title>
		<link href="http://zgodowie.org/2008/04/28/gowniazeria/"/>
		<id>http://zgodowie.org/2008/04/28/gowniazeria/</id>
		<updated>2008-04-28T11:48:18+00:00</updated>
		<content type="html">&lt;p&gt;Co jakiś czas na pl.comp.lang.python pojawiają się ogłoszenia o pracy dla programistów w Pythonie. Abstrahując od dyskusyjnej właściwości tej grupy dla wysyłania ogłoszeń o pracy (niby jest pl.praca.oferowana, ale ogłoszeń o pracy dla Pythoniarzy nie jest aż tak wiele, więc ma to pewien walor...), to ...&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zgoda</name>
			<uri>http://zgodowie.org/label/python/</uri>
		</author>
		<source>
			<title type="html">Jarek Zgoda - ostatnie wpisy oznaczone etykietą python</title>
			<subtitle type="html">Ostatnie wpisy w blogu Jarka Zgody oznaczone etykietą python</subtitle>
			<link rel="self" href="http://zgodowie.org/feeds/label/python/"/>
			<id>http://zgodowie.org/label/python/</id>
			<updated>2008-07-03T19:47:13+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Wypełnianie formularzy PDF - forge_fdf w pythonie</title>
		<link href="http://blog.galdomedia.pl/8/wypelnianie-formularzy-pdf-forge_fdf-w-pythonie/"/>
		<id>http://blog.galdomedia.pl/?p=8</id>
		<updated>2008-04-25T10:50:12+00:00</updated>
		<content type="html">Przytrafiło się ostatnio wypełnić przygotowany przez klienta formularz PDF. Ot, umieścić na gotowej formie klucz identyfikacyjny, dać odwiedzającemu PDFa, który to może go wypełnić i odesłać. Formularz jest identyfikowany bardzo łatwo dzięki rzeczonemu kluczowi. Pojawił się jednak jeden zasadniczy problem - jak? Nie chcieliśmy kupować rozwiązań komercyjnych, a poszukiwania w internecie na niewiele się zdały. [...]</content>
		<author>
			<name>Galdomedia</name>
			<uri>http://blog.galdomedia.pl</uri>
		</author>
		<source>
			<title type="html">GaldoMedia Blog » Python</title>
			<subtitle type="html">Py, SEO, SQL. W zdecydowanej większości.</subtitle>
			<link rel="self" href="http://blog.galdomedia.pl/category/python/feed/"/>
			<id>http://blog.galdomedia.pl/category/python/feed/</id>
			<updated>2008-06-11T20:33:45+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">AppEngine i Pylons</title>
		<link href="http://blog.netstation.pl/articles/2008/04/14/appengine-i-pylons"/>
		<id>tag:blog.netstation.pl:Article21</id>
		<updated>2008-04-14T18:45:47+00:00</updated>
		<content type="html">&lt;p&gt;Wszyscy piszą o Google AppEngine więc ja też coś napiszę. Żeby nie było tylko Django i Django zawiadamiam, że trwają prace nad uruchomieniem Pylonsa na Google&amp;#8217;u.&lt;/p&gt;

&lt;p&gt;Najwięcej kłopotów było z faktem, że na AppEngine nie można instalować bibliotek używających C. Okazuje się, że Mako i SQLAlchemy są takowymi. O ile SQLALchemy nie jest może w tym przypadku istotne o tyle Mako by się przydało.&lt;/p&gt;

&lt;p&gt;Jak można było się spodziewać, na developerów Pylonsa można liczyć. Trunk Mako można już instalować na AppEngine a Beaker może pracować z Googlowym silnikiem baz danych.&lt;/p&gt;

&lt;p&gt;Ian Bicking wypuścił pakiet umożliwiający zbudowanie środowiska do AppEngine. &lt;/p&gt;

&lt;p&gt;Więcej informacji w poście: &lt;a href=&quot;http://groups.google.pl/group/pylons-discuss/browse_thread/thread/3f132217b134b772]&quot;&gt;http://groups.google.pl/group/pylons-discuss/browse_thread/thread/3f132217b134b772&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instrukcja jak zrobić i zainstalować na AppEngine aplikację w Pylonsie: &lt;a href=&quot;http://code.google.com/p/appengine-monkey/wiki/Pylons&quot;&gt;http://code.google.com/p/appengine-monkey/wiki/Pylons&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Climbus</name>
			<uri>http://blog.netstation.pl</uri>
		</author>
		<source>
			<title type="html">Climbus Blog : Category python, everything about python</title>
			<link rel="self" href="http://blog.netstation.pl/articles/category/python.atom"/>
			<id>tag:blog.netstation.pl:articlescategorypython</id>
			<updated>2008-06-11T20:33:34+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Google App Engine</title>
		<link href="http://blog.zabiello.com/articles/2008/04/13/google-app-engine"/>
		<id>urn:uuid:b7f3ea40-77de-4b1d-b122-3799c876ab80</id>
		<updated>2008-04-13T19:48:32+00:00</updated>
		<content type="html">&lt;p&gt;Od niedawna Google oferuje dosyć atrakcyjną możliwość pisania aplikacji webowych wykorzystujących potęgę ich infrastruktury &amp;#8211; &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt;. Usługa jest darmowa i jeszcze testowa. Można stworzyć do 3 aplikacji z których każda może używać do 500MB danych trzymanych w BigTable i Google obiecuje że bez problemu będzie można uzyskać do 5 mln odsłon miesięcznie i niezły traffic 10 TB/m-c.&lt;/p&gt;


	&lt;p&gt;W tej chwili jedynym językiem dostępnym jest Python ale mają przybyć kolejne. Wykorzystywany jest &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;. Dostępny jest też &lt;a href=&quot;http://code.google.com/appengine/articles/django.html&quot;&gt;okrojony framework Django&lt;/a&gt; (nie można używać djangowego &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt;&amp;#8217;a ani wszystkich możliwości jakie dają djangowe szablony).&lt;/p&gt;


	&lt;p&gt;To co się bardzo zmienia, to podejście do bazy danych. Baza kolumnowa &lt;a href=&quot;http://en.wikipedia.org/wiki/Bigtable&quot;&gt;BigTable&lt;/a&gt; &lt;strong&gt;nie jest bazą relacyjną&lt;/strong&gt; (nie istnieje tam pojęcie joinów). Trzeba więc trochę inaczej przemyśleć sposób tworzenia swoich danych. Pewnym problemem może być nie tylko uzależnienie od infrastruktury Google ale też trudność z późniejszym przeniesienia tak składowanych danych na inną platformę (choć istnieje z drugiej strony open-source&amp;#8217;owy odpowiednik BigTable &amp;#8211; &lt;a href=&quot;http://hadoop.apache.org/hbase/&quot;&gt;HBase&lt;/a&gt;). W zamian jednak użycie platformy Google daje bardzo wysoką wydajność i odporność na błędy (jak padnie jeden serwer to jego pracę przejmuje automatycznie inny). Trochę nie jest dla mnie jeszcze jasne jak składować i usuwać dane z plikami statycznymi (obrazki, style kaskadowe, flash itp) skoro Google nie daje dostępu do systemu plików. Zablokowane są też sockety, wątki, używanie modułów napisanych w C, możliwość odpalania podprocesów, możliwości używania innych baz niż BigTable.&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zabiełło</name>
			<uri>http://blog.zabiello.com/articles/tag/python</uri>
		</author>
		<source>
			<title type="html">Jarosław Zabiełło - BLOG: Tag python</title>
			<subtitle type="html">moje notatki, linki, komentarze</subtitle>
			<link rel="self" href="http://blog.zabiello.com/xml/atom/tag/python/feed.xml"/>
			<id>tag:blog.zabiello.com,2005:Typo</id>
			<updated>2008-07-04T10:47:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Streaming video na najbliższym spotkaniu</title>
		<link href="http://feeds.feedburner.com/~r/PythonKrakow/~3/267695388/streaming-video-na-najbliszym-spotkaniu.html"/>
		<id>tag:blogger.com,1999:blog-2185302290921210260.post-712277237553493505</id>
		<updated>2008-04-10T16:01:04+00:00</updated>
		<content type="html">Osoby, które nie dotrą na dzisiejsze spotkanie, będą mogły śledzić prelekcje &quot;na żywo&quot; dzięki &lt;span&gt;streamingowi video&lt;/span&gt;. Wystarczy połączyć się z poniższym adresem o godz. 18:15 przy pomocy jakiejś aplikacji wspierającej format mms (WMP, MPlayer, etc.). Liczba połączeń ograniczona - kto pierwszy ten lepszy ;)&lt;br /&gt;&lt;br /&gt;Oto i adres: &lt;a href=&quot;mms://mms.ftj.agh.edu.pl/kernel&quot;&gt;mms://mms.ftj.agh.edu.pl/kernel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Osoby, które chciałyby sprawdzić wcześniej czy nie mają problemów technicznych, mogą skorzystać z &lt;a href=&quot;mms://mms.ftj.agh.edu.pl/zzz-test-3mar08&quot;&gt;tego linku&lt;/a&gt;.&lt;/span&gt;</content>
		<author>
			<name>vArDo</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.pykonik.org/</uri>
		</author>
		<source>
			<title type="html">Pykonik blog</title>
			<subtitle type="html">&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;G&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#f3c518&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;g&lt;/font&gt;&lt;font color=&quot;#30a72f&quot; size=&quot;10&quot;&gt;l&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;e&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td valign=&quot;middle&quot; width=&quot;100%&quot;&gt;
&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font size=&quot;+1&quot;&gt; &lt;b&gt;Error&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; nowrap=&quot;nowrap&quot;&gt;&lt;font size=&quot;-1&quot;&gt; &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;h1&gt;We're sorry...&lt;/h1&gt;
&lt;p&gt;... but your query looks similar
to automated requests from a computer virus or spyware
application.  To protect our users, we can't process your request
right now.
&lt;/p&gt;
&lt;p&gt;We'll restore your access as quickly as possible, so try again soon. In the meantime, if you suspect that your computer or network has been infected,
you might want to run a &lt;a href=&quot;http://www.download.com/Antivirus/3150-2239-0.html&quot;&gt; virus checker&lt;/a&gt; or &lt;a href=&quot;http://www.download.com/sort/3150-8022-0-1-4.html&quot;&gt;spyware remover&lt;/a&gt; to make sure that your systems are free of viruses and other spurious software.
&lt;/p&gt;
&lt;p&gt;
If you're continually receiving this error, you may be able to resolve the
problem by deleting your Google cookie and revisiting Google. For
browser-specific instructions, please consult your browser's online support
center.
&lt;/p&gt;
&lt;p&gt;
If your entire network is affected, more information is available in the &lt;a href=&quot;http://www.google.com/support/bin/answer.py?answer=86640&quot;&gt;Google
Web Search Help Center&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;We apologize for the inconvenience, and hope we'll see you again on Google.





&lt;/blockquote&gt;
&lt;br /&gt;&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;&lt;td&gt;&lt;img alt=&quot;&quot; width=&quot;1&quot; height=&quot;3&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</subtitle>
			<link rel="self" href="http://blog.pykonik.org/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-2185302290921210260</id>
			<updated>2008-06-29T05:47:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Hosting (Python, Django) od Google</title>
		<link href="http://coldpeer.jogger.pl/2008/04/08/hosting-python-django-od-google/"/>
		<id>http://coldpeer.jogger.pl/2008/04/08/hosting-python-django-od-google/</id>
		<updated>2008-04-08T23:48:16+00:00</updated>
		<content type="html">&lt;p&gt;Google udostępniło nową usługę &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;App Engine&lt;/a&gt; (&lt;a href=&quot;http://code.google.com/appengine/docs/whatisgoogleappengine.html&quot;&gt;więcej&lt;/a&gt;), czyli darmowy hosting dla naszych stron www (&lt;a href=&quot;http://appgallery.appspot.com/&quot;&gt;przykłady&lt;/a&gt;). Jako język...&lt;/p&gt;</content>
		<author>
			<name>coldpeer</name>
			<uri>http://coldpeer.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">Coldpeer's Blog</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://coldpeer.jogger.pl/atom/cat/python/short/html/"/>
			<id>http://coldpeer.jogger.pl/atom/cat/python/short/html/</id>
			<updated>2008-07-05T03:47:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Instalacja Pylons pod Windows</title>
		<link href="http://blog.galdomedia.pl/6/instalacja-pylons-pod-windows/"/>
		<id>http://blog.galdomedia.pl/?p=6</id>
		<updated>2008-04-03T11:58:11+00:00</updated>
		<content type="html">Post poniższy już się kiedyś ukazał na ówczesnym blogu Pythonized, jednak nie udało się go odzyskać - w wyniku jakiegoś błędu w WordPressie post został zniszczony przez jakiegoś spammera. O samą instalacje wciąż mnie znajomi pytają, zdecydowałem się więc przywrócić &amp;#8220;poradnik&amp;#8221;.


Instalacja Pylonsów jest całkiem prosta, początkującym przysparza jednak sporo trudności. Proces opiszę więc od samego [...]</content>
		<author>
			<name>Galdomedia</name>
			<uri>http://blog.galdomedia.pl</uri>
		</author>
		<source>
			<title type="html">GaldoMedia Blog » Python</title>
			<subtitle type="html">Py, SEO, SQL. W zdecydowanej większości.</subtitle>
			<link rel="self" href="http://blog.galdomedia.pl/category/python/feed/"/>
			<id>http://blog.galdomedia.pl/category/python/feed/</id>
			<updated>2008-06-11T20:33:45+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">/dev/random w Windowsie</title>
		<link href="http://blog.galdomedia.pl/4/devrandom-w-windowsie/"/>
		<id>http://pythonized.com/?p=4</id>
		<updated>2008-04-01T20:36:11+00:00</updated>
		<content type="html">Ostatnio musiałem skorzystać z możliwości &amp;#8220;nieograniczonej&amp;#8221; generacji ciągów pseudolosowych. W Linuxie sprawa jest prosta - otwieramy /dev/random i cytamy zeń wymaganą licznę znaków. Gorzej z tym pod Windowsem, który mimo, że podobne wirtualne urządzenie posiada, to nie umożliwia adekwatnego skorzystania z niego. Efekt podobny można jednak uzyskać - np. przez wywołanie, np przez win32com, funkcji [...]</content>
		<author>
			<name>Galdomedia</name>
			<uri>http://blog.galdomedia.pl</uri>
		</author>
		<source>
			<title type="html">GaldoMedia Blog » Python</title>
			<subtitle type="html">Py, SEO, SQL. W zdecydowanej większości.</subtitle>
			<link rel="self" href="http://blog.galdomedia.pl/category/python/feed/"/>
			<id>http://blog.galdomedia.pl/category/python/feed/</id>
			<updated>2008-06-11T20:33:45+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">W pogoni za wersjami</title>
		<link href="http://blog.netstation.pl/articles/2008/03/28/w-pogoni-za-wersjami"/>
		<id>tag:blog.netstation.pl:Article20</id>
		<updated>2008-03-28T07:37:27+00:00</updated>
		<content type="html">&lt;p&gt;Frameworki, szczególnie w językach dynamicznych bardzo szybko się rozwijają. Powstaje wersja za wersją. Przy większej liczbie aplikacji może to być uciążliwe. &lt;/p&gt;

&lt;p&gt;Aplikacje pisane pół roku temu są kompatybilne z wersją 0.x frameworka, po drodze były wersje 0.x.y, 0.y a teraz jest wersja 0.z. Czy tkwić z jedną ustaloną jako produkcyjna wersją czy używać do nowych projektów aktualnie najnowszej. Przecież na serwerze jest zainstalowana wersja 0.x i nie ma szans na podniesienie i sprawdzenie wszystkich aplikacji.&lt;/p&gt;

&lt;p&gt;W rozwiązaniu tego dylematu pomógł pakiet &amp;#8220;virtualenv&amp;#8221;. Za jego pomocą szybko zrobimy wirtualne środowisko pythona.&lt;/p&gt;

&lt;p&gt;Może przykład z Pylonsem: na serwerze jest zainstalowana wersja 0.9.5 a najnowszą wersją jest 0.9.6, która ma sporo zmian.&lt;/p&gt;

&lt;p&gt;Więc instalujemy pakiet virtualenv:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;easy_install virtualenv
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Robimy środowisko:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;virtualenv 096
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Powstał nowy katalog &amp;#8220;096&amp;#8221; z binarką pythona. Instalujemy nową wersję Pylonsa:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd 096
./bin/easy_install Pylons==0.9.6
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wgrywamy naszą aplikację do jakiegoś podkatalogu np. Aplikacja i uruchamiamy:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd Aplikacja
../bin/paster serve production.ini --daemon start
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I gotowe. Możemy sobie dograć niezbędne wersje bibliotek. Trzeba pamiętać aby używać skryptów jawnie podając katalog 096/bin.&lt;/p&gt;</content>
		<author>
			<name>Climbus</name>
			<uri>http://blog.netstation.pl</uri>
		</author>
		<source>
			<title type="html">Climbus Blog : Category python, everything about python</title>
			<link rel="self" href="http://blog.netstation.pl/articles/category/python.atom"/>
			<id>tag:blog.netstation.pl:articlescategorypython</id>
			<updated>2008-06-11T20:33:34+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">MySQL w Pythonie, biblioteka MySQLdb</title>
		<link href="http://coldpeer.jogger.pl/2008/03/26/mysql-w-pythonie-biblioteka-mysqldb/"/>
		<id>http://coldpeer.jogger.pl/2008/03/26/mysql-w-pythonie-biblioteka-mysqldb/</id>
		<updated>2008-03-26T21:20:57+00:00</updated>
		<content type="html">&lt;p&gt;W Pythonie mamy kilka bibliotek do obsługi bazy MySQL - najpopularniejszą i najlepszą z nich jest &lt;a href=&quot;http://mysql-python.sourceforge.net/&quot;&gt;MySQLdb&lt;/a&gt; i to o niej traktuje ten tekst. Ciekawostkę może stanowić fakt, iż jest używana w takich projektach jak Django, Zope czy...&lt;/p&gt;</content>
		<author>
			<name>coldpeer</name>
			<uri>http://coldpeer.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">Coldpeer's Blog</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://coldpeer.jogger.pl/atom/cat/python/short/html/"/>
			<id>http://coldpeer.jogger.pl/atom/cat/python/short/html/</id>
			<updated>2008-07-05T03:47:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Bazaar i Mercurial na trzecim spotkaniu</title>
		<link href="http://feeds.feedburner.com/~r/PythonKrakow/~3/258188137/bazaar-i-mercurial-na-trzecim-spotkaniu.html"/>
		<id>tag:blogger.com,1999:blog-2185302290921210260.post-4959850674068616481</id>
		<updated>2008-03-26T09:47:45+00:00</updated>
		<content type="html">Na następnym spotkaniu będziemy mówić o rozproszonych systemach kontroli wersji (dokładniej: tych dwóch wymienionych w tytule posta). Jeśli jeszcze o nich nie słyszałeś/łaś, polecam &lt;a href=&quot;http://www.youtube.com/watch?v=4XpnKHJAok8&quot;&gt;prezentację Linusa Torvaldsa&lt;/a&gt;, w której co prawda miał mówić o gicie (git to jeszcze jeden DVCS), ale skupił się raczej na jeżdżeniu po SVN. Jeśli weźmie się poprawkę na elementy emocjonalne (&quot;jeśli się ze mną nie zgadzasz to jesteś brzydki i śmierdzisz&quot;), to można uzyskać bardzo przekonujące argumenty na rzecz zmiany swojego systemu kontroli wersji. Prezentacje zostaną wygłoszone przez Michała Bugno i Krzysztofa Goja.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Data, godzina i miejsce&lt;/span&gt;: Spotkanie odbędzie się w czwartek, 10 kwietnia, o godzinie 18:15  w tym samym miejscu gdzie ostatnio, czyli w budynku D-10 Akademii Górniczo-Hutniczej przy ulicy Reymonta 19; sali &quot;A&quot; na pierwszym piętrze. Mapkę można znaleźć kilka postów niżej.</content>
		<author>
			<name>Konrad</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.pykonik.org/</uri>
		</author>
		<source>
			<title type="html">Pykonik blog</title>
			<subtitle type="html">&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;G&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#f3c518&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;g&lt;/font&gt;&lt;font color=&quot;#30a72f&quot; size=&quot;10&quot;&gt;l&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;e&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td valign=&quot;middle&quot; width=&quot;100%&quot;&gt;
&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font size=&quot;+1&quot;&gt; &lt;b&gt;Error&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; nowrap=&quot;nowrap&quot;&gt;&lt;font size=&quot;-1&quot;&gt; &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;h1&gt;We're sorry...&lt;/h1&gt;
&lt;p&gt;... but your query looks similar
to automated requests from a computer virus or spyware
application.  To protect our users, we can't process your request
right now.
&lt;/p&gt;
&lt;p&gt;We'll restore your access as quickly as possible, so try again soon. In the meantime, if you suspect that your computer or network has been infected,
you might want to run a &lt;a href=&quot;http://www.download.com/Antivirus/3150-2239-0.html&quot;&gt; virus checker&lt;/a&gt; or &lt;a href=&quot;http://www.download.com/sort/3150-8022-0-1-4.html&quot;&gt;spyware remover&lt;/a&gt; to make sure that your systems are free of viruses and other spurious software.
&lt;/p&gt;
&lt;p&gt;
If you're continually receiving this error, you may be able to resolve the
problem by deleting your Google cookie and revisiting Google. For
browser-specific instructions, please consult your browser's online support
center.
&lt;/p&gt;
&lt;p&gt;
If your entire network is affected, more information is available in the &lt;a href=&quot;http://www.google.com/support/bin/answer.py?answer=86640&quot;&gt;Google
Web Search Help Center&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;We apologize for the inconvenience, and hope we'll see you again on Google.





&lt;/blockquote&gt;
&lt;br /&gt;&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;&lt;td&gt;&lt;img alt=&quot;&quot; width=&quot;1&quot; height=&quot;3&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</subtitle>
			<link rel="self" href="http://blog.pykonik.org/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-2185302290921210260</id>
			<updated>2008-06-29T05:47:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Git, Bazaar, Mercurial - Subversion pod obstrzałem</title>
		<link href="http://blog.zabiello.com/articles/2008/03/19/distributed-vcs"/>
		<id>urn:uuid:52c31377-58b0-4ab0-8c7b-da934a08c64d</id>
		<updated>2008-03-23T14:13:00+00:00</updated>
		<content type="html">&lt;p&gt;Świat technologii IT zmienia się coraz szybciej. Nie minęło wiele lat od dosyć masowego przechodzenia &lt;a href=&quot;http://pl.wikipedia.org/wiki/CVS&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt;&lt;/a&gt; do &lt;a href=&quot;http://pl.wikipedia.org/wiki/Subversion&quot;&gt;Subversion&lt;/a&gt; a już zanosi się na kolejną rewolucję. Tak jak wcześniej atakowany był &lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt;, teraz atakowany jest Subversion. Atakowany jest przez &lt;strong&gt;rozproszone&lt;/strong&gt; systemy kontroli wersji.&lt;/p&gt;


	&lt;h2&gt;Czym jest system rozproszony (distributed)?&lt;/h2&gt;


	&lt;p&gt;&lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt; jest przykładem &lt;strong&gt;centralnego&lt;/strong&gt; systemu wersjonowania. Zawsze mamy do czynienia z centralnym repozytorium kodu. Jakakolwiek próba ściągnięcia nowszych wersji plików wymaga posiadania połączenia z serwerem zawierającym interesujące nas repozytorum. Jakakolwiek aktualizacja zmian w repozytorum wymaga znowu połączenia się z centralnym repozytorium. Systemy rozproszone działają zupełnie inaczej.&lt;/p&gt;


	&lt;p&gt;Po pierwsze, nie posiadają żadnego centralnego repozytorium. Ściągnięcie projektu polega na &lt;strong&gt;sklonowaniu&lt;/strong&gt; danego repozytorium na dysku lokalnym. Wszelkie lokalnie dokonywane zmiany należy dodawać do swojego, lokalnego repozytorium. Nie jest potrzebne posiadanie aktywnego połączenia z internetem. Co w wypadku, kiedy pierwotne repozytorium się zmieniło i chcemy zaktualizować swoje? Nic trudnego.&lt;/p&gt;


	&lt;p&gt;Drugą, potężną różnicą w stosunku do Subversion jest łatwość z jaką w systemie rozproszonym scala się dowolne odgałęzienia (branches) kodu. Subversion jest bardzo tu kiepskie. System rozproszony pozwala zatem posiadać najnowszą wersję kodu oryginalnego włącznie z naszymi poprawkami. Jeśli chcemy wysłać nasze zmiany do autora projektu, można to także uczynić. Jeśli autor uzna, że nasze zmiany są wartościowe i godne tego aby je dołączyć, stosuje podobny mechanizm scalania odgałęzień.&lt;/p&gt;


	&lt;p&gt;Trzecią istotną różnicą jest brak zaśmiecania projektu dziesiątkami folderów o nazwie &lt;code&gt;.svn&lt;/code&gt; (W Subversion każdy wewnętrzny folder, aby podlegał wersjonowaniu, musi posiadać w środku taki dodatkowy folder). Systemy rozproszone zwykle tworzą jeden, jedyny folder w głównym katalogu i nie wymagają aby wszystkie wewnętrzne foldery posiadały go również.&lt;/p&gt;


	&lt;p&gt;W praktyce, porządnie prowadzone projekty używające Subversion stosują jakieś formalne reguły dodawania zmian w kodzie. Np. zabrania się &amp;#8220;commitowania&amp;#8221; kodu, który nie przeszedł pozytywnie wszystkich testów jednostkowych. Problem w tym, że od chwili zgrania sobie źródeł na dysk, tracimy wszelką możliwość wersjonowania naszych małych, lokalnych zmian (które niekoniecznie muszą być pozbawione błędów). Czasami chcemy się cofnąć do jakiejś wcześniejszej zmiany i nie możemy. Subversion wersjonuje tylko kod w centralnym repozytorium. System rozproszony pozwala zaś na takie śledzenie lokalnych zmian i to nawet w sposób niezależny od ściągniętego kodu z repozytorium Subversion. Niezależny, bo można trochę &amp;#8220;oszukiwać&amp;#8221; system używany w pracy. :) Po ściągnięciu kodu z &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt;, można dodać sobie lokalnie system rozproszony i kontrolować swoją historię lokalnych zmian w sposób nieinwazyjny dla Subversion.&lt;/p&gt;


	&lt;h2&gt;Git, Mercurial i Bazaar&lt;/h2&gt;


	&lt;p&gt;Aktualnie, najbardziej liczące się systemy rozproszone to &lt;a href=&quot;http://git.or.cz/&quot;&gt;Git&lt;/a&gt;, &lt;a href=&quot;http://www.selenic.com/mercurial/wiki/&quot;&gt;Mercurial&lt;/a&gt; i &lt;a href=&quot;http://bazaar-vcs.org/&quot;&gt;Bazaar&lt;/a&gt;.&lt;/p&gt;


	&lt;h3&gt;Git&lt;/h3&gt;


	&lt;p&gt;Pierwotnie stworzony przez Linusa Torvaldsa do zarządzania kodem jądra systemu Linux, &lt;a href=&quot;http://git.or.cz/&quot;&gt;Git&lt;/a&gt; zaczyna dosyć przebojowo zdobywać popularność. Pomijając oczywistą wyższość systemu rozproszonego nad system centralnego repozytorium, trzeba podkreślić, że Git bardzo szybki. Niezrównanie szybszy od Subversion, szybszy też od Mercurial i Bazaar. Coraz więcej projektów zaczyna przechodzi na Git&amp;#8217;a (np. konkurent &lt;a href=&quot;http://rubyonrails.pl&quot;&gt;Railsów&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://merbivore.com/&quot;&gt;Merb&lt;/a&gt; trzyma źródła repozytorium Git&amp;#8217;a, zobacz też &amp;#8220;Contributing to Merb&amp;#8221; &amp;#8211; &lt;a href=&quot;http://gweezlebur.com/2008/2/1/so-you-want-to-contribute-to-merb-core-part-1&quot;&gt;Part 1&lt;/a&gt; i &lt;a href=&quot;http://gweezlebur.com/2008/2/9/contributing-to-merb-part-2&quot;&gt;Part 2&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;Także (napisany w Ruby) system do aktualizacji projektów na serwerze (deploying) &amp;#8211; &lt;a href=&quot;http://www.capify.org/&quot;&gt;Capistrano&lt;/a&gt; &amp;#8211; posiada &lt;a href=&quot;http://github.com/guides/deploying-with-capistrano&quot;&gt;wsparcie dla Git&amp;#8217;a&lt;/a&gt;.  Duża rolę w popularyzacji Git&amp;#8217;a czynią serwisy takie jak &lt;a href=&quot;https://github.com/&quot;&gt;github.com&lt;/a&gt; czy &lt;a href=&quot;http://gitorious.org&quot;&gt;gitorious.org&lt;/a&gt; gdzie można założyć darmowe konto dla swoich projektów. A do śledzenia błędów i zgłaszania poprawek kodu trzymanego w githubie można użyć serwisu &lt;a href=&quot;http://lighthouseapp.com&quot;&gt;http://lighthouseapp.com&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://railscasts.com&quot;&gt;Railscasts.com&lt;/a&gt; znany serwis ze dziesiątkami darmowych filmów edykacyjnych dla Railsów, dodał niedawno &lt;a href=&quot;http://railscasts.com/episodes/96&quot;&gt;screencast opisujący integrację Git&amp;#8217;a z Rails&lt;/a&gt;. Trochę dłuższy film na ten temat jest dostępny też w serwisie &lt;a href=&quot;https://peepcode.com/products/git&quot;&gt;peepcode.com&lt;/a&gt;. Zobacz także poniższą prezentację Linusa Torvarldsa n/t &lt;span class=&quot;caps&quot;&gt;GIT&lt;/span&gt;&amp;#8217;a. Linus nie przebiera w słowach krytyki wobec Subversion, nazywając go po prostu głupim pomysłem. Subversion to tylko poprawiony, stary &lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt;. Nie wnosi jednak nic specjalnie nowego i jego koniec jest bliski. ;)&lt;/p&gt;




	&lt;h3&gt;Mercurial&lt;/h3&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.selenic.com/mercurial&quot;&gt;Mercurial&lt;/a&gt;, to system rozproszony napisany w Pythonie. Z definicji jest więc multiplatformowy (bieżąca implementacja Git&amp;#8217;a dla win32 jest dosyć słaba). Zasadniczo niewiele się różni od Git&amp;#8217;a. Jest trochę wolniejszy, nie ma (przynajmniej ja nie znam) jakichś popularnych darmowych kont do trzymania projektów. Ale jego zaletą jest wspomniana wyżej multiplatformowość (działa na win32 bardzo dobrze) oraz integracja z edytorem Netbeans 6 (jeszcze trwają prace nad integracją z Git&amp;#8217;em). Firma Sun wybrała też Mercurial jako następcę dla Subversion. Są też mniejsze firmy które zdecydowały się na Mercurial z powodu lepszej integracji z systemem Windows, ale są gotowe przejść na szybszego Git&amp;#8217;a jak tylko zostanie poprawiona jego wersja dla win32.&lt;/p&gt;


	&lt;h3&gt;Bazaar&lt;/h3&gt;


	&lt;p&gt;&lt;a href=&quot;http://bazaar-vcs.org/&quot;&gt;Bazaar&lt;/a&gt;, podobnie jak Mercurial, napisany został w Pythonie. Nie ma więc problemów z działaniem pod systemem innym niż &lt;span class=&quot;caps&quot;&gt;POSIX&lt;/span&gt;. Jest to dosyć ciekawy system, bo potrafi pracować zarówno jako system centralny jak i rozproszony. Jego twórcy są mocno przekonani o wyższości Bazaar nad Git, Mercurial i Subversion, o czym świadczy zamieszczone przez nich śmiałe &lt;a href=&quot;http://bazaar-vcs.org/BzrWhy&quot;&gt;porównanie z tymi systemami&lt;/a&gt;. (Niektóre stare porównania Git&amp;#8217;a z Bazaar podkreślały znaczną przewagę szybkości Git&amp;#8217;a, ale niestety najczęściej dotyczyły one starej, wolniejsze wersji Bazaar. Od wersji 1.0 poprawiono jednak znacznie wydajność i ten argument trochę stępił swoje ostrze krytyki).&lt;/p&gt;


	&lt;p&gt;Bazaar posiada, podobnie jak Git, serwer z darmowymi kontami na projekty &amp;#8211; &lt;a href=&quot;http://doc.bazaar-vcs.org/latest/en/tutorials/using_bazaar_with_launchpad.html&quot;&gt;launchpad&lt;/a&gt;. To może pomóc spopularyzować ten system. Bazaar ma dostępny wygodny &lt;a href=&quot;http://bazaar-vcs.org/BzrEclipse&quot;&gt;plugin do Eclipse&lt;/a&gt;. Co do Netbeans 6, są jakieś plany, ale &lt;a href=&quot;https://lists.ubuntu.com/archives/bazaar/2007q4/033568.html&quot;&gt;na razie nie wiadomo&lt;/a&gt; czy i kiedy dodadzą wsparcie.&lt;/p&gt;


	&lt;h3&gt;Updates&lt;/h3&gt;


	&lt;p&gt;&lt;em&gt;2008-03-23&lt;/em&gt;&lt;/p&gt;


Użytkownicy &lt;span class=&quot;caps&quot;&gt;OSX 10&lt;/span&gt;.5.2 (Leoparda) instalują Gita za pomocą MacPortów (warto dodać wariant +svn aby mieć dostęp do skrypty git-svn; warianty dostępne dla Git&amp;#8217;a sprawdza się za pomocą komendy &lt;code&gt;port variants git&lt;/code&gt;, a odświeżenie listy portów: &lt;code&gt;sudo port -d sync&lt;/code&gt;).
&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;sudo port install git-core +svn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Jeśli instalacja wywali się z powodu problemów z SQlite3, należy doinstalować gmake, czyli:&lt;/p&gt;


&lt;div class=&quot;typocode&quot;&gt;&lt;pre&gt;&lt;code class=&quot;typocode_bash &quot;&gt;sudo su
port install gmake
port clean sqlite3
port install sqlite3
port install git-core +svn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content>
		<author>
			<name>Jarosław Zabiełło</name>
			<uri>http://blog.zabiello.com/articles/tag/python</uri>
		</author>
		<source>
			<title type="html">Jarosław Zabiełło - BLOG: Tag python</title>
			<subtitle type="html">moje notatki, linki, komentarze</subtitle>
			<link rel="self" href="http://blog.zabiello.com/xml/atom/tag/python/feed.xml"/>
			<id>tag:blog.zabiello.com,2005:Typo</id>
			<updated>2008-07-04T10:47:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Materiały o Django z PyCon 2008</title>
		<link href="http://jonca.vdl.pl/blog/2008/03/18/materialy-o-django-z-pycon-2008/"/>
		<id>http://jonca.vdl.pl/blog/2008/03/18/materialy-o-django-z-pycon-2008/</id>
		<updated>2008-03-18T18:10:52+00:00</updated>
		<content type="html">&lt;p&gt;&lt;em&gt;Uaktualnienie 2008-04-02: Dodałem linki do dwóch pozostałych materiałów.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;Ponieważ część konferencyjna PyCon 2008 już się zakończyła poświęciłem chwilę czasu na odnalezienie na różnych stronach autorów ich prezentacji. By inni nie szukali, oto lista (jeśli coś pominąłem to albo nie ma tej prezentacji, albo źle szukałem, proszę o komentarze, brakujące wpisy ...&lt;/p&gt;</content>
		<author>
			<name>Rafał Jonca</name>
			<uri>http://jonca.vdl.pl/blog/</uri>
		</author>
		<source>
			<title type="html">Rafał Jońca's blog: entries for category python</title>
			<subtitle type="html">Selected category entries from Rafał Jońca's blog</subtitle>
			<link rel="self" href="http://jonca.vdl.pl/blog/rss/kategoria/python/"/>
			<id>http://jonca.vdl.pl/blog/rss/kategoria/python/</id>
			<updated>2008-07-05T16:47:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Co robią moje wątki?</title>
		<link href="http://blog.netstation.pl/articles/2008/03/12/co-robi%C4%85-moje-w%C4%85tki"/>
		<id>tag:blog.netstation.pl:Article19</id>
		<updated>2008-03-16T19:20:26+00:00</updated>
		<content type="html">&lt;p&gt;Paster dostarcza wiele przydatnych aplikacji. Jedna z nich nazywa się watch_threads i służy do podglądania stanu wątków pastera. &lt;/p&gt;

&lt;p&gt;Widzimy ile wątków jest w puli, ile aktualnie jest używanych, czy są jakieś zablokowane. Jest też lista wątków aktualnie przetwarzanych oraz kilka szczegółów np. czas wykonania. Możemy zabijać zablokowane wątki.&lt;/p&gt;

&lt;p&gt;Instalacja jest prosta. Jest to aplikacja wsgi więc można wpiąć ją pod url do pastera. Wystarczy zmienić domyślne sekcje w pliku .ini:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[composite:main]
use = egg:Paste#urlmap
/ = mainapp
/monitor = monitor

[app:monitor]
use = egg:Paste#watch_threads
allow_kill = True

[app:mainapp]
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Po restarcie pod adresem: /monitor mamy listę aktualnie używanych wątków.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://blog.netstation.pl/files/monit.jpg&quot; alt=&quot;Thread monitor&quot; /&gt;&lt;/p&gt;</content>
		<author>
			<name>Climbus</name>
			<uri>http://blog.netstation.pl</uri>
		</author>
		<source>
			<title type="html">Climbus Blog : Category python, everything about python</title>
			<link rel="self" href="http://blog.netstation.pl/articles/category/python.atom"/>
			<id>tag:blog.netstation.pl:articlescategorypython</id>
			<updated>2008-06-11T20:33:34+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Paster na kilka procesów</title>
		<link href="http://blog.netstation.pl/articles/2008/03/10/paster-na-kilka-procesow"/>
		<id>tag:blog.netstation.pl:Article18</id>
		<updated>2008-03-10T19:34:13+00:00</updated>
		<content type="html">&lt;p&gt;Po przeczytaniu paru artykułów o GIL postanowiłem spróbować rozdzielić paster&amp;#8217;a na kilka procesów.   &lt;/p&gt;

&lt;p&gt;Domyślnie Pylons rusza w trybie z pulą 10 wątków. Liczbę wątków można zmienić w production.ini umieszczając w sekcji server:main poniższe:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;use_threadpool = True
threadpool_workers = 20
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ale czy 20 wątków i więcej będą optymalnie wykorzystywały wieloprocesorową maszynę? Może lepszym wyjściem jest powielanie procesów a nie wątków.&lt;/p&gt;

&lt;p&gt;Aby uruchomić aplikację na kilku procesach można zrobić kilka sekcji server:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[server:main]
use  = egg:paste#http
host = 0.0.0.0
port = 5000
use_threadpool = True
threadpool_workers = 10

[server:main2]
use  = egg:paste#http
host = 0.0.0.0
port = 5001
use_threadpool = True
threadpool_workers = 10
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Teraz aby wystartować robimy:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;paster serve production.ini --server-name=main --pid-file=main.pid --log-file=main.log --daemon start 
paster serve production.ini --server-name=main2 --pid-file=main2.pid --log-file=main2.log --daemon start
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I mamy kilka procesów. Teraz wystarczy napisać kawałek skryptu startującego, ustawić loadbalancer i testować.&lt;/p&gt;</content>
		<author>
			<name>Climbus</name>
			<uri>http://blog.netstation.pl</uri>
		</author>
		<source>
			<title type="html">Climbus Blog : Category python, everything about python</title>
			<link rel="self" href="http://blog.netstation.pl/articles/category/python.atom"/>
			<id>tag:blog.netstation.pl:articlescategorypython</id>
			<updated>2008-06-11T20:33:34+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">gigabajtosekunda</title>
		<link href="http://blog.netstation.pl/articles/2008/03/07/gigabajtosekunda"/>
		<id>tag:blog.netstation.pl:Article17</id>
		<updated>2008-03-07T18:55:45+00:00</updated>
		<content type="html">&lt;p&gt;Po ostatniej, fajnej dyskusji na pl.comp.lang.python postanowiłem sprawdzić co mi Rails powie.&lt;/p&gt;

&lt;p&gt;I tak:&lt;/p&gt;

&lt;p&gt;1.day * 1.gigabyte
=&gt; 92771293593600&lt;/p&gt;

&lt;p&gt;Nowa jednostka? sekundobajt:&lt;/p&gt;

&lt;p&gt;1.second * 1.byte:
=&gt; 1&lt;/p&gt;

&lt;p&gt;To jest dobre:&lt;/p&gt;

&lt;p&gt;1.gigabyte.ago
=&gt; Wed Feb 27 06:08:25 +0100 1974&lt;/p&gt;

&lt;p&gt;W sam raz do nowego Startreka: &amp;#8220;W dawnych czasach. Cały gigabajt temu. Kiedy jeszcze ludzie mierzyli czas w prymitywnych sekundach&amp;#8221; :) &lt;/p&gt;

&lt;p&gt;Następny wpis będzie 512.kilobytes.from_now&lt;/p&gt;

&lt;p&gt;=&gt; Thu Mar 13 21:32:10 +0100 2008&lt;/p&gt;</content>
		<author>
			<name>Climbus</name>
			<uri>http://blog.netstation.pl</uri>
		</author>
		<source>
			<title type="html">Climbus Blog : Category python, everything about python</title>
			<link rel="self" href="http://blog.netstation.pl/articles/category/python.atom"/>
			<id>tag:blog.netstation.pl:articlescategorypython</id>
			<updated>2008-06-11T20:33:34+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Szalejące frameworki Rubiego i Rack/WSGI</title>
		<link href="http://blog.zabiello.com/articles/2008/03/04/frameworki-rubiego-rack-wsgi"/>
		<id>urn:uuid:bdcbae56-a710-43b1-84a6-77d5471f8cac</id>
		<updated>2008-03-07T16:07:06+00:00</updated>
		<content type="html">&lt;p&gt;Merb w wersji 0.9 poszedł na całość i oparli swój midleware na &lt;a href=&quot;http://rack.rubyforge.org/&quot;&gt;Rack&amp;#8217;u&lt;/a&gt;. Jej twórcy nie kryją się że wzorowali się na pythonowej bibliotece &lt;a href=&quot;http://www.wsgi.org/wsgi&quot;&gt;&lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt;&lt;/a&gt;. Biblioteka ta robi niezłą furorę w kręgach Rubiego. Powstaje sporo różnych mikroframeworków lub szybkich serwerów &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; pracujących asynchronicznie i wykorzystujących Rack. Niedawno powstał świetny &lt;a href=&quot;http://code.macournoyer.com/thin/&quot;&gt;Thin&lt;/a&gt;, a już można przeczytać o &lt;a href=&quot;http://www.rubyinside.com/ebb-web-framework-http-server-786.html&quot;&gt;2x szybszy Ebb&lt;/a&gt;. Co ciekawe, Ebb chce docelowo obsługiwać zarówno frameworki Rubiego jak i &lt;strong&gt;Pythona&lt;/strong&gt;! Jestem ciekaw czy będzie w stanie zdetronizować serwer &lt;a href=&quot;http://pythonpaste.org/&quot;&gt;Paste&lt;/a&gt;... Rack doczekał się już swojej &lt;a href=&quot;http://github.com/booleanman/rackinterfacefilter/tree/master&quot;&gt;implementacji w JRuby&lt;/a&gt;! Umożliwia to  tym samym odpalanie w &lt;a href=&quot;http://jruby.codehaus.org/&quot;&gt;JRuby&lt;/a&gt; wszystkich frameworków które korzystają z Rack&amp;#8217;a.&lt;/p&gt;


	&lt;h2&gt;Frameworki&lt;/h2&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://rubyonrails.pl&quot;&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;/a&gt; &amp;#8211; najważniejszy framework Rubiego, może być odpalany za pomocą Thina który &lt;em&gt;używa Rack&lt;/em&gt;. Rails można odpalić na JRuby nawet prosto z &lt;a href=&quot;http://www.netbeans.org/features/ruby/index.html&quot;&gt;Netbeans 6&lt;/a&gt; :)&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://merbivore.com/&quot;&gt;&lt;strong&gt;Merb&lt;/strong&gt;&lt;/a&gt; &amp;#8211; pretendent do detronizacji Rails, _używa Rack_i tym samym można go odpalić na JRuby.&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://ramaze.net/&quot;&gt;Ramaze&lt;/a&gt; &amp;#8211; podobnie do Merba, stara się promować bardziek elastyczne podejście, &lt;em&gt;używa Rack&lt;/em&gt;, raczej nie zagrozi Merbowi&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://fuzed.rubyforge.org/&quot;&gt;Fuzed&lt;/a&gt; &amp;#8211; Rails z &lt;a href=&quot;http://yaws.hyber.org/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;YAWS&lt;/span&gt;&lt;/a&gt; (szybkim serwerem &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; napisanym w &lt;a href=&quot;http://en.wikipedia.org/wiki/Erlang_programming_language&quot;&gt;Erlangu&lt;/a&gt;)&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://www.nitroproject.org/&quot;&gt;Nitro&lt;/a&gt; &amp;#8211; typu &lt;span class=&quot;caps&quot;&gt;MVC&lt;/span&gt; z własnym &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt; &amp;#8211; &lt;a href=&quot;http://www.nitroproject.org/docs/rdoc/classes/Og.html&quot;&gt;Ogg&lt;/a&gt; i naciskiem na &lt;span class=&quot;caps&quot;&gt;AJAX&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://enigo.com/projects/iowa/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IOWA&lt;/span&gt;&lt;/a&gt; &amp;#8211; komponentowy, &lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;https://rubyforge.org/projects/wee/&quot;&gt;Wee&lt;/a&gt; wzorowany na smalltalkowym &lt;a href=&quot;http://www.seaside.st/&quot;&gt;Seaside&lt;/a&gt; używającym &lt;a href=&quot;http://en.wikipedia.org/wiki/Continuation&quot;&gt;kontynuacji&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://sinatra.rubyforge.org/&quot;&gt;Sinatra&lt;/a&gt; &amp;#8211; mikroframework wzorowany na minimalistycznym, pythonowym &lt;a href=&quot;http://webpy.org&quot;&gt;Web.py&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://sergiosantos.info/2007/7/camping-a-ruby-microframework&quot;&gt;Camping&lt;/a&gt; &amp;#8211; kolejny mikroframework w Ruby&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://rubywaves.com/&quot;&gt;Wave&lt;/a&gt; &amp;#8211; wzorowany na Camping, też używa Rack i Rubiego wszędzie gdzie się da.&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://github.com/macournoyer/invisible/tree/master&quot;&gt;Invisible&lt;/a&gt; mikroframework używający Rack napisany w 35 linijkach kodu Rubiego (bardziej ciekawostka)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;Mongrel i spółka&lt;/h2&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.webrick.org/&quot;&gt;Webrick&lt;/a&gt; &amp;#8211; serwer http dostępny razem ze standardową biblioteką Rubiego&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://dev.robotcoop.com/Libraries/webrick-high-performance/classes/WEBrick/HighPerformanceServer.html&quot;&gt;Highperformance Webrick&lt;/a&gt; &amp;#8211; szybsza wersja Webricka (używająca uniksowych forków)&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://mongrel.rubyforge.org/&quot;&gt;Mongrel&lt;/a&gt; &amp;#8211; klasyka, napisany częściowo w C, to od niego zaczęła się rewolucja i odejście od FastCGI jako metody odpalania Railsów.&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://swiftiply.swiftcore.org/mongrel.html&quot;&gt;Swiftyply i evented_mongrel&lt;/a&gt; asychroniczne, szybsze wersje Mongrela&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://code.macournoyer.com/thin/&quot;&gt;&lt;strong&gt;Thin&lt;/strong&gt;&lt;/a&gt; &amp;#8211; asynchroniczny web server używający Mongrela i Rack&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://ebb.rubyforge.org/&quot;&gt;&lt;strong&gt;Ebb&lt;/strong&gt;&lt;/a&gt; &amp;#8211; używa Rack, większość kodu jest w C, dlatego jest taki szybki, na razie mało dokumentacji, być może następca Thin&lt;/li&gt;
	&lt;/ul&gt;</content>
		<author>
			<name>Jarosław Zabiełło</name>
			<uri>http://blog.zabiello.com/articles/tag/python</uri>
		</author>
		<source>
			<title type="html">Jarosław Zabiełło - BLOG: Tag python</title>
			<subtitle type="html">moje notatki, linki, komentarze</subtitle>
			<link rel="self" href="http://blog.zabiello.com/xml/atom/tag/python/feed.xml"/>
			<id>tag:blog.zabiello.com,2005:Typo</id>
			<updated>2008-07-04T10:47:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Mikroskopijna, tyci tyci część kodu w standardowej bibliotece  Ruby'ego dziełem leszcza</title>
		<link href="http://bluszcz.jogger.pl/2008/03/04/micro-czesc-kodu-w-standardowej-bibliotece-ruby-dzielem-lesz/"/>
		<id>http://bluszcz.jogger.pl/2008/03/04/micro-czesc-kodu-w-standardowej-bibliotece-ruby-dzielem-lesz/</id>
		<updated>2008-03-04T22:04:10+00:00</updated>
		<content type="html">&lt;p&gt;Będę wredny - ale to hasło padło na pl.comp.lang.python z ust programisty (chyba programisty) a na pewno &lt;em&gt;fana&lt;/em&gt; języka Ruby.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/pl.comp.lang.python/msg/559576356ea58761&quot;&gt;Jython Reaktywacja.&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Rafał bluszcz Zawadzki</name>
			<uri>http://bluszcz.jogger.pl/</uri>
		</author>
		<source>
			<title type="html">blog bluszcza, python, kuchnia, muzyka i wirtualizacja</title>
			<subtitle type="html">Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle>
			<link rel="self" href="http://bluszcz.jogger.pl/rss/cat/python/content/html/"/>
			<id>http://bluszcz.jogger.pl/rss/cat/python/content/html/</id>
			<updated>2008-07-04T14:47:03+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Słoneczna przyszłość dla Jythona</title>
		<link href="http://blog.zabiello.com/articles/2008/03/03/sun-jython"/>
		<id>urn:uuid:2927111d-047f-4dcb-8c90-089c05a3f55f</id>
		<updated>2008-03-03T16:32:34+00:00</updated>
		<content type="html">&lt;p&gt;Od czasu odejścia &lt;a href=&quot;http://hugunin.net/story_of_jython.html&quot;&gt;twórcy Jythona&lt;/a&gt;, Jima Hugginsa, do firmy Microsoft (do prac na &lt;a href=&quot;http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython&quot;&gt;IronPythonem&lt;/a&gt;), rozwój &lt;a href=&quot;http://en.wikipedia.org/wiki/Jython&quot;&gt;Jythona&lt;/a&gt; , (javowej implementacji &lt;a href=&quot;http://python.org&quot;&gt;Pythona&lt;/a&gt;) mocno zwolnił i został sporo w tyle za wychodzącymi kolejnymi wersjami CPythona. Dlatego sympatycy Pythona z pewnością się ucieszą wiadomością o tym, że &lt;a href=&quot;http://headius.blogspot.com/2008/03/welcome-pythonistas-to-sun.html&quot;&gt;firma Sun zatrudniła&lt;/a&gt; na pełen etat &lt;a href=&quot;http://fwierzbicki.blogspot.com/&quot;&gt;Franka Wierzbickiego&lt;/a&gt;, będącego głównym developerem Jythona od grudnia 2005. Jest zatem spora szansa że projekt nabierze porządnego rozpędu tak, jak to się stało z &lt;a href=&quot;http://jruby.codehaus.org/&quot;&gt;JRuby&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Od jakiegoś czasu developerzy &lt;a href=&quot;http://djangoproject.com&quot;&gt;Django&lt;/a&gt; także pracują nad uruchomieniem swego frameworka &lt;a href=&quot;http://fwierzbicki.blogspot.com/2008/01/django-beginning-to-work-on-jython.html&quot;&gt;pod Jythonem&lt;/a&gt;. Niestety aktualnie Jython jest zgodny ze starym Pythonem 2.2 i z tego powodu raczej nie zanosi się aby szybko podobne działania podjęli developerzy frameworka &lt;a href=&quot;http://pylonshq.com&quot;&gt;Pylons&lt;/a&gt; (który wymaga do pracy minimum Pythona 2.4). Ale to wszystko może się wkrótce zmienić, skoro Jython dostał się pod skrzydła Suna.&lt;/p&gt;</content>
		<author>
			<name>Jarosław Zabiełło</name>
			<uri>http://blog.zabiello.com/articles/tag/python</uri>
		</author>
		<source>
			<title type="html">Jarosław Zabiełło - BLOG: Tag python</title>
			<subtitle type="html">moje notatki, linki, komentarze</subtitle>
			<link rel="self" href="http://blog.zabiello.com/xml/atom/tag/python/feed.xml"/>
			<id>tag:blog.zabiello.com,2005:Typo</id>
			<updated>2008-07-04T10:47:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Pykonik na Studenckim Festiwalu Informatycznym</title>
		<link href="http://feeds.feedburner.com/~r/PythonKrakow/~3/244340593/pykonik-na-studenckim-festiwalu.html"/>
		<id>tag:blogger.com,1999:blog-2185302290921210260.post-5065409830404147017</id>
		<updated>2008-03-02T15:32:33+00:00</updated>
		<content type="html">W czwartek, 6 marca, czyli w pierwszy z trzech dni trwania &lt;a href=&quot;http://www.sfi.org.pl&quot;&gt;Studenckiego Festiwalu Informatycznego&lt;/a&gt;, o godzinie 12:20, odbędą się warsztaty/tutorial pt. &quot;Tworzenie gier w Pythonie&quot;. Zaprezentujemy na nich podstawy biblioteki Pyglet i napiszemy za jej pomocą prostą grę. Jeśli masz zamiar wziąć udział w warsztatach, upewnij się, że masz zainstalowanego &lt;a href=&quot;http://python.org/&quot;&gt;Pythona&lt;/a&gt; (:P) i &lt;a href=&quot;http://www.pyglet.org/download.html&quot;&gt;bibliotekę Pyglet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Warto również zwrócić uwagę na inne wykłady i warsztaty na SFI związane z Pythonem:&lt;ul&gt;&lt;li&gt;&lt;span&gt;Czwartek, 14:00&lt;/span&gt; &lt;span&gt;Flexible virtual machine creation with PyPy&lt;/span&gt;, Maciej Fijałkowski (warsztaty)&lt;/li&gt;&lt;li&gt;&lt;span&gt;Czwartek, 16:00&lt;/span&gt; &lt;span&gt;PyPy - Automatic Generation of VMs for Dynamic Languages&lt;/span&gt;, Maciej Fijałkowski&lt;/li&gt;&lt;li&gt;&lt;span&gt;Czwartek, 17:15&lt;/span&gt; &lt;span&gt;Python in your Browser with IronPython and Silverlight&lt;/span&gt;, Michael Foord &lt;/li&gt;&lt;li&gt;&lt;span&gt;Sobota, 10:50&lt;/span&gt; &lt;span&gt;Test-Driven Development: Brooks' silver bullet?&lt;/span&gt;, Jonathan Hartley&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Całą agendę festiwalu można znaleźć na &lt;a href=&quot;http://www.sfi.org.pl/plan_konferencji&quot;&gt;tej stronie&lt;/a&gt;.</content>
		<author>
			<name>Konrad</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.pykonik.org/</uri>
		</author>
		<source>
			<title type="html">Pykonik blog</title>
			<subtitle type="html">&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;G&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#f3c518&quot; size=&quot;10&quot;&gt;o&lt;/font&gt;&lt;font color=&quot;#0039b6&quot; size=&quot;10&quot;&gt;g&lt;/font&gt;&lt;font color=&quot;#30a72f&quot; size=&quot;10&quot;&gt;l&lt;/font&gt;&lt;font color=&quot;#c41200&quot; size=&quot;10&quot;&gt;e&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td valign=&quot;middle&quot; width=&quot;100%&quot;&gt;
&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font size=&quot;+1&quot;&gt; &lt;b&gt;Error&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; nowrap=&quot;nowrap&quot;&gt;&lt;font size=&quot;-1&quot;&gt; &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;h1&gt;We're sorry...&lt;/h1&gt;
&lt;p&gt;... but your query looks similar
to automated requests from a computer virus or spyware
application.  To protect our users, we can't process your request
right now.
&lt;/p&gt;
&lt;p&gt;We'll restore your access as quickly as possible, so try again soon. In the meantime, if you suspect that your computer or network has been infected,
you might want to run a &lt;a href=&quot;http://www.download.com/Antivirus/3150-2239-0.html&quot;&gt; virus checker&lt;/a&gt; or &lt;a href=&quot;http://www.download.com/sort/3150-8022-0-1-4.html&quot;&gt;spyware remover&lt;/a&gt; to make sure that your systems are free of viruses