<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wikidot="http://www.wikidot.com/rss-namespace">

	<channel>
		<title>Piotr Gabryjeluk dev blog</title>
		<link>http://piotr.gabryjeluk.pl</link>
		<description>Blog, photos and developer notes of Piotr Gabryjeluk, one of Wikidot.com developers.</description>
				<copyright></copyright>
		<lastBuildDate>Sat, 11 Feb 2012 22:29:52 +0000</lastBuildDate>
		
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:ubuntu-idzie-wedlug-mnie-w-zlym-kierunku</guid>
				<title>Ubuntu idzie (według mnie) w złym kierunku</title>
				<link>http://piotr.gabryjeluk.pl/dev:ubuntu-idzie-wedlug-mnie-w-zlym-kierunku</link>
				<description>

&lt;p&gt;Dzisiejsza notka będzie wielce narzekająca i pewnie nic nie wnosząca do Waszego życia, ale zauważyłem, że wiele osób ma podobne odczucia, do moich, więc postanowiłem się podzielić swoimi przemyśleniami.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 06 Feb 2012 22:31:33 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Dzisiejsza notka będzie wielce narzekająca i pewnie nic nie wnosząca do Waszego życia, ale zauważyłem, że wiele osób ma podobne odczucia, do moich, więc postanowiłem się podzielić swoimi przemyśleniami.</p> <div class="content-separator" style="display: none:"></div> <p>Jakiś czas temu Ubuntu postanowiło postawić na Unity &#8212; nowoczesne środowisko graficzne z ultra fajnym dokiem jak i wyszukiwarką programów, które miało być hitem dla tzw. zwykłego użytkownika.</p> <p>Niestety całe to Unity, pomimo kilku fajnych rzeczy, po prostu nie sprawdza się. I o ile wszystkie pomysły w teorii są bardzo fajne (np. dock a'la Mac OS) to w praktyce są zrealizowane po prostu źle.</p> <p>Mam wrażenie, że nikt tego nie testował, ponieważ, kiedy pierwszy raz zetknąłem się z tym środowiskiem (a było już ono w Ubuntu w wersji wydanej, nie żadne alfa-bety) to miało mnóstwo błędów.</p> <p>Najgorsze jest chyba jednak to, że poczyniono w jakimś wyższym celu mnóstwo założeń, jak chyba najbardziej kontrowersyjne, że dock będzie po lewej stronie i nie da się go przesunąć. Można się do tego przyzwyczaić? Można. O ile się korzysta z jednego ekranu. Jako power-user korzystam od dłuższego czasu z dwóch monitorów i ustawiałem je zawsze sobie w pionie: laptop (bo lubię pisać na jego klawiaturze) i nad nim duży &quot;główny&quot; monitor.</p> <p>Z jakiegoś powodu pionowe ułożenie monitorów w Unity nie jest dobrze wspierane: a to nie da się przenieść okienka, a to maksymalizacja działa nie tak jak trzeba, a to po jakiejś operacji na oknie, wywalają się dekoracje okien, a to restartuje się Xorg. Pięknie! No to ułóżmy monitory w poziomie. Ale moment, przecież dok będzie zawsze po lewej stronie. Tylko na którym monitorze? Mam nadzieję, że na lewym. No ale wolałbym mieć mały monitor po lewej stronie, a dok na większym. Ok, dało się ustawić, tylko teraz znowu nie można przenosić okienek na mały monitor. Brrrrr. Najbardziej dostosowywalny i dostępny system na świecie (GNU/Linux) właśnie rządzi układem monitorów na moim biurku. Świetnie!</p> <p>Ale do rzeczy. W ostatniej wersji Ubuntu (którą instalowałem moim rodzicom) jak się okazało w ogóle nie przewidziano sesji &quot;Ubuntu classic &#8212; no effects&quot;). Środowisko GNOME trzeba doinstalować ręcznie. Po raz kolejny gratulacje.</p> <p>Powiem głośno: <strong>Unity NIE jest jeszcze użyteczne dla normalnego użytkownika</strong>. Jest nieintuicyjne i przeczy wszystkim przyzwyczajeniom użytkowników. Interfejs jest nieczytelny. Nawet dla ludzi niestykających się dotąd z komputerami. GNOME czy XFCE jest bardziej zrozumiały niż to Unity.</p> <p>Następna rzecz. Ekipa Ubuntu testuje obecnie mechanizm przeszukiwania menu aplikacji. Zamiast kliknąć menu &quot;Edycja&quot; a następnie &quot;Skopiuj&quot;, będziemy mogli nacisnąć Alt, napisać &quot;Skopiuj&quot; i dostaniemy listę akcji dostępnych przez menu aplikacji z tekstem &quot;Skopiuj&quot; w tym &quot;Edycja &gt; Skopiuj&quot;. Jakże przydatne, prawda? Idealnie wpisuje się to w trend upraszczania aplikacji, tak, aby aplikacja mając trzy guzikami i jedno menu rozwijane z czterema następnymi akcjami była jak najbardziej zrozumiała i użyteczna. Na pewno w gąszczu tych 7-miu akcji będę wolał nacisnąć Alt i wpisać co chcę zrobić zastanawiając się jeszcze, czy mam napisać to po polsku, czy po angielsku i czy użyć słowa &quot;Wydrukuj&quot;, czy &quot;Drukuj&quot; (bo jeszcze tłumacze się nie dogadali jakiego aspektu używać).</p> <p>Pewnie zastanawiacie się jaką bym widział przyszłość dla Ubuntu, gdybym nim kierował? Na pewno nie, ale i tak napiszę. Ubuntu nie powinno na siłę tworzyć jakichś nowych ULTRA-innowacyjnych rozwiązań, które pewnie są w zamierzeniu dobre, ale zrozumiemy to dopiero, gdy zaimplementuje je np. Apple. Ubuntu powinno właśnie dobierać to co już istnieje, filtrować i ulepszać. Powinno położyć kres niedopracowanym projektom jak Unity czy GNOME 3 i przeznaczać kasę i czas deweloperów na szlifowanie UI, tak aby korzystanie z Linuksa było naprawdę proste dla zwykłego użytkownika.</p> <p>Istnieją też ciekawe wyzwania (no bo tamto wyżej przyznam brzmi nudnie). Ubuntu mogłoby zaoferować możliwość uruchamiania aplikacji Androidowych. Byłby to super ruch, powieważ wtedy Ubuntu stałoby się idealnym systemem na wszelakie tablety, netbooki i inne mini-komputery.</p> <p>Wyobraź sobie: możesz sobie korzystać z Androidowych aplikacji, a kiedy trzeba uruchamiasz sobie najnormalniejszego Gedita, Eclipse'a, Pidgina czy Firefoksa, drukujesz na normalnej drukarce przez USB, wystawiasz serwer FTP albo grasz w Open Arenę.</p> <p>Technicznie odpalanie Androidowych aplikacji na Linuksie jest możliwe, nawet całkiem. Wystarczy uruchomić wirtualną maszynę DalvikVM a w niej aplikacje APK. Aby działały, trzeba dostarczyć implementację biblioteki standardowej Androida (np. metody interfejsu użytkownika). Można nawet się pokusić o obsługę JNI (czyli APK-ów z fragmentami skompilowanymi do kodu natywnego) z wykorzystaniem QEmu i scratchboksa, aby móc swobodnie mieszać kod dla ARM i x86/amd64.</p> <p>Skoro się da, to czemu nikt tego nie zrobił? Nikomu się nie chce? A może ktoś jest zbyt zadufany i nie będzie robił takich ustępstw w stronę &quot;wrogiej&quot; technologii? Nie mi oceniać. Mi tylko żal, wiedząc, że rozwiązanie jest tuż za rogiem, że nikomu na tym nie zależy.</p> <p>Na koniec w związku z tym, że narzekam na domyślnie skonfigurowane Ubuntu podam jak wygląda (na dzień dzisiejszy) Ubuntu, które poleciłbym z czystym sercem znajomym:</p> <ul> <li>Baza: Xubuntu, czyli Ubuntu z XFCE zamiast Unity</li> <li>Przeglądarka: Firefox (bo Chrome jest zbyt Google'owy)</li> <li>Klient poczty: Claws-mail (ewentualnie Thunderbird)</li> <li>Komunikator: Pidgin (żaden Empathy nie ma szans dorównać prostotą i po prostu dobrością Pidgina) + wtyczka libnotify do ładnych dymków z wiadomościami</li> <li>Panel: mały panel XFCE z godziną i systrayem (czytaj o tym później)</li> <li>Panel2: Docky z listą aplikacji (polecam bardzo ten dok) a'la Unity, ale zrobiony mniej inwazyjnie, no i można go przesuwać :P</li> <li>Docky potrafi komunikować zdarzenia takie jak przyjście nowego maila, albo nowej wiadomości, jeśli tylko aplikacja ustawi swojemu oknu hinta &quot;URGENT&quot;. W claws-mailu jak i w pidginie są do tego odpowiednie ustawienia bądź wtyczki</li> </ul> <p>Taki system działa naprawdę miodnie, jest szybciutki i zrozumiały dla normalnego usera. Jednocześnie nie zmusza go do zrozumienia jakichś skomplikowanych konceptów i po prostu działa. I tak powinno wyglądać Ubuntu.</p> <p>Boli mnie konieczność posiadania systraya. Uważam, że jego funkcjonalność <strong>da się</strong> wkomponować w dok (który już potrafi łączyć pasek ze skrótami do aplikacji z listą uruchomionych aplikacji).</p> <p>Zarówno Unity jak i Docky (i inne doki też) potrafią wyświetlać na ikonce danej aplikacji np. ilość nieprzeczytanych wiadomości, jak również wyświetlać customowe opcje w menu ikonki w doku. Jeden i drugi ma do tego specjalne API i to jest bardzo słabe, bo wymaga instalowania dodatku bądź do doku, bądź do aplikacji, a przecież nie o to chodzi.</p> <p>Nie od tego jest FreeDesktop.org, żeby każdy programik robił swoje API. Jest potrzeba takiego API &#8212; trzeba je ustalić, choćby jakiegoś drafcika, żeby już było wiadomo w jaką stronę to wszystko zmierza, a nie czekać aż już będzie ich 10 (w dowolnie wybranym systemie pozycyjnym). Jest API do śmietnika, jest do miniaturek, niech będzie też do menu doka.</p> <p>I tak powinno działać Ubuntu. Powinno patrzyć co jest potrzebne, żeby standardowy Linuksowy desktop był bardziej użyteczny i to urzeczywistniać. Pracując z FDO i wypracowując standardowe rozwiązania zamiast narzucać swoje.</p> <p>Amen.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:bash-http-server-evolves</guid>
				<title>BASH HTTP server evolves</title>
				<link>http://piotr.gabryjeluk.pl/dev:bash-http-server-evolves</link>
				<description>

&lt;p&gt;Some time ago, mainly for fun I created &lt;a href=&quot;http://piotr.gabryjeluk.pl/www-server-in-100-lines-bash-script&quot;&gt;a HTTP server in just BASH and netcat&lt;/a&gt;. The aim was to instantly and simply share files between computers in local network with a one-line command:&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;pre&gt;
&lt;code&gt;quake@vaio /home/quake/files $ http_server.sh 8000&lt;/code&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And voila, the files in directory /home/quake/files are accessible via a web browser (or a wget command) on every computer in local network.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 31 Jan 2012 18:34:37 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Some time ago, mainly for fun I created <a href="http://piotr.gabryjeluk.pl/www-server-in-100-lines-bash-script">a HTTP server in just BASH and netcat</a>. The aim was to instantly and simply share files between computers in local network with a one-line command:</p> <div class="code"> <pre> <code>quake@vaio /home/quake/files $ http_server.sh 8000</code> </pre></div> <p>And voila, the files in directory /home/quake/files are accessible via a web browser (or a wget command) on every computer in local network.</p> <div class="content-separator" style="display: none:"></div> <p>Some time ago I learned I can achieve the same effect using simple Python one-liner:</p> <div class="code"> <pre> <code>python -m SimpleHTTPServer</code> </pre></div> <p>This work for standard Python 2.x installations, for Python 3.x even simpler:</p> <div class="code"> <pre> <code>python -m http.server</code> </pre></div> <p>No need for custom scripts, netcat or other fancy stuff, you need just a standard Python installation and it works ;-).</p> <p>But recently I faced a challenge of copying many gigabytes of files over network. Copying files over SSH was too slow (data is copied from an ARM machine, not really blazing fast at encryption stuff). I tried to copy files over FTP, but I failed at configuring read-write FTP server in limited time. I wanted to avoid configuring other fancy file servers like Samba/CIFS. I could use NFS, which is both simple to configure and fast enough, but I decided to go more fancy.</p> <p>I took my old <strong>http_server.sh</strong>, tweaked it a bit (including replacing lame <tt>cat &quot;$file&quot; | wc -c -</tt> with <tt>stat -c %s</tt> to determine file size and replacing <tt>gawk</tt> with <tt>awk</tt> in the script) and then created a specialised version of it: <strong>tar_server.sh</strong>.</p> <p>tar_server.sh is a HTTP server based on http_server.sh that shows you list of directories inside of directory it was run from and allows you to download the directories as tar files. It does the taring on the fly, so you don't waste the disk space.</p> <p>It's as simple as:</p> <div class="code"> <pre> <code>quake@vaio /home/quake/files $ tar_server.sh 8000</code> </pre></div> <p>Then you can see the list of tar files to download at <a href="http://your_ip:8000/">http://your_ip:8000/</a> . Suppose you have a directory /home/quake/files/backup. You can download it on some other machine using:</p> <div class="code"> <pre> <code>quake@other-machine /home/someuser/files $ wget http://your_ip:8000/backup.tar</code> </pre></div> <p>Or to unpack on the fly:</p> <div class="code"> <pre> <code>quake@other-machine /home/someuser/files $ wget http://your_ip:8000/backup.tar -O - | tar -x</code> </pre></div> <p>This way you can mirror part of your filesystem with almost no dedicated tools. The script is quite OS-independent and requires only netcat, awk, tar and stat commands, that are likely to found in any Unix-like systems.</p> <p>Also the script proves BASH is still very useful tool and adapting simple scripts is easy and FUN :-).</p> <p>Remember, the scripts (just like original version) can handle only one client at once, so if you want to do parallel stuff, you need to launch more of them on different port each.</p> <p>Here are the scripts:</p> <h2><span>http_server.sh:</span></h2> <div class="collapsible-block"> <div class="collapsible-block-folded"><a class="collapsible-block-link" href="javascript:;">+&nbsp;show&nbsp;block</a></div> <div class="collapsible-block-unfolded" style="display:none"> <div class="collapsible-block-unfolded-link"><a class="collapsible-block-link" href="javascript:;">–&nbsp;hide&nbsp;block</a></div> <div class="collapsible-block-content"> <div class="code"> <pre> <code>#!/bin/bash function debug { local severity=&quot;$1&quot; shift local message=&quot;$@&quot; echo -n &quot;`date -u`&quot; 1&gt;&amp;2 echo -ne '\t' 1&gt;&amp;2 echo -n &quot;$severity&quot; 1&gt;&amp;2 echo -ne '\t' 1&gt;&amp;2 echo &quot;$message&quot; 1&gt;&amp;2 } function fix_path { echo -n &quot;$1&quot; | head -n 1 | sed 's|^[/.]*||' | sed 's|/\.*|/|g' } function serve_dir { local dir=&quot;`fix_path &quot;$1&quot;`&quot; if [ &quot;$dir&quot; = &quot;&quot; ]; then dir=&quot;./&quot; fi echo 'HTTP/1.1 200 OK' echo 'Content-type: text/html;charset=UTF-8' echo echo LISTING &quot;$dir&quot; echo '&lt;br/&gt;' ls -p &quot;$dir&quot; | sed -e 's|^\(.*\)$|&lt;a href=&quot;/'&quot;$dir&quot;'\1&quot;&gt;\1&lt;/a&gt;&lt;br/&gt;|' } function serve_file { local file=&quot;`fix_path &quot;$1&quot;`&quot; echo 'HTTP/1.1 200 OK' echo 'Content-type: application/x-download-this' echo 'Content-length: '&quot;`stat -c %s &quot;$file&quot;`&quot; echo debug INFO serving file &quot;$file&quot; cat &quot;$file&quot; } function process { local url=&quot;`awk '{print $2}' | head -n 1`&quot; case &quot;$url&quot; in */) debug INFO Processing &quot;$url&quot; as dir serve_dir &quot;$url&quot; break ;; *) debug INFO Processing &quot;$url&quot; as file serve_file &quot;$url&quot; ;; esac } function serve { local port=&quot;$1&quot; local sin=&quot;$2&quot; local sout=&quot;$3&quot; while debug INFO Running nc; do nc -l -p &quot;$port&quot; &lt; &quot;$sin&quot; &gt; &quot;$sout&quot; &amp; pid=&quot;$!&quot; debug INFO Server PID: &quot;$pid&quot; trap cleanup SIGINT head -n 1 &quot;$sout&quot; | process &gt; &quot;$sin&quot; trap - SIGINT debug INFO Killing nc kill &quot;$pid&quot; done debug INFO Quiting server } function cleanup { debug INFO Caught signal, quitting... rm -Rf &quot;$tmp_dir&quot; exit } tmp_dir=&quot;`mktemp -d -t http_server.XXXXXXXXXX`&quot; sin=&quot;$tmp_dir&quot;/in sout=&quot;$tmp_dir&quot;/out pid=0 port=&quot;$1&quot; mkfifo &quot;$sin&quot; mkfifo &quot;$sout&quot; debug INFO Starting server on port &quot;$port&quot; serve &quot;$port&quot; &quot;$sin&quot; &quot;$sout&quot;</code> </pre></div> </div> </div> </div> <h2><span>tar_server.sh:</span></h2> <div class="collapsible-block"> <div class="collapsible-block-folded"><a class="collapsible-block-link" href="javascript:;">+&nbsp;show&nbsp;block</a></div> <div class="collapsible-block-unfolded" style="display:none"> <div class="collapsible-block-unfolded-link"><a class="collapsible-block-link" href="javascript:;">–&nbsp;hide&nbsp;block</a></div> <div class="collapsible-block-content"> <div class="code"> <pre> <code>#!/bin/bash function debug { local severity=&quot;$1&quot; shift local message=&quot;$@&quot; echo -n &quot;`date -u`&quot; 1&gt;&amp;2 echo -ne '\t' 1&gt;&amp;2 echo -n &quot;$severity&quot; 1&gt;&amp;2 echo -ne '\t' 1&gt;&amp;2 echo &quot;$message&quot; 1&gt;&amp;2 } function fix_path { echo -n &quot;$1&quot; | head -n 1 | sed 's|^[/.]*||' | sed 's|/\.*|/|g' } function serve_dir { echo 'HTTP/1.1 200 OK' echo 'Content-type: text/html;charset=UTF-8' echo find -type d -mindepth 1 -maxdepth 1 | sed -e 's|^\./||' -e 's|^\(.*\)$|&lt;a href=&quot;/\1.tar&quot;&gt;\1.tar&lt;/a&gt;&lt;br/&gt;|' } function serve_file { echo 'HTTP/1.1 200 OK' local file=&quot;`fix_path &quot;$1&quot;`&quot; local dir=&quot;`echo &quot;$file&quot; | sed 's/\.tar$//'`&quot; debug INFO serving tarred dir &quot;$dir&quot; echo 'Content-type: application/x-tar' echo tar -c &quot;$dir&quot; } function process { local url=&quot;`awk '{print $2}' | head -n 1`&quot; case &quot;$url&quot; in /) debug INFO Processing &quot;$url&quot; as dir serve_dir &quot;$url&quot; break ;; *) debug INFO Processing &quot;$url&quot; as file serve_file &quot;$url&quot; ;; esac } function serve { local port=&quot;$1&quot; local sin=&quot;$2&quot; local sout=&quot;$3&quot; while debug INFO Running nc; do nc -l -p &quot;$port&quot; &lt; &quot;$sin&quot; &gt; &quot;$sout&quot; &amp; pid=&quot;$!&quot; debug INFO Server PID: &quot;$pid&quot; trap cleanup SIGINT head -n 1 &quot;$sout&quot; | process &gt; &quot;$sin&quot; trap - SIGINT debug INFO Killing nc kill &quot;$pid&quot; done debug INFO Quiting server } function cleanup { debug INFO Caught signal, quitting... rm -Rf &quot;$tmp_dir&quot; exit } tmp_dir=&quot;`mktemp -d -t http_server.XXXXXXXXXX`&quot; sin=&quot;$tmp_dir&quot;/in sout=&quot;$tmp_dir&quot;/out pid=0 port=&quot;$1&quot; mkfifo &quot;$sin&quot; mkfifo &quot;$sout&quot; debug INFO Starting server on port &quot;$port&quot; serve &quot;$port&quot; &quot;$sin&quot; &quot;$sout&quot;</code> </pre></div> </div> </div> </div> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:reklamacja-wg-htc</guid>
				<title>Reklamacja wg HTC</title>
				<link>http://piotr.gabryjeluk.pl/dev:reklamacja-wg-htc</link>
				<description>

&lt;p&gt;Jak część z moich czytelników już wie, ekran LCD w moim HTC Desire rozlał się, ot tak, bez wyraźnej przyczyny. Rano działał, by po pół godzinie nagle pęknąć i się rozlać. Smutek, ale przecież od tego jest reklamacja, aby takie sprawy rozwiązać. Postanowiłem więc ową usterkę na gwarancji oddać.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 15 Nov 2011 20:36:00 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Jak część z moich czytelników już wie, ekran LCD w moim HTC Desire rozlał się, ot tak, bez wyraźnej przyczyny. Rano działał, by po pół godzinie nagle pęknąć i się rozlać. Smutek, ale przecież od tego jest reklamacja, aby takie sprawy rozwiązać. Postanowiłem więc ową usterkę na gwarancji oddać.</p> <div class="content-separator" style="display: none:"></div> <p>Na początku się nieco wahałem, bo jak to wynika z mojego doświadczenia związanego z reklamowanymi produktami, producent zawsze stara się winę zrzucić na użytkownika. Jednak pomyślałem, że skoro firma jest niepolska, to pewnie ma wyższe standardy traktowania klienta, co zresztą potwierdził krótki research w internecie dotyczący wymiany pękniętych ekranów LCD w telefonach tejże firmy na gwarancji, z którego wynikało, że o ile faktycznie nie było w usterce winy klienta, to ową wymianę przeprowadzają.</p> <p>Zadzwoniłem na hot-line HTC, gdzie opisałem sprawę. Wpierw zaproponowano mi restart ustawień telefonu, no ale co zrobić &#8212; procedury &#8212; tak samo w Netii zawsze mówili, żeby sprawdzić ustawienia Firewalla Windowsa, nawet jeśli dokładnie opisuję pomiędzy którymi routerami brzegowymi wg traceroute'a giną moje pakiety ;-). No nic, wyjaśniłem, że jestem świadomy, że to usterka mechaniczna, a nie softowa i już się nie upierali przy tym resecie ;-).</p> <p>Potem poproszono mnie o wykonanie zdjęć ekranu, co uznałem za dobry znak &#8212; ktoś faktycznie przejmuje się moim losem i chce się zająć moim smutnym telefonem. Wykonałem zdjęcia, przesłałem i po niedługim czasie dostałem info, że mogą mi załatwić transport do serwisu, gdzie zostanie rozpatrzona gwarancja. Jeśli uszkodzenie wynikło z mojej winy (a wiem najlepiej, że nie), to będę musiał jednak pokryć koszty kuriera. W tym momencie robi się nieco niemiło, bo brzmi to jak typowy zniechęcacz klientów. Na pewno sporo ludzi się wystraszy ewentualnych kosztów, bo przecież nigdy nie wiadomo, czy producent reklamację rozpatrzy pozytywnie, czy nie.</p> <p>No ale w moim przypadku nie ma się czego bać. Uszkodzenie wyraźnie nie było z mojej winy, skoro nawet tego telefonu w czasie gdy nastąpiło nie dotykałem, więc poprosiłem o zamówienie kuriera. Przygotowałem z 6 kartek różnych dokumentów (opis uszkodzenia, kartę zgłoszenia sprawy &#8212; co ciekawe wysłane w formacie TIFF &#8212; i kartę adresową dla kuriera), zawinałem telefon w bąbel folię i zostawiłem Marcie, aby przekazała tę paczuszkę kurierowi.</p> <p>Nie ukrywam, że byłem ciekawy rozwoju sytuacji. Od dzisiaj mam dzięki kumplowi zastępczy telefon, ale jego milczenie podpowiedziało mi, że jeszcze sobie poczekam na jakąś odpowiedź. Jednak po powrocie do domu znalazłem na mailu informację z serwisu. Jednak szybka reakcja. Niestety wiadomość, którą dostałem to ani przyjęcie do serwisu, ani odpowiedź na zgłoszenie gwarancyjne, a kosztorys naprawy! WTF??!?!?!?! Trochę mnie zlewa ile kosztuje naprawa, bo ma za nią zapłacić producent, tak?</p> <p>Dodatkowo proszą o wypełnienie danych do faktury i w przypadku nieodpowiedzenia w ciągu dni zastrzegają prawo do obciążenia kosztami. No i tu się robi chamsko.</p> <p>Postanowiłem zadzwonić do HTC i wyjaśnić sprawę. Mówię o co biega, że wysłałem na gwarancji a dostałem kosztorys naprawy do zaakceptowania zamiast decyzji o rozpatrzeniu gwarancji i, że nie było to najmilsze. W infolinii dostałem informację, że skoro dostałem kosztorys to &quot;na pewno&quot; technicy sprawdzili telefon i &quot;zgodnie z wytycznymi firmy HTC&quot; przebadali telefon i stwierdzili, że uszkodzenie mechaniczne zaistniało z mojej winy. To dość daleko idąca dedukcja.</p> <p>Potem nastąpiła wymiana poglądów na temat pęknięć ekranów LCD (&quot;one NIGDY nie pękają same&quot;, ciekawe, a mój niby to co?), później na temat poinformowania mnie na temat kosztów kuriera. Rozmowa prawie nie miała końca, ale ja swoje, oni swoje.</p> <p>Kilka faktów:</p> <ul> <li>Pan, który pracuje w HTC &quot;od wielu lat&quot; jest pewien, że ekrany LCD &quot;NIGDY nie pękają same&quot;</li> <li>Pani, która pracuje z tamtym Panem, która mi załatwiła kuriera dostała zdjęcia telefonu oraz jednoznaczną informację, że ekran LCD jest pęknięty i rozlany</li> <li>ta sama Pani, miała wyraźną informację, że interesuje mnie wyłącznie wymiana ekranu na gwarancji producenta</li> <li>Pani poinformowała mnie, że JEŚLI zostanie stwierdzone, że uszkodzenie nastąpiło z mojej winy, to będę musiał zapłacić za kuriera</li> </ul> <p>Teraz zgodnie (mam nadzieję) z logiką i zdrowym rozsądkiem:</p> <ol> <li>Telefon ma pęknięty LCD, o czym Państwo HTC wiedzą</li> <li>Skoro ekrany LCD nigdy nie pękają same, to wiadomo, że pęknięcie nastąpiło z mojej winy</li> <li>Chcę telefon oddać na gwarancji, ale skoro usterka jest z mojej winy, to wiadomo, że gwarancja będzie odrzucona</li> <li>Jeśli gwarancja będzie odrzucona, to nie ma sensu proponować kuriera z zastrzeżeniem, że zostanę obciążony kosztami JEŚLI to będzie moja wina. Oni już wiedzą, że jest to moja wina, więc od razu wiedzą, że będę musiał zapłacić za kuriera, czego nie chcę, skoro telefon chcę reklamować, a nie naprawić na swój koszt.</li> </ol> <p>To dlaczego to robią? Naciąganie klienta na koszty? Brak komunikacji w zespole? A może jednak każdy element ma z jakimś prawdopodobieństwem pęknąć, więc faktycznie gwarancja może być rozpatrzona pozytywnie &#8212; ale wtedy mówienie z całą pewnością, że ekrany LCD nie pękają jest bardzo nieprofesjonalne i nierzetelne.</p> <p>Może miałem tylko pecha, ale wkurwienie na firmę zostanie i mój następny smartfon to już nie będzie HTC (którego musiałbym szczerze polecić, gdyby nie ten incydent).</p> <p>Przypomina mi się też jeden raport na temat polskich sprzedawców i kupujących. O ile kupujący w Polsce są jednymi z najuczciwszych na świecie, to sprzedający na każdym kroku kantują kupującego. Ile razy już czytałem o tym, aby omijać polskie oddziały firm z daleka. A ile razy słyszałem o przypadkach dobrego traktowania klienta? Mnóstwo, ale nigdy w Polsce. A mówię o rekompensowaniu wadliwych laptopów PO gwarancji (Sony), wysyłanie baterii do telefonów komórkowych kurierem do domu klienta BEZ konieczności wysyłania dowodu zakupu (chyba Nokia), wymiana sprzętu wyraźnie uszkodzonego przez klienta łącznie z pokryciem kosztów przesyłki (bez konieczności przedstawienia dowodu, że faktycznie tyle to kosztowało) uszkodzonego urządzenia do US czy UK (Amazon).</p> <p>I przypomina mi się jak raz kupiłem sobie laptopa sprowadzonego z US, wiedząc, że w ramach usterki nie mam żadnej gwarancji. Wtedy stwierdziłem, że szansa, że coś się faktycznie stanie jest niewielka, a ta gwarancja w Polsce jest gówno warta, bo w Polsce zawsze wpierają, że usterka jest winą klienta. Dzisiaj się jeszcze bardziej utwierdziłem w tym przekonaniu.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:wiesci-z-pyrlandii</guid>
				<title>Wieści Z Pyrlandii</title>
				<link>http://piotr.gabryjeluk.pl/dev:wiesci-z-pyrlandii</link>
				<description>

&lt;p&gt;Blog prawie umarł, więc czas tchnąć weń nieco życia.&lt;/p&gt;
&lt;p&gt;Pomimo różnych plotek, wciąż pracuję w Grupie Allegro, ale już nie nad samym serwisem Allegro.pl (te ostatnie przerwy w działaniu, to więc wyraźnie nie moja robota), tylko nad ciekawym nowym tajnym sajtem, o którym opowiem może tochę więcej jak tylko wystartuje. Na razie nie chcemy go zbytnio rozgłaszać.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 08 Nov 2011 19:10:32 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Blog prawie umarł, więc czas tchnąć weń nieco życia.</p> <p>Pomimo różnych plotek, wciąż pracuję w Grupie Allegro, ale już nie nad samym serwisem Allegro.pl (te ostatnie przerwy w działaniu, to więc wyraźnie nie moja robota), tylko nad ciekawym nowym tajnym sajtem, o którym opowiem może tochę więcej jak tylko wystartuje. Na razie nie chcemy go zbytnio rozgłaszać.</p> <div class="content-separator" style="display: none:"></div> <p>Obecnie jestem trochę chory, więc będę pewnie kilka dni siedział/leżał w łóżku, co powinno mi dać trochę czasu na zapoznanie się z ciekawymi rzeczami dziejącymi się wokół frameworka Symfony, który jest ostatnio obiektem moich fascynacji. Wychodzi na to, że wszystko co pochodzi od Fabiena Potenciera jest świetne i przenosi to co dotychczas było zarezerwowane dla &quot;fajnych&quot; języków programowania wprost do PHP. Czasem nawet jest to zrobione fajniej niż w oryginale.</p> <p>Weźmy taki microframework Silex. Pozwala stworzyć aplikację WWW w jednym pliku (jeśli w PHP 5.4 faktycznie znajdziemy wbudowany serwer HTTP, to już w ogóle będzie super wygodne rozwiązanie). Silex jednak jest bardzo rozszerzalny i modularny, co sprawia, że może być ciekawym rozwiązaniem nie tylko na malutkie projekty ale i te trochę większe, a może i całkiem duże. Taki framework nie narzucający zbyt wiele konwencji może być fajny dla nowego nietypowego projektu.</p> <p>Kolejna moja ostatnia fascynacja to MongoDB. Jest to fajna rzecz w czasach, gdzie duże projekty oparte o bazy SQL-owe shardują dane na kilka różnych baz danych i celowo rezygnują z kluczy obcych i transakcji, żeby zyskać na wydajności. Ponadto często w pracy z relacyjną bazą danych denerwująca jest konieczność ustalania z góry kolumn, które mają się znaleźć w tabelach. Często po prostu chcemy w bazie danych zachować obiekty, które mają różne właściwości, których nawet nie znamy na początku rozwoju projektu. Dodawanie kolumn do tabel zwykle nie jest szybką operacją, a może być wręcz operacją blokująca, co jest najgorszą możliwą sytuacją, gdy mamy już całkiem sporo danych w tabeli.</p> <p>MongoDB zostało owrapowane w całkiem fajny mechanizm (DocumentManger) we wtyczce dla Doctrine. Podejście do obiektów jest tam podobne jak w Javowym db4o. Dla projektów w Symfonowy wsparcie Doctrine dla MongoDB jest dostępne jako bundle &#8212; jedną z paczek, z których składa się aplikacja (kod który piszemy w ramach aplikacji &#8212; kontrolery, widoki itd. też jest bundlem).</p> <p>Generalnie trzeba powiedzieć, że w PHP i okolicach zrobiło się ostatnio całkiem ciekawie. Numerki 5.3 i 5.4 wniosły podobny powiew świeżości do tego języka co zmiana 4-ki na 5-kę. Coraz częściej spotyka się różne biblioteki działające tylko z wersją 5.3+, np. świetna biblioteka Imagine do obsługi obrazków wzorowana na Pythonowym PIL.</p> <p>To chyba na tyle przynudzania. Jak coś jeszcze ciekawego wymyślę, to napiszę :P. Pozdro.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:carrefour-i-ceny-za-litr</guid>
				<title>Carrefour a ceny za litr</title>
				<link>http://piotr.gabryjeluk.pl/dev:carrefour-i-ceny-za-litr</link>
				<description>

&lt;p&gt;Carrefour ma duże problemy z arytmetyką. Rzućcie okiem na ceny za litr:&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 21 Aug 2011 17:38:23 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Carrefour ma duże problemy z arytmetyką. Rzućcie okiem na ceny za litr:</p> <div class="content-separator" style="display: none:"></div> <div class="gallery-box" id="gallery-box-203816"> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0332.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0332.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0333.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0333.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0334.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0334.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0335.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0335.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0336.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0336.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0337.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0337.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0338.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0338.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0339.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0339.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0340.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:carrefour-i-ceny-za-litr/IMAG0340.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> </div> <p>Zdjęcia zrobione w Poznańskim Carrefourze w Centrum Handlowym Pestka. List elektroniczny do PIH wysłany, bo niestety obsługa wolała mi zwracać uwagę, że nie można robić zdjęć w sklepie zamiast mnie normalnie wysłuchać.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:pierwsze-dni-w-poznaniu</guid>
				<title>Pierwsze Dni W Poznaniu</title>
				<link>http://piotr.gabryjeluk.pl/dev:pierwsze-dni-w-poznaniu</link>
				<description>

&lt;p&gt;Nowe miasto, nowi ludzie, nowa praca, nowe wyzwania&amp;#8230;&lt;/p&gt;
&lt;p&gt;Zacznę od idiotycznych rzeczy. Po godzinie 20-ej w mieście zapada zmrok. A latarnie uliczne nie świecą. Dlaczego? Cholera wie.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 06 Jul 2011 19:13:24 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Nowe miasto, nowi ludzie, nowa praca, nowe wyzwania&#8230;</p> <p>Zacznę od idiotycznych rzeczy. Po godzinie 20-ej w mieście zapada zmrok. A latarnie uliczne nie świecą. Dlaczego? Cholera wie.</p> <div class="content-separator" style="display: none:"></div> <p>Druga rzecz &#8212; przejazdy tramwajowe &#8212; niektóre są tak fatalne, że przejeżdżając przez nie z prędkością 30&#160;km/h wybijamy sobie zęby (a przez skrzyżowanie można teoretycznie przejechać z prędkością 70&#160;km/h, bo większość dwupasmówek w Poznaniu ma podniesioną dozwoloną prędkość).</p> <p>Następnie, egoistyczni kierowcy &#8212; ostatnio byłem świadkiem przejazdu karetki pogotowia typu S na sygnale przez skrzyżowanie. Światło dla karetki: czerwone. W poprzek przejechały przed karetką dwa samochody &#8212; powiedzmy, że niebezpiecznie byłoby im się zatrzymywać, więc przejechały, po tych dwóch jakiś kierowca z zacięciem rajdowca, pseudosportową Renówką Clio docisnął gaz do dechy i opuścił skrzyżowanie (pomimo początkowo sporego dystansu do pierwszej pary aut) zaraz po tych feralnych dwóch. Myślałem, że karetka już przejedzie, ale nie, z dynamiką wozu z węglem przez skrzyżowanie w poprzek drogi karetki przetacza się jeszcze duże czarne BMW. Karetka przejeżdża dopiero za nim. O ile dobrze kojarzę karetka S jest pierwszą wysyłaną w razie nagłego wypadku, jeśli nie ma dostępnej karetki R. Ta konkretna karetka mogła więc jechać w celu ratowania życia. Gratulacje dla Poznańskich kierowców (dodam, że karetki SĄ słyszalne z daleka, nie wyskakują nie wiadomo skąd). Podobna sytuacja ostatnio ze strażą pożarną. Korek przez który przeciska się straż pożarna. Kierowcy starają się zjechać &quot;w jodełkę&quot; na boki oprócz autobusu wycieczkowego (bo po co) i Renault Clio (jakaś zła passa?) stojącego przede mną (no bo krawężnik był wysoki, więc po co się kłopotać). Pojazd straży ruszył dopiero po włączeniu się zielonego światła i lekkim rozluźnieniu się pasów.</p> <p>Do grupy kierowców kieruję także następne zażalenie: nieużywanie kierunkowskazów. Rozumiem, że nie zawsze ma się ochotę przesunąć palcem manetkę o te parę centymetrów, ale jeśli zamierzasz przejechać mi 20&#160;cm przed maską zmieniając pas ze skrajnie lewego na skrajnie prawy, to chociaż mignij mi kierunkiem, żebym miał chociaż jakąkolwiek szansę przewidzieć Twój manewr.</p> <p>I jeszcze jedno, na ogół kierowcy są życzliwi, zmiana pasa nie stanowi żadnego problemu, włączenie kierunkowskazu powoduje niemal natychmiastowe wytworzenie się luki, którą dla zachowania płynności ruchu od razu zajmuję, jednak ostatnio pomimo prawie dojechania do końca kończącego się pasa i trzymania włączonego kierunkowskazu przez cały ten odcinek musiałem dosłownie się wpychać na sąsiedni pas i jeszcze zostałem strąbiony. Ech.</p> <p>Teraz trochę przyjemniej. Budynek, w którym aktualnie pracuję jest całkiem przyjemny, miejsce jest fajnie i naturalnie oświetlone, praca z dużym projektem całkiem dużym wyzwaniem (podobnie jak praca w Wikidocie). Dostałem już uprawnienia do prawie wszystkich usług, które muszę wykorzystywać w pracy, komputer również pojawił się na moim biurku i poza drobnostkami, które są w trakcie załatwiania wszystko jest fajnie. Podoba mi się, że w moim dziale mogę swobodnie korzystać z narzędzi, dzięki którym praca jest przyjemna i owocna.</p> <p>Czekam na założenie porządnego Internetu i kablówki. 30 czerwca zacząłem to załatwiać, a dopiero 8 lipca będę miał podłączenie (jak dobrze pójdzie). Trochę sobie lecą w kulki z terminami, no ale co mogę zrobić (dla porównania w Toruniu czas założenia Internetu z Multimediów na starówce to maksymalnie 3 dni robocze). No ale po zasięgnięciu opinii pracowników i Poznaniaków na temat ociągającego się dostawcy, jak również po porównaniu innych ofert, postanowiłem uzbroić się w cierpliwość i poczekać na podłączenie&#8230;</p> <p>W międzyczasie korzystam z Internetu Heyowego (9,08 za &quot;nielimitowany dostęp do Internetu&quot;). Po miłym wspomnieniu wykorzystaniu 1086561666% przyznanego limitu (25&#160;MB/7 dni na próbę za darmo) podczas przeprowadzki do biura na starówce, po przekroczeniu którego prędkość miała spaść do &quot;mniej niż można sobie wyobrazić&quot; kbit/s a nie spadła, zdecydowałem tym razem zakupić pakiet 30-dniowy za te niecałe 10 złotych licząc, że znowu nie przytną przepustowości. Niestety tym razem system obcinania zadziałał już po 120&#160;MB (czyli około 1 dniu korzysztania z netu) i prędkość spadła nawet poniżej tego co przytoczyłem wcześniej. Dodatkowo (co według mnie jest zwykłym chamstwem) Internet przestał być nie tylko szybki ale również polegalny-na (reliable). Połączenia zaczęły się zrywać, nowe połączenia odrzucać a stare stopować na minuty (zamiast po prostu działać baaaaaardzo powoli, co byłoby zgodne z regulaminem i zwykłą kulturą). Na szczęście znalazłem również sposób na poradzenie sobie z tym problemem i zamiast niestabilnego, długo myślącego by potem tylko stimeoutować połączenia, mamy połączenia, które się zrywają dość często, za to już po sekundzie-dwóch od zepsucia. Ponadto łączność jest odzyskiwana w ciągu około sekundy, więc oprócz 2000% większego zużycia klawisza F5 i konieczności wczytywania niektórych stronek po 40 razy, Internet jest w miarę używalny. Tęsknię za stabilnym połączeniem.</p> <p>Kolejna nieciekawa rzecz: jakiś chuj ukradł mi rower z piwnicy starego mieszkania. Mamy pewne podejrzenia z Martą, bo jest niemal pewne, że zrobił to ktoś, kto wiedział o naszej przeprowadzce (oraz wiedział, którą piwnicę okupowaliśmy). Niech mu się jaja wkręcą w łańcuch za świństwo, które zrobił!</p> <p>Pozdro dla ekipy z Torunia!</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:test-na-redundancje-kodu</guid>
				<title>Test na redundancję kodu</title>
				<link>http://piotr.gabryjeluk.pl/dev:test-na-redundancje-kodu</link>
				<description>

&lt;p&gt;Czas na nieco żartobliwy eksperyment&amp;#8230;&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 19 May 2011 10:25:21 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Czas na nieco żartobliwy eksperyment&#8230;</p> <div class="content-separator" style="display: none:"></div> <p>Wpierw liczymy ile jest niepustych i nietrywialnych linii kodu, np.:</p> <div class="code"> <pre> <code>find katalog1 katalog2 -name '*.php' -exec cat '{}' ';' | sed 's/^\s\+//' | sed 's/\s\+$//' | grep -v '^$' | grep -v '^function\|^public\|^protected\|^private\|^class\|static\|^}\|^{\|^?&gt;\|^&lt;?php\|^//\|^\*\|^/\*' | wc</code> </pre></div> <p>Potem liczymy ile jest unikalnych linii w tym co znaleźliśmy:</p> <div class="code"> <pre> <code>find katalog1 katalog2 -name '*.php' -exec cat '{}' ';' | sed 's/^\s\+//' | grep -v '^$' | grep -v '^function\|^public\|^protected\|^private\|^class\|static\|^}\|^{\|^?&gt;\|^&lt;?php\|^//\|^\*\|^/\*' | sort | uniq | wc</code> </pre></div> <p>Dzielimy jedną liczbę przez drugą i uzyskujemy współczynnik redundancji kodu.</p> <p>Należy dostosować kod do danego języka, aby lepiej matchować trywialne linie, które są potrzebne, ale przecież nie świadczą o redundancji kodu.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-natty-on-sony-vaio-sz640</guid>
				<title>Ubuntu 11.04 (Natty) on Sony Vaio SZ640</title>
				<link>http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-natty-on-sony-vaio-sz640</link>
				<description>

&lt;p&gt;As always, when a new Ubuntu release is done, I&#039;m installing in onto my Sony Vaio SZ series laptop and experience some problems, that I later work on and finally fix.&lt;/p&gt;
&lt;p&gt;To let others use this knowledge every half a year a note like this is written onto my blog.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 10 May 2011 16:49:09 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>As always, when a new Ubuntu release is done, I'm installing in onto my Sony Vaio SZ series laptop and experience some problems, that I later work on and finally fix.</p> <p>To let others use this knowledge every half a year a note like this is written onto my blog.</p> <div class="content-separator" style="display: none:"></div> <h1><span>Installation</span></h1> <p>You can read about installation LiveCD issues in a <a href="http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-final">separate blog post</a>. Let's concentrate on things specific to Sony Vaio (mostly the dual-graphics system we have from Sony).</p> <p>Let's just say it's much better to install Ubuntu using the Intel graphics (the graphics-card switch in STAMINA position) card, since it's supported much much better by Linux.</p> <h1><span>Installing nVidia drivers</span></h1> <p>This should be easy, but is not due to a few glitches. Let's get through them step by step:</p> <ol> <li>Have the Ubuntu installed using Intel graphics card (STAMINA mode)</li> <li>Stop the laptop</li> <li>Put the graphics-mode switch to SPEED mode</li> <li>Start the laptop again</li> <li>Wait till you can log in</li> <li>Log in. You won't be able to use the Unity desktop, so classic Ubuntu desktop should be launched (if not, choose &quot;Classic Ubuntu (no effects)&quot; from drop-down list when logging in)</li> <li>Click System &#187; Administration &#187; Additional drivers</li> <li>Choose recommended driver and click enable. This will download and install the nVidia drivers for you.</li> <li>Don't reboot yet. You need to blacklist the nouveau driver (it's the open-source 3D nVidia driver attempt). Do this:<br /> <span class="code-block-inside-li">echo blacklist nouveau | sudo tee /etc/modprobe.d/blacklist-nv.conf</span></li> <li>OK. Now you can reboot. The nvidia driver should kick in and you should have working Unity desktop</li> </ol> <p>One more thing. Intel 3D drivers are now broken, so you won't have the Unity desktop working in there. Let's fix it!</p> <h1><span>Make 3D graphics (and Unity desktop) work in both Intel and nVidia</span></h1> <p>This is basically the same as explained in <a href="http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-final">the previous post</a>, but using separate script (so it's more elegant).</p> <p>Create executable file <tt>/usr/local/bin/detect-gl</tt> :</p> <div class="code"> <pre> <code>sudo touch /usr/local/bin/detect-gl sudo chmod +x /usr/local/bin/detect-gl</code> </pre></div> <p>Edit it:</p> <div class="code"> <pre> <code>sudo gedit /usr/local/bin/detect-gl</code> </pre></div> <p>Put the following into it:</p> <div class="code"> <pre> <code>#!/bin/bash if ls -l /etc/alternatives/gl_conf | grep nvidia; then link=nvidia else link=mesa fi if lspci | grep 'VGA compatible controller: nVidia Corporation'; then hw=nvidia else hw=intel fi if [ &quot;$link&quot; = &quot;nvidia&quot; -a &quot;$hw&quot; = &quot;intel&quot; ]; then update-alternatives --set gl_conf /usr/lib/mesa/ld.so.conf ldconfig killall Xorg fi if [ &quot;$link&quot; = &quot;mesa&quot; -a &quot;$hw&quot; = &quot;nvidia&quot; ]; then update-alternatives --set gl_conf /usr/lib/nvidia-current/ld.so.conf ldconfig killall Xorg fi</code> </pre></div> <p>Call that script from /etc/rc.local (commands from this script are launched on each boot). Open file /etc/rc.local:</p> <div class="code"> <pre> <code>sudo gedit /etc/rc.local</code> </pre></div> <p>before <tt>exit 0</tt> line, put the following line:</p> <div class="code"> <pre> <code>/usr/local/bin/detect-gl</code> </pre></div> <p>Your whole file should look more or less like this:</p> <div class="code"> <pre> <code>#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will &quot;exit 0&quot; on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /usr/local/bin/detect-gl exit 0</code> </pre></div> <p>This script will make sure the proper GL library is used for both graphics cards (Mesa lib for Intel, nVidia lib for nVidia card).</p> <h1><span>Fixing nVidia backlight issues</span></h1> <p>This is the most elegant solution I could think of. As the brightness settings almost work (when you press the Fn-F5, Fn-F6 keys, the notification appears and the bar shows you the backlight changes) we'll use D-Bus to listen for backlight change signal to set the backlight using nvclock command.</p> <p>Install nvclock:</p> <div class="code"> <pre> <code>sudo apt-get install nvclock</code> </pre></div> <p>Now create executable file:</p> <div class="code"> <pre> <code>sudo touch /usr/local/bin/nvidia-brightness-helper.py sudo chmod +x /usr/local/bin/nvidia-brightness-helper.py</code> </pre></div> <p>Edit it:</p> <div class="code"> <pre> <code>sudo gedit /usr/local/bin/nvidia-brightness-helper.py</code> </pre></div> <p>Put the following into it:</p> <div class="code"> <div class="hl-main"> <pre> <span class="hl-comment">#!/usr/bin/env python</span><span class="hl-code"> </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">dbus</span><span class="hl-code">, </span><span class="hl-identifier">gobject</span><span class="hl-code"> </span><span class="hl-reserved">from</span><span class="hl-code"> </span><span class="hl-identifier">subprocess</span><span class="hl-code"> </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">call</span><span class="hl-code"> </span><span class="hl-reserved">from</span><span class="hl-code"> </span><span class="hl-identifier">dbus</span><span class="hl-code">.</span><span class="hl-identifier">mainloop</span><span class="hl-code">.</span><span class="hl-identifier">glib</span><span class="hl-code"> </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">DBusGMainLoop</span><span class="hl-code"> </span><span class="hl-reserved">def</span><span class="hl-code"> </span><span class="hl-identifier">apply_brightness</span><span class="hl-brackets">(</span><span class="hl-identifier">new_brightness</span><span class="hl-brackets">)</span><span class="hl-code">: </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-identifier">new_brightness</span><span class="hl-code"> &lt; </span><span class="hl-number">15</span><span class="hl-code">: </span><span class="hl-identifier">new_brightness</span><span class="hl-code"> = </span><span class="hl-number">15</span><span class="hl-code"> </span><span class="hl-identifier">call</span><span class="hl-brackets">([</span><span class="hl-quotes">'</span><span class="hl-string">nvclock</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-quotes">'</span><span class="hl-string">-S</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-builtin">str</span><span class="hl-brackets">(</span><span class="hl-identifier">new_brightness</span><span class="hl-brackets">)])</span><span class="hl-code"> </span><span class="hl-comment"># only launch when nVidia is present</span><span class="hl-code"> </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-identifier">call</span><span class="hl-brackets">([</span><span class="hl-quotes">'</span><span class="hl-string">bash</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-quotes">'</span><span class="hl-string">-c</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-quotes">'</span><span class="hl-string">lspci | grep &quot;VGA compatible controller: nVidia Corporation&quot; 1&gt;/dev/null</span><span class="hl-quotes">'</span><span class="hl-brackets">])</span><span class="hl-code"> == </span><span class="hl-number">0</span><span class="hl-code">: </span><span class="hl-identifier">dbus</span><span class="hl-code">.</span><span class="hl-identifier">mainloop</span><span class="hl-code">.</span><span class="hl-identifier">glib</span><span class="hl-code">.</span><span class="hl-identifier">DBusGMainLoop</span><span class="hl-brackets">(</span><span class="hl-identifier">set_as_default</span><span class="hl-code">=</span><span class="hl-reserved">True</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">bus</span><span class="hl-code"> = </span><span class="hl-identifier">dbus</span><span class="hl-code">.</span><span class="hl-identifier">SessionBus</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-identifier">bus</span><span class="hl-code">.</span><span class="hl-identifier">add_signal_receiver</span><span class="hl-brackets">(</span><span class="hl-identifier">apply_brightness</span><span class="hl-code">, </span><span class="hl-identifier">dbus_interface</span><span class="hl-code">=</span><span class="hl-quotes">&quot;</span><span class="hl-string">org.gnome.PowerManager.Backlight</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">signal_name</span><span class="hl-code">=</span><span class="hl-quotes">&quot;</span><span class="hl-string">BrightnessChanged</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">loop</span><span class="hl-code"> = </span><span class="hl-identifier">gobject</span><span class="hl-code">.</span><span class="hl-identifier">MainLoop</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-identifier">loop</span><span class="hl-code">.</span><span class="hl-identifier">run</span><span class="hl-brackets">()</span> </pre></div> </div> <p>Now open your <em>Startup programs</em> configuration dialog and add the script to things started when you log in.</p> <h1><span>Fixing suspend</span></h1> <p>I must confess I haven't check the suspend without doing this but suspecting it IS broken like in was in Maverick, I've blacklisted the TPM modules by putting:</p> <div class="code"> <pre> <code>blacklist tpm blacklist tpm_bios blacklist tpm_tis blacklist tpm_infineon</code> </pre></div> <p>into <tt>/etc/modprobe.d/blacklist-tpm.conf</tt> file.</p> <h1><span>Poor 3D performance</span></h1> <p>When running Unity all the 3D games have poor performance. I found the easiest workaround is to log in into <em>Classic Ubuntu (with no effects)</em> desktop, which gives you standard GNOME with no compiz and nice 3D performance for launched apps.</p> <h1><span>Dual-screen issues</span></h1> <p>I'm using a dual-screen setup (laptop's LCD + external monitor connected via VGA port). The current version of Ubuntu has multiple issues with this, especially when aligning the screens in vertical (laptop's screen being the bottom one, big LCD the top one). The &quot;dock&quot; or &quot;launcher&quot; if you wish appears on the wrong screen (the small laptop instead of on the big screen). To fix this do this:</p> <div class="code"> <pre> <code>xrandr --output VGA1 --primary</code> </pre></div> <p>Log out and in again after doing this. Launcher is on top screen now :-).</p> <p>I found another irritating bug: when you plug in a big external monitor into the VGA port, the desktop automatically expands to both monitor (not a bug yet), but on one or both of them, some area is black, so you can't see the menus and windows. Logging out and in is also a workaround for this.</p> <p>When you log in with an external monitor connected, the desktop is strangely stretched and has some artifacts. Interestingly taping Super button (to show the Ubuntu Dash) and Escape (to hide it) refreshes the screen and it looks OK then.</p> <p>It's hard to put some windows on the bottom screen (your mouse pointer stops on the bottom of the top screen while dragging). You can move the windows even further down using Alt and dragging by window content (and not the title bar).</p> <p>Once a window is on the bottom screen, trying to resize it crashes the application and it disappears&#8230; The workaround is to resize by holding Alt key and drag with middle mouse button.</p> <h1><span>Other issues</span></h1> <p>When using Intel graphics card and Unity, Adobe Flash movies (YouTube for example) shows some artifacts. From time to time they also crash the whole X session (I'm not sure why).</p> <p>OK, this would be it. Hope this helps someone.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-final</guid>
				<title>Ubuntu 11.04 final</title>
				<link>http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-final</link>
				<description>

&lt;p&gt;A few weeks after testing &lt;a href=&quot;http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-beta-1&quot;&gt;Ubuntu 11.04 beta 1&lt;/a&gt; which brought me a bit of disappointment, I decided to test the recently released final version of this most popular Linux distribution.&lt;/p&gt;
&lt;p&gt;As I had no more CDs or DVDs, I decided to try booting the distribution from USB drive that I assembled from microSDHC card reader and a microSD 4GB card that I got with my Android phone using standard Ubuntu tool called &amp;quot;Boot disk assistant&amp;quot;, which burns CD ISO file onto a USB drive in a way that it becomes bootable equivalent of the CD with additional option to save the modifications you make to the Live system on the disk itself, so that it becomes more or less persistent.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999391&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 05 May 2011 17:45:25 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>A few weeks after testing <a href="http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-beta-1">Ubuntu 11.04 beta 1</a> which brought me a bit of disappointment, I decided to test the recently released final version of this most popular Linux distribution.</p> <p>As I had no more CDs or DVDs, I decided to try booting the distribution from USB drive that I assembled from microSDHC card reader and a microSD 4GB card that I got with my Android phone using standard Ubuntu tool called &quot;Boot disk assistant&quot;, which burns CD ISO file onto a USB drive in a way that it becomes bootable equivalent of the CD with additional option to save the modifications you make to the Live system on the disk itself, so that it becomes more or less persistent.</p> <div class="content-separator" style="display: none:"></div> <h1><span>LiveUSB creation</span></h1> <p>First I decided to use that option and let the program use about 3&#160;GB for the overlay file. This made the program busy for about a half an hour, the card reader (actually writer) got warm, and the result was the USB was not that bootable.</p> <p>A day after that attempt I decided to give it a try without the persistence and it worked this time. The problem came when I tried to &quot;Try Ubuntu&quot; (in opposite to &quot;Install Ubuntu&quot;). The graphic mode quited and I got nothing in return. I tried multiple things to do in text mode, rebooted a few times and after that it appeared that the graphic mode re-run after about a minute. The CPU was completely idle in this time as was the disk, so this wasn't reasonable thing.</p> <p>Anyways it appeared the release was much more stable than the beta version I tested and it kind of even worked. I found a few concepts useful and cool, so I decided to put the system on my disk to give it a serious try.</p> <h1><span>Having it on disk</span></h1> <p>Automatically detecting an external monitor was the biggest positive surprise for me. This never worked in Ubuntu till now. The downside is the graphics got crazy and displayed desktop in not really usable chunks, but I moved some windows around and it got fixed.</p> <h1><span>nVidia troubles</span></h1> <p>Then I tried booting with nVidia graphics card enabled (I have a dual-graphics Sony Vaio laptop) to see if the drivers would automatically install. Ubuntu first booted into classic Ubuntu mode (no fancy Unity desktop shell) but it was usable. I navigated to <em>System &#187; Administration &#187; Additional Drivers</em> and chose the recommended proprietary nVidia drivers to install. They got installed and I was asked to reboot the computer so I did.</p> <p>After the reboot graphic mode was not working and so didn't the text mode. I rebooted with Intel graphics card to discover that installing the nVidia drivers broke Intel drivers which made me without Unity desktop shell even on previously working Intel card. Since I knew what to do to &quot;fix&quot; nVidia I did this &#8212; I blacklisted the <tt>nouveau</tt> module and also a bunch of <tt>tpm</tt> modules that prevented from proper resume after suspend in previous version of Ubuntu. And rebooted with nVidia card chosen.</p> <p>This time Xorg went up, the Unity showed up and everything was more or less OK. After removing nVidia drivers (<tt>apt-get remove nvidia-current</tt>) Intel got working Unity back. But I wanted to have Unity working on both graphics card without constant installing and uninstalling nVidia drivers and I figured out how to do it.</p> <h1><span>Automating Intel/nVidia boots</span></h1> <p>In <tt>/etc/rc.local</tt> before <tt>exit 0</tt> I entered something like this:</p> <div class="code"> <pre> <code>if ls -l /etc/alternatives/gl_conf | grep nvidia; then link=nvidia else link=mesa fi if lspci | grep 'VGA compatible controller: nVidia Corporation'; then hw=nvidia else hw=intel fi if [ &quot;$link&quot; = &quot;nvidia&quot; -a &quot;$hw&quot; = &quot;intel&quot; ]; then update-alternatives --set gl_conf /usr/lib/mesa/ld.so.conf ldconfig killall Xorg fi if [ &quot;$link&quot; = &quot;mesa&quot; -a &quot;$hw&quot; = &quot;nvidia&quot; ]; then update-alternatives --set gl_conf /usr/lib/nvidia-current/ld.so.conf ldconfig killall Xorg fi</code> </pre></div> <p>This code checks whether current GL implementation is nVidia (valid for nVidia card) or Mesa (valid for Intel card), then checks current card by examining the output of <tt>lspci</tt> command and uses certain <tt>update-alternatives</tt> lines followed by <tt>ldconfig</tt> to update the GL implementations. <tt>killall Xorg</tt> kills the X server which is brought back by login manager with GL library updated.</p> <p>This is a dirty hack but it works just well for me and made both graphic cards working with no additional work.</p> <h1><span>Glitches/Summary</span></h1> <p>Ubuntu seems very stable now, but X server crashed a few times (especially loading Flash videos from Vimeo in Firefox). There are some problems in multi-monitor configurations, like no way to move the window to bottom monitor (if they are aligned vertically) by dragging its top bar (moving with Alt works). The windows on bottom monitor are not maximized properly (they are maximized on the top monitor instead) and they can't be resized by dragging the resize handles (but resizing with Alt+middle mouse button works).</p> <p>There were some other small random issues, either not really relevant or easily fixable, but overall it seems a <em>very good beta release</em>. But wait. This is no beta, but final release. In this case it's not good. It's OK for a Linux user like me, but it definitely should not be released for regular users. Shame on you Canonical. They promised they release in April, but they should have release another beta release, do a serious testing (what I did was anything but unusual), <strong>fix the remaining bugs and then release the final version</strong>.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999391" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:wrtu54g-tm-running-x-wrt</guid>
				<title>WRTU54G-TM running X-Wrt</title>
				<link>http://piotr.gabryjeluk.pl/dev:wrtu54g-tm-running-x-wrt</link>
				<description>

&lt;p&gt;OK, so some time ago I bought a Linksys WRTU54G-TM. It&#039;s powered by Infineon ADM8668 processor (at 200&amp;#160;MHz) and has 64&amp;#160;MB RAM, which makes is pretty powerful router. Also it&#039;s really cheap. It looks like this:&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 20 Apr 2011 20:59:29 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>OK, so some time ago I bought a Linksys WRTU54G-TM. It's powered by Infineon ADM8668 processor (at 200&#160;MHz) and has 64&#160;MB RAM, which makes is pretty powerful router. Also it's really cheap. It looks like this:</p> <div class="content-separator" style="display: none:"></div> <p style="text-align: center;"><img src="http://farm4.static.flickr.com/3238/2612942957_3197bdd443.jpg" alt="2612942957_3197bdd443.jpg" class="image" /></p> <p>The problem with this router is that there was no cool open source software for it. Linksys opened its sources, but I meant something like DD-WRT or OpenWRT. The problem is that the CPU architecture is different from for example the widely known and used WRT54G series.</p> <p>Nonetheless there was some heavy work done to run a custom Linux firmware on it. After some successes, the author decided to port OpenWRT distribution to this router. And this is how it's done :-).</p> <p>The OpenWRT is a command-line distribution of Linux for a bunch of routers. There is a web interface called X-Wrt which is installable as a opkg package to the OpenWRT systems, but there is no real information of how to install it on specifically WRTU54G-TM.</p> <p>The good news is it can be done, the bad news is you have to hack it a little (but only very little). So let's go.</p> <p>First, you need to &quot;update&quot; the software of the router to the OpenWRT version. The reference here is: <a href="http://wiki.scottn.us/wrtu54g-tm">http://wiki.scottn.us/wrtu54g-tm</a>. Just log in to the router WWW interface, select Administration &#187; Firmware Upgrade and choose this file wrtu54g-tm-openwrt-devel-b5.bin (download it from <a href="http://wrt.scottn.us/wrtu54g-tm-openwrt-devel-b5.bin">http://wrt.scottn.us/wrtu54g-tm-openwrt-devel-b5.bin</a>).</p> <p>This takes a while. Router then reboots. Give it a few minutes to load and install. After that the power LED keeps blinking which is probably a bug (in the official firmware, the LED blinks while the system is loading, but once it's up it lights still).</p> <p>Connect to one of 4 Ethernet ports and you should be given an address IP in the 192.168.1.* network. If not, assign yourself one (for example 192.168.1.10). Then you can confirm the router is up, by pinging it:</p> <div class="code"> <pre> <code>ping 192.168.1.1</code> </pre></div> <p>Trying to ssh to it will reveal you can't really do it, since you don't know the root password. This is tricky, but you need telnet to the router:</p> <div class="code"> <pre> <code>telnet 192.168.1.1</code> </pre></div> <p>You'll be given the root shell. Set the password:</p> <div class="code"> <pre> <code>passwd</code> </pre></div> <p>You'll need to enter the password twice for confirmation. Don't forget it :-).</p> <p>Now you can ssh to the router:</p> <div class="code"> <pre> <code>ssh root@192.168.1.1</code> </pre></div> <p>Deal with the RSA &quot;host not known&quot; warnings etc, and supply the password you just set.</p> <p>If you connected the router to the network (by Ethernet cable to the &quot;Internet&quot; port) and your ISP has DHCP server, you should already have the Internet connectiong:</p> <div class="code"> <pre> <code>ping google.com</code> </pre></div> <p>If you need to supply the static IP address, edit the following file:</p> <div class="code"> <pre> <code>/etc/config/network</code> </pre></div> <p>You can use vim (busybox version) editor:</p> <div class="code"> <pre> <code>vim /etc/config/network</code> </pre></div> <p><tt>wan</tt> network corresponds to the Internet connection, while <tt>lan</tt> to the 4-port switch.</p> <p>In this scenario it's possible you also have to supply the DNS servers, so instead of checking the Internet connectivity by pinging google.com, ping some IP address, like:</p> <div class="code"> <pre> <code>ping 8.8.8.8</code> </pre></div> <p>Once you have the Internet connection, you can update the packages repositories, so you can install the X-Wrt interface:</p> <div class="code"> <pre> <code>mv /etc/opkg.conf /etc/original.opkg.conf cat &gt; /etc/opkg.conf</code> </pre></div> <p>Enter the following:</p> <div class="code"> <pre> <code>src/gz adm8668 http://wrt.scottn.us/packages src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/brcm47xx/packages dest root / dest ram /tmp lists_dir ext /var/opkg-lists option overlay_root /overlay arch all 5 arch brcm47xx 10 arch adm8668 20</code> </pre></div> <p>&#8230; and press Ctrl-D. Your /etc/opkg.conf file should now contain the lines above. Update the repositories:</p> <div class="code"> <pre> <code>opkg update</code> </pre></div> <p>Install the X-Wrt, which is packed in package named webif:</p> <div class="code"> <pre> <code>opkg install webif</code> </pre></div> <p>Now if you point your web browser to <a href="http://192.168.1.1/">http://192.168.1.1/</a> you should have a poor 404 page. It seems the permissions of the /www directory are wrong. I just did that to fix the problem:</p> <div class="code"> <pre> <code>chmod -R a+rX /www /etc/init.d/uhttpd restart</code> </pre></div> <p>Now you can log to the Web interface in with your login (root) and password.</p> <p>You can now play with the router settings using the browser :-). Much simpler.</p> <p>References:</p> <p><a href="http://wiki.scottn.us/wrtu54g-tm">http://wiki.scottn.us/wrtu54g-tm</a><br /> <a href="http://wiki.openwrt.org/doc/start">http://wiki.openwrt.org/doc/start</a></p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-beta-1</guid>
				<title>Ubuntu 11.04 Beta 1</title>
				<link>http://piotr.gabryjeluk.pl/dev:ubuntu-11-04-beta-1</link>
				<description>

&lt;p&gt;Let&#039;s talk about Ubuntu 11.04 Beta 1. Honestly I don&#039;t think it really should be beta already. It just doesn&#039;t work for me. I think the only reason the &amp;quot;release&amp;quot; is called beta is that it&#039;s April already and the stable version of the system should be delivered to the end of it to justify the 11.04 name/version.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 08 Apr 2011 21:05:12 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Let's talk about Ubuntu 11.04 Beta 1. Honestly I don't think it really should be beta already. It just doesn't work for me. I think the only reason the &quot;release&quot; is called beta is that it's April already and the stable version of the system should be delivered to the end of it to justify the 11.04 name/version.</p> <div class="content-separator" style="display: none:"></div> <p>Let's start from the beginning. I'm having a Sony Vaio laptop with dual graphics system. During boot I can switch if nVidia or Intel graphics card is used. While on nVidia card, I didn't encounter any problems but the thing in &quot;Extra Drivers&quot; no nVidia card was detected. I'm not sure, maybe this &quot;automatic&quot; 3rd party driver installation is only activated after a real install.</p> <p>I really wanted to see the new Ubuntu interface, so I switched to Intel graphics card and rebooted the machine. After a while I was able to &quot;Try Ubuntu&quot;, I started the Firefox and then I noticed I don't have a network connection configured, so I clicked the network manager icon, chose my wifi network and tried to enter the password, but this caused compiz to close unexpectedly. Multiple times. After I managed to click &quot;cancel&quot; button the window decorations were gone and keyboard focus was not passed to clicked field, which made my system unusable. The standard shortcut to run command in Ubuntu: Alt-F2 didn't work either.</p> <p>This was a pretty short test, but not passed at all. Ubuntu 11.04 doesn't deserve beta status, there are stability issues. For example trying to suspend the laptop in nVidia mode (without any commercial drivers) froze it instead so i had to reboot :-(.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:wikidot-wallart</guid>
				<title>Wikidot Wallart</title>
				<link>http://piotr.gabryjeluk.pl/dev:wikidot-wallart</link>
				<description>

&lt;p&gt;We&#039;re changing the office soon. This is one of ideas we have of what to put on the walls there:&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Mar 2011 19:30:06 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>We're changing the office soon. This is one of ideas we have of what to put on the walls there:</p> <div class="content-separator" style="display: none:"></div> <p><iframe src="http://piotr.gabryjeluk.pl/local--files/dev:wikidot-wallart/wikidot-art.html" width="100%" scrolling="auto" height="400" border="no" frameborder="no"></iframe></p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:collectd-performance-monitoring-on-servers</guid>
				<title>Collectd: performance monitoring on servers</title>
				<link>http://piotr.gabryjeluk.pl/dev:collectd-performance-monitoring-on-servers</link>
				<description>

&lt;p&gt;As I mentioned on &lt;a href=&quot;http://blog.wikidot.com/blog:standing-on-the-shoulders-of-giants&quot;&gt;official Wikidot blog&lt;/a&gt; we use collectd to monitor the servers health, so that we can notice some problems and often prevent some disasters.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 24 Jan 2011 19:17:51 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>As I mentioned on <a href="http://blog.wikidot.com/blog:standing-on-the-shoulders-of-giants">official Wikidot blog</a> we use collectd to monitor the servers health, so that we can notice some problems and often prevent some disasters.</p> <div class="content-separator" style="display: none:"></div> <h1><span>What's collectd</span></h1> <p>Collectd is fairly simple when it comes to the design. It's designed to just:</p> <ul> <li>initialize plugins with configuration data</li> <li>ask &quot;read&quot; plugins for data at configurable time intervals</li> <li><strong>accept data from &quot;read&quot; plugins</strong></li> <li><strong>forward collected data to &quot;write&quot; plugins</strong></li> <li><strong>forward notification to &quot;notification&quot; plugins if data returned from read plugin is outside configured threshold</strong></li> </ul> <p>Some plugins comes right in the collectd packages:</p> <ul> <li>read plugin: system stats, like CPU, load, memory, disk usage etc</li> <li>read plugin: <strong>exec</strong>: runs configured command to fetch some data (read below)</li> <li>write plugin: save collected data to RRD files (it's easy to make graphs out of them)</li> <li>read-write plugin: <strong>network</strong> &#8212; passes data from one server to another one (useful to collect data from many servers on one machine)</li> <li>notification plugin: send email if some statistics is out of defined bounds</li> </ul> <h1><span>Amazing graphs</span></h1> <p>A number of WWW (also desktop-GUI) interfaces to RRD files that are generated by collectd exist, but none of them is perfect :-(. One we found one of the most exciting is Jarmon. But even also sucks at some things.</p> <p>I think this project should be improved at this area. It's not really collectd core (as the WWW interface is only to display the rrd files, so this is already outside collectd), but nice screenshots mean a lot when you decide what monitoring software to install.</p> <h1><span>Ability to easily monitor &quot;your own custom stuff&quot;</span></h1> <p>The exec plugin runs a script (or executable, it doesn't really care) that is expected to produce statistics data. The binary should return at least one line that looks like this:</p> <div class="code"> <pre> <code>PUTVAL &quot;myhost/mystats-stat1/gauge&quot; interval=10 1179574444:666.44</code> </pre></div> <ul> <li><tt>myhost</tt> is host name &#8212; used to group stats by host (useful when one machine collects data from many hosts)</li> <li><tt>mystat</tt> is the plugin name &#8212; actually the plugin is exec, but when collectd processes THIS line it sets the plugin name to mystats (useful to note from which exec script the data comes from)</li> <li><tt>stat1</tt> is the datum you return value for &#8212; one plugin can return multiple values, for example a plugin that return how much of the file system is used would return one value for each mounted file system</li> <li><tt>gauge</tt> &#8212; this was experimentally chosen as most universal type of data</li> <li><tt>interval=10</tt> &#8212; this data is generated each 10 seconds<br /> NOTE: if the script ends in less than this interval, collectd will launch another process to generate new values</li> <li><tt>1179574444</tt> &#8212; current epoch time (date +%s)</li> <li><tt>666.44</tt> &#8212; datum value (given gauge is used, this can be float or <tt>U</tt> for non-counted for some reason)</li> </ul> <p>Full protocol definition can be found <a href="http://collectd.org/wiki/index.php/Plain_text_protocol">at collectd wiki</a>.</p> <h1><span>Tricks on how to write &quot;exec&quot; plugin</span></h1> <p>There's official documentation of how to write such a plugin, but a simple plugin can be written without (almost) any knowledge. Just get your favorite scripting language language and go.</p> <ol> <li>Don't trust COLLECTD_INTERVAL and COLLECTD_HOSTNAME. These environmental variables should hold what's configured collectd interval and hostname, but for some reason, they seem not to. Not a big deal, use command hostname to see what's the hostname and decide yourself how often you need to calculate given value.</li> <li>For simplicity print value(s) once and just exit. Collectd will periodically run your script. If you keep your script fast or make the interval big, this should not be a problem. From my experience, it's not easy to create a plugin that produces values continuously. So unless you have a good reason don't try.</li> <li>Unless you need, don't use other value type than gauge. It's universal and <em>just works</em>.</li> <li>Test your script manually (by running it). It should (ideally) instantly print one line, like the example one above and exit with code 0. No standard error, no verbose stuff, no fancy options etc.</li> <li>If you want, you can get configuration parameters of your script by command line arguments &#8212; write actual parameters in collectd.conf then.</li> </ol> <p>Let's see at example/template script then:</p> <div class="code"> <pre> <code>#!/bin/bash hostname=`hostname` date=`date +%s` # don't use &quot;-&quot; in those names: plugin=myplugin data=somedata interval=60 # seconds # compute the value: value=&quot;30.44&quot; echo &quot;PUTVAL \&quot;$hostname/$plugin-$data/gauge\&quot; interval=$interval $date:$value&quot;</code> </pre></div> <p>And that's all. You need to find some fancy (but not too fancy of course) name for the plugin and a way to compute the actual value :-).</p> <p>Notice if the value won't be generated in the interval, that data is considered lost and if you have any thresholds for this values set, you'll get a notification about missing value (and then another one when it's back).</p> <p>But how exactly looks section in threshold.conf that sets thresholds for such exec plugins:</p> <div class="code"> <pre> <code>&lt;Threshold&gt; # Any value returned by plugin &quot;myplugin&quot; # warning if value &gt; 200 # failure if value &gt; 400 &lt;Plugin &quot;myplugin&quot;&gt; &lt;Type &quot;gauge&quot;&gt; FailureMax 400 WarningMax 200 &lt;/Type&gt; &lt;/Plugin&gt; # Specific value (somedata) returned by plugin &quot;myplugin&quot; # warning if value &lt; 20 # failure if value &lt; 1 &lt;Plugin &quot;myplugin&quot;&gt; Instance &quot;somedata&quot; &lt;Type &quot;gauge&quot;&gt; WarningMin 20 FailureMin 1 &lt;/Type&gt; &lt;/Plugin&gt; &lt;/Threshold&gt;</code> </pre></div> <p>Consult the documentation (or the actual file) for other options.</p> <h1><span>Bottom line</span></h1> <p>Collectd is worth trying, but you need to be prepared not everything is going to be pretty from the start. The system allows you to write your own data sources and once you know the tricks (see above) it's damn easy and still very reliable, so it's definitely a monitoring solution that's worth trying.</p> <p>I hope by listing those tricks I learned while working with collectd I'll make at least one life a bit easier :-). I need to say, that collectd was quite easy to start with, but as problems arose, we were about to switch to some other monitoring solution, but now after finding our way with it, we'll probably stay with it for a while.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:sony-vaio-vgn-sz640-ubuntu-maverick</guid>
				<title>Sony Vaio VGN-SZ640 Ubuntu Maverick</title>
				<link>http://piotr.gabryjeluk.pl/dev:sony-vaio-vgn-sz640-ubuntu-maverick</link>
				<description>

&lt;p&gt;Recently I updated the Ubuntu I&#039;m using on my laptop to version 10.10 (codename Maverick).&lt;/p&gt;
&lt;p&gt;Although things work pretty good, I had to do some tricks to make it work in specific areas.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 04 Nov 2010 20:21:19 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Recently I updated the Ubuntu I'm using on my laptop to version 10.10 (codename Maverick).</p> <p>Although things work pretty good, I had to do some tricks to make it work in specific areas.</p> <div class="content-separator" style="display: none:"></div> <h1><span>Broken suspend</span></h1> <p>It seems tpm* modules (who knows what they are for?) break this. Putting file like this:</p> <div class="code"> <pre> <code># With these modules loaded suspend doesn't work blacklist tpm blacklist tpm_bios blacklist tpm_tis blacklist tpm_infineon</code> </pre></div> <p>to /etc/modprobe.d/blacklist-tpm.conf (and rebooting) solves the problem for me.</p> <h1><span>Brightness buttons not working</span></h1> <p>Run this code in terminal:</p> <div class="code"> <pre> <code>while true; do line=`acpi_listen | head -n 1`; if echo &quot;$line&quot; | grep 'sony/hotkey SPIC 00000001 00000010'; then xbacklight -dec 25 -time 0 -steps 1 smartdimmer -d fi if echo &quot;$line&quot; | grep 'sony/hotkey SPIC 00000001 00000011'; then xbacklight -inc 25 -time 0 -steps 1 smartdimmer -i fi done</code> </pre></div> <p>You need to have smartdimmer and xbacklight package. The keys kind of work now (but quite lamely).</p> <h1><span>Other stuff</span></h1> <p>The <tt>Ubuntu</tt> font is great. I love it. It seems nouveaux driver (for nVidia card) is really good. It supports multi-monitor configuration via xrandr and other standard stuff. Unfortunately you won't get 3D effects (Compiz) with it and you'll need to install nVidia commercial drivers for it.</p> <p>Consult <a href="http://piotr.gabryjeluk.pl/sony-vaio-sz-series-and-linux">Sony Vaio SZ Series And Linux</a> for more (mostly old) information.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:export-to-twitter</guid>
				<title>Export To Twitter</title>
				<link>http://piotr.gabryjeluk.pl/dev:export-to-twitter</link>
				<description>

&lt;p&gt;From today on, you can export pages updates to your Twitter account. For each page created a Twitter status update will be posted.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 18 Oct 2010 20:57:25 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>From today on, you can export pages updates to your Twitter account. For each page created a Twitter status update will be posted.</p> <p>The functionality is called Tweet My Wiki and is available for all Wikidot users (free and Pro).</p> <p>This feature was coded mostly by me, including the Wikidot URL shortener, that utilizes Redirect module and internal PageSaver API (similar to pages.save_one <a href="http://www.wikidot.com/doc:api">external API</a> method) to make it all happen.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:lighttpd-xsendfile-problem</guid>
				<title>Lighttpd X-Sendfile Problem</title>
				<link>http://piotr.gabryjeluk.pl/dev:lighttpd-xsendfile-problem</link>
				<description>

&lt;p&gt;It&#039;s not a secret Wikidot uses &lt;a href=&quot;http://lighttpd.net/&quot;&gt;Lighttpd&lt;/a&gt; web server to serve its service. We also use &lt;a href=&quot;http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModFastCGI#X-Sendfile&quot;&gt;X-Sendfile mechanism&lt;/a&gt; to deliver files more intelligently.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 01 Oct 2010 18:03:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>It's not a secret Wikidot uses <a href="http://lighttpd.net/">Lighttpd</a> web server to serve its service. We also use <a href="http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModFastCGI#X-Sendfile">X-Sendfile mechanism</a> to deliver files more intelligently.</p> <div class="content-separator" style="display: none:"></div> <p>Instead of having a PHP process copying file through FastCGI to Lighttpd (which would copy it again to the client) we send a special header to Lighttpd naming the file it should serve to the client. This means PHP processes are terminated quicker, which result in overall better performance.</p> <p>When working on a Wikidot bug (some uploaded files with some special characters in their names are not accessible using links generated by Wikidot itself), I discovered Wikidot also doesn't serve files whose name end with a space.</p> <p>The problem disappeared when I (just for test) disabled X-Sendfile mechanism. Pure PHP has no problems in reading such files and sending them through Lighttpd to browser, so it seemed there's a problem with Lighttpd.</p> <p>Lighttpd v1.4.24 introduced a second X-Sendfile header: X-Sendfile2, which asks Lighttpd to send a chunk of a file (from byte X<sup>th</sup>, to Y<sup>th</sup>), but also a whole file (from byte 0<sup>th</sup> to the last one). The syntax is:</p> <div class="code"> <pre> <code>X-Sendfile2: PATH RANGE</code> </pre></div> <p>Where PATH is URL-encoded file path (PHP's rawurlencode, not the non-standard urlencode), RANGE is X-Y (or &quot;0-&quot; for whole file), so changing:</p> <div class="code"> <pre> <code>header(&quot;X-Sendfile: &quot; . $path);</code> </pre></div> <p>to</p> <div class="code"> <pre> <code>header(&quot;X-Sendfile2: &quot; . rawurlencode($path) . &quot; 0-&quot;);</code> </pre></div> <p>fixes the problem.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:it-cake</guid>
				<title>IT Cake</title>
				<link>http://piotr.gabryjeluk.pl/dev:it-cake</link>
				<description>

&lt;p&gt;What would be the ideal cake for IT guys like us?&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 14 Sep 2010 14:16:51 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>What would be the ideal cake for IT guys like us?</p> <div class="content-separator" style="display: none:"></div> <ul> <li>made of chocolate</li> <li>should have your age in old-school 7 segment LED display style</li> </ul> <p>Just like the one Marta made for me:</p> <div class="image-container aligncenter"><a href="http://www.flickr.com/photos/16520924@N07/4990214960/"><img src="http://farm5.static.flickr.com/4133/4990214960_b4380d12d0.jpg" alt="flickr:4990214960" class="image" /></a></div> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:brussels-bikes</guid>
				<title>Brussels Bikes</title>
				<link>http://piotr.gabryjeluk.pl/dev:brussels-bikes</link>
				<description>

&lt;p&gt;Bikes are very important means of transport in Brussels, see the photos:&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 27 Aug 2010 21:25:52 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Bikes are very important means of transport in Brussels, see the photos:</p> <div class="content-separator" style="display: none:"></div> <div class="gallery-box" id="gallery-box-296821"> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:brussels-bikes/img_0017.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:brussels-bikes/img_0017.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> <div class="gallery-item thumbnail"> <table> <tr> <td><a href="http://piotr.gabryjeluk.pl/local--resized-images/dev:brussels-bikes/img_0024.jpg/medium.jpg"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:brussels-bikes/img_0024.jpg/thumbnail.jpg" alt="" /></a></td> </tr> </table> </div> </div> <p>I'm posting this mostly because I could not find the squeezed bike on the street lamp photo on Google Maps anymore.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:playing-need-for-speed-most-wanted-on-ubuntu</guid>
				<title>Playing Need For Speed Most Wanted on Ubuntu</title>
				<link>http://piotr.gabryjeluk.pl/dev:playing-need-for-speed-most-wanted-on-ubuntu</link>
				<description>

&lt;p&gt;There is a bunch of problems when installing and running Need For Speed Most Wanted game on Linux. We&#039;ll cover them one by one, but first what I&#039;ll tell you want you need:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Need For Speed Most Wanted &amp;#8212; I recommend having an original DVD, otherwise you shouldn&#039;t play&lt;/li&gt;
&lt;li&gt;Computer with NVIDIA graphics card (maybe others also work, Intel doesn&#039;t)&lt;/li&gt;
&lt;li&gt;A bunch of time, to do all the stuff listed here&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 23 Aug 2010 18:07:51 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>There is a bunch of problems when installing and running Need For Speed Most Wanted game on Linux. We'll cover them one by one, but first what I'll tell you want you need:</p> <ol> <li>Need For Speed Most Wanted &#8212; I recommend having an original DVD, otherwise you shouldn't play</li> <li>Computer with NVIDIA graphics card (maybe others also work, Intel doesn't)</li> <li>A bunch of time, to do all the stuff listed here</li> </ol> <div class="content-separator" style="display: none:"></div> <h1><span>Getting NFSMW installed</span></h1> <p>You would normally mount the DVD and run the AutoRun.exe with wine, but it's not really working, because it detects you have no DirectX and installs it, but after this does nothing.</p> <p>We'll install DirectX ourselves and then work on the installer to not detect and install it.</p> <p>Install DirectX with winetricks:</p> <div class="code"> <pre> <code>wget http://www.kegel.com/wine/winetricks sh winetricks d3dx9</code> </pre></div> <p>Then foul the installer: copy the DVD to some folder in the filesystem and edit AutoRun/autorun.cfg in the following way:<br /> * find StartMenuDXEULA=1 line and replace it with StartMenuDXEULA=0<br /> * find DirectXVersion=9.0c line and replace it with DirectXVersion=0</p> <p>Now start AutoRun.exe from copied installer.</p> <h1><span>Running NFSMW</span></h1> <p>The version of wine that works for me is 1.2. Upgrade wine and then run speed.exe from ~/.wine/dos_devices/c:/Program Files/EA GAMES/Need For Speed Most Wanted (or similar dir, depends on your configuration of course).</p> <p>Launch winecfg and set Windows version to Windows 2008 (maybe others work as well, this works for me).</p> <h1><span>Problem with not recognizing DVD</span></h1> <p>Even when you have an original DVD NFSMW may not recognize it correctly under Linux &#8212; you'll get &quot;please enter DVD&quot;. You'll need NoDVD crack then.</p> <p>The version that worked for me was one for NFSMW version 1.3. You need to upgrade NFSMW first, by using this file: <a href="http://www.filefront.com/4436930/Need-for-Speed-Most-Wanted-v1.3-Patch/">http://www.filefront.com/4436930/Need-for-Speed-Most-Wanted-v1.3-Patch/</a> (just run it with wine to upgrade).</p> <p>Then replace the speed.exe binary with one from this crack: <a href="http://www.gameburnworld.com/dl/dl.php?file=NeedForSpeedMostWantedv1.3ProperWorkingNoDVDFixedexeEng.rar">http://www.gameburnworld.com/dl/dl.php?file=NeedForSpeedMostWantedv1.3ProperWorkingNoDVDFixedexeEng.rar</a> &#8212; unrar and replace speed.exe.</p> <h1><span>Choppy sound</span></h1> <p>From time there is pulseaudio daemon installed on my Ubuntu, I've been having problems with audio in wine. The solution to problem in NFSMW is:</p> <ol> <li>run winecfg, set audio driver to OSS only (remove tick from ALSA)</li> <li>run game through pasuspender, like this:</li> </ol> <div class="code"> <pre> <code>pasuspender wine speed.exe</code> </pre></div> <p>It works pretty nice for me when running like this. The only drawback is that pulseaudio queues all sounds to be played during your game, so after you quit it so can get sound notifications from Pidgin or other applications.</p> <p><strong>UPDATE</strong>: recently (12 Sep 2010) it's not even needed to run game through pasuspender, probably due to some updates in pulseaudio.</p> <h1><span>Results</span></h1> <p>I'm getting really nice graphics and reasonable FPS (about 30 I think) &#8212; just good enough to perceive it smooth, but bad enough to see the flickering from time to time (when there are many objects to render).</p> <p>The special effects are really nice: raindrops on camera, colors of nature during sunset and finally the &quot;I'm running so fast, that things are going blurry&quot; effect.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://piotr.gabryjeluk.pl/dev:nie-wszystko-dobre-co-wiki</guid>
				<title>Nie wszystko dobre co wiki</title>
				<link>http://piotr.gabryjeluk.pl/dev:nie-wszystko-dobre-co-wiki</link>
				<description>

&lt;p&gt;Wikidot jest dobry, Wikipedia jest dobra, wiki z listą aplikacji zgodnych z nowym systemem Apple&#039;a jest dobre (bo oficjalna strona Apple&#039;a jest zła).&lt;/p&gt;
&lt;p&gt;Ale Pizzeria Wiki w Toruniu, pomimo tego, że &amp;quot;Wiki&amp;quot; dobra nie jest.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=2462&amp;amp;size=small&amp;amp;timestamp=1328999392&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://piotr.gabryjeluk.pl/profile2:2462&quot; target=&quot;_blank&quot;&gt;Gabrys&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 14 Aug 2010 16:12:49 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Wikidot jest dobry, Wikipedia jest dobra, wiki z listą aplikacji zgodnych z nowym systemem Apple'a jest dobre (bo oficjalna strona Apple'a jest zła).</p> <p>Ale Pizzeria Wiki w Toruniu, pomimo tego, że &quot;Wiki&quot; dobra nie jest.</p> <div class="content-separator" style="display: none:"></div> <p>Godzina 20:07 &#8212; zamawiam pizzę hawajską familijną z sosami czosnkowym i pomidorowym z dowozem do domu. Zapytałem ile będę czekać. Odpowiedź: do czterdziestu minut.<br /> Godzina 21:05 &#8212; zorientowawszy się, która godzina i, że umieramy z głodu zastanawiamy czemu jeszcze nie ma pizzy.<br /> Godzina 21:27 &#8212; Marta zdesperowana i głodna jak wilk zaczyna robić kanapki z parówką i surówką z Biedronki.<br /> Godzina 21:33 &#8212; kanapeczki gotowe, Marta zaczyna rzuć pierwsze kęsy.<br /> Godzina 21:34 &#8212; przyjeżdża Pan z pizzą.</p> <p>50 minut spóźnienia skomentowałem krótkim, że już nie potrzebuję tej pizzy, ale po drugim dzwonku musiałem się zmagać z trudnym pytaniem &quot;to po co nam dupę zawracasz jak nie potrzebujesz&quot;, na co musiałem odrzec, że &quot;to Wy w chuja ludzi robicie, bo pizza miała być po 40 minutach maksymalnie, a ja już półtorej godziny czekałem&quot;</p> <p>Nie wszystko dobre, co wiki.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><img class="small" src="http://www.wikidot.com/avatar.php?userid=2462&amp;size=small&amp;timestamp=1328999392" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>
