<?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 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>Fri, 03 Sep 2010 03:40:36 +0000</lastBuildDate>
		
					<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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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-589303"> <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"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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 — 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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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 — 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 — you'll get "please enter DVD". 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> — 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> <h1><span>Results</span></h1> <p>I'm getting really nice graphics and reasonable FPS (about 30 I think) — 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 "I'm running so fast, that things are going blurry" effect.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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 &quot;Wiki&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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 "Wiki" dobra nie jest.</p> <div class="content-separator" style="display: none:"></div> <p>Godzina 20:07 — 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 — zorientowawszy się, która godzina i, że umieramy z głodu zastanawiamy czemu jeszcze nie ma pizzy.<br /> Godzina 21:27 — Marta zdesperowana i głodna jak wilk zaczyna robić kanapki z parówką i surówką z Biedronki.<br /> Godzina 21:33 — kanapeczki gotowe, Marta zaczyna rzuć pierwsze kęsy.<br /> Godzina 21:34 — 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 "to po co nam dupę zawracasz jak nie potrzebujesz", na co musiałem odrzec, że "to Wy w chuja ludzi robicie, bo pizza miała być po 40 minutach maksymalnie, a ja już półtorej godziny czekałem"</p> <p>Nie wszystko dobre, co wiki.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:qt-4-7-and-qtwebkit-2-0-debian-packages-for-arm</guid>
				<title>Qt 4.7 and QtWebKit 2.0 Debian packages for ARM</title>
				<link>http://piotr.gabryjeluk.pl/dev:qt-4-7-and-qtwebkit-2-0-debian-packages-for-arm</link>
				<description>

&lt;p&gt;&lt;a href=&quot;http://packages.debian.org/source/experimental/qt4-x11&quot;&gt;Qt 4.7 beta2&lt;/a&gt; and &lt;a href=&quot;http://packages.debian.org/source/experimental/qtwebkit&quot;&gt;QtWebKit 2.0 beta (weekly build)&lt;/a&gt;] are available in Debian experimental repository, but not for all architectures. Most notably the packages are missing for ARM architecture.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 29 Jul 2010 18:30:30 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p><a href="http://packages.debian.org/source/experimental/qt4-x11">Qt 4.7 beta2</a> and <a href="http://packages.debian.org/source/experimental/qtwebkit">QtWebKit 2.0 beta (weekly build)</a>] are available in Debian experimental repository, but not for all architectures. Most notably the packages are missing for ARM architecture.</p> <div class="content-separator" style="display: none:"></div> <p>It's worth noting, that libqt4-webkit is no longer a valid package in experimental, but is a transitional package to pull libqtwebkit4, so now QtWebKit and Qt versions are quite independent. You can use Qt 4.6 or 4.7 with the QtWebKit 2.0.</p> <p>I needed QtWebKit 2.0 on ARM, so I built it from deb-src. It went OK with no modifications of the source package.</p> <p>When it comes to Qt's 4.7 beta release I needed to patch it slightly, to disable precompiled headers (for some reason, after generating them, they were not found by installation), —fast configure flag (not sure if this is needed) and I needed to tweak src/core/io/io.pri file, because for some reason <tt>linux-* {}</tt> section of qmake file was not properly applied. Also to properly compile stuff, I added Qt3 support.</p> <p>My full diff to sources downloaded with <tt>apt-get -t experimental source qt4-x11</tt></p> <div class="code"> <div class="hl-main"> <pre> <span class="hl-var">diff -ur original/qt4-x11-4.7.0~beta2/debian/rules modified/qt4-x11-4.7.0~beta2/debian/rules</span><span class="hl-default"> </span><span class="hl-reserved">--- original/qt4-x11-4.7.0~beta2/debian/rules 2010-07-29 18:27:41.000000000 +0000</span><span class="hl-default"> </span><span class="hl-reserved">+++ modified/qt4-x11-4.7.0~beta2/debian/rules 2010-07-29 18:27:52.000000000 +0000</span><span class="hl-default"> </span><span class="hl-code">@@ -89,7 +89,9 @@</span><span class="hl-default"> -demosdir "/usr/lib/qt4/demos" \ -examplesdir "/usr/lib/qt4/examples" \ -opensource \ </span><span class="hl-quotes">- -fast \</span><span class="hl-default"> </span><span class="hl-string">+ -no-fast \</span><span class="hl-default"> </span><span class="hl-string">+ -no-pch \</span><span class="hl-default"> </span><span class="hl-string">+ -qt3support \</span><span class="hl-default"> -plugin-sql-mysql \ -plugin-sql-odbc \ -plugin-sql-psql \ </span><span class="hl-var">diff -ur original/qt4-x11-4.7.0~beta2/src/corelib/io/io.pri modified/qt4-x11-4.7.0~beta2/src/corelib/io/io.pri</span><span class="hl-default"> </span><span class="hl-reserved">--- original/qt4-x11-4.7.0~beta2/src/corelib/io/io.pri 2010-07-29 18:28:09.000000000 +0000</span><span class="hl-default"> </span><span class="hl-reserved">+++ modified/qt4-x11-4.7.0~beta2/src/corelib/io/io.pri 2010-07-29 18:28:17.000000000 +0000</span><span class="hl-default"> </span><span class="hl-code">@@ -74,7 +74,6 @@</span><span class="hl-default"> SOURCES += io/qsettings_mac.cpp io/qfilesystemwatcher_fsevents.cpp } </span><span class="hl-quotes">- linux-*:!symbian {</span><span class="hl-default"> SOURCES += \ io/qfilesystemwatcher_inotify.cpp \ io/qfilesystemwatcher_dnotify.cpp </span><span class="hl-code">@@ -82,7 +81,6 @@</span><span class="hl-default"> HEADERS += \ io/qfilesystemwatcher_inotify_p.h \ io/qfilesystemwatcher_dnotify_p.h </span><span class="hl-quotes">- }</span><span class="hl-default"> freebsd-*|macx-*|darwin-*|openbsd-*:{ SOURCES += io/qfilesystemwatcher_kqueue.cpp</span> </pre></div> </div> <p>You can find all of the compiled debs here:</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:mysz-bluetooth-usb</guid>
				<title>Mysz Bluetooth USB</title>
				<link>http://piotr.gabryjeluk.pl/dev:mysz-bluetooth-usb</link>
				<description>

&lt;p&gt;Grunt to dobre rozeznanie w towarze, który się sprzedaje:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.allegro.pl/item1056342844_mysz_usb_bluetooth_1000_dpi_scroll_na_akumulatorki.html&quot;&gt;Mysz USB Bluetooth 1000 DPI SCROLL na AKUMULATORKI&lt;/a&gt;&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 10 Jun 2010 13:13:37 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Grunt to dobre rozeznanie w towarze, który się sprzedaje:</p> <p><a href="http://www.allegro.pl/item1056342844_mysz_usb_bluetooth_1000_dpi_scroll_na_akumulatorki.html">Mysz USB Bluetooth 1000 DPI SCROLL na AKUMULATORKI</a></p> <div class="content-separator" style="display: none:"></div> <p>Oprócz tytułu aukcji nie ma słowa USB. No i nie dziwne, bo ciężko, żeby mysz Bluetooth była USB-owa (no chyba, że ładowana przez USB), stąd moje pytanie:</p> <blockquote> <p>Treść wiadomości:<br /> I co ta mysz na wspólnego z USB?</p> </blockquote> <p>No i odpowiedź:</p> <blockquote> <p>Od: "BE_TECHNOLOGY" &lt;…&gt;<br /> Do: &lt;…&gt;<br /> Temat: Re: Pytanie o przedmiot: Mysz USB Bluetooth 1000 DPI SCROLL na AKUMULATORKI (Numery ofert 1056342844)<br /> Data: Thu, 10 Jun 2010&nbsp;14:35:58 +0200<br /> X-Mailer: Microsoft Outlook Express 6.00.2900.5931</p> <p>to ze jest bezprzewodowa…?? pozdrawiam</p> </blockquote> <p>Pozdrawiam wszystkich bezprzewodowych.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:enabling-intel-vt-on-sony-vaio</guid>
				<title>Enabling Intel VT On Sony Vaio</title>
				<link>http://piotr.gabryjeluk.pl/dev:enabling-intel-vt-on-sony-vaio</link>
				<description>

&lt;p&gt;I created a 64-bit virtual machine for testing some cool stuff on some cool machine in our office, but wanted to transfer it to my laptop. How pissed I was to realize that 64-bit machine can be only emulated by VirtualBox when VT-X (or corresponding AMD&#039;s technology) is used (Intel&#039;s extension to CPUs especially for virtualization). Without them, you can only emulate 32-bit machines even if you have 64-bit Linux running or the host.&lt;/p&gt;
&lt;p&gt;Sony for some reason disables the virtualization technologies in their laptops and give so poor BIOS UI, that you can&#039;t enable it. I&#039;ve read that after someone actually hacked their BIOS to enable the feature, Sony released BIOS update that adds the option to enable VT, but not for my model (Vaio SZ-640N).&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 05 Jun 2010 10:45:56 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>I created a 64-bit virtual machine for testing some cool stuff on some cool machine in our office, but wanted to transfer it to my laptop. How pissed I was to realize that 64-bit machine can be only emulated by VirtualBox when VT-X (or corresponding AMD's technology) is used (Intel's extension to CPUs especially for virtualization). Without them, you can only emulate 32-bit machines even if you have 64-bit Linux running or the host.</p> <p>Sony for some reason disables the virtualization technologies in their laptops and give so poor BIOS UI, that you can't enable it. I've read that after someone actually hacked their BIOS to enable the feature, Sony released BIOS update that adds the option to enable VT, but not for my model (Vaio SZ-640N).</p> <div class="content-separator" style="display: none:"></div> <p>I found one wonderful howto <a href="http://www.allquests.com/question/678250/How-to-Enable-Intel-VT-and-AHCI-on-a-VAIO-SZ.html">here</a>, but it had a few flaws:</p> <ul> <li>link to symcmos.exe was not valid anymore (just search for that file on random FTP servers, you'll find it quickly)</li> <li>I haven't handled to run FreeDOS from USB stick, so I downloaded CD image from <a href="http://www.freedos.org/freedos/files/">FreeDOS site</a> and burnt it into a DVD (no CD in my house, but that's not a problem)</li> <li>FreeDOS when run from CD fails to initialize USB sticks I've tried (3 of them). Additionally it crashes with an error "invalid opcode" after doing "InitDisks". I needed to have the symcmos.exe file available in FreeDOS LiveCD, so I created a small FAT16 partition on my main disk and put it there. It was accessible as disk C:. It seems FreeDOS handles partitions really well, because the partition was the last partition on my quite big disk, located on a extended partition and my partition table is not straight in a way that /dev/sda2 in the extended partition, while primary one /dev/sda3 is located before it. FreeDOS handled this, I had my FAT16 partition visible and I was able to run symcmos commands :-).</li> </ul> <p>So that's it. Time to do experiments on the machine.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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-unreal-tournament-on-ubuntu-lucid</guid>
				<title>Playing Unreal Tournament On Ubuntu Lucid</title>
				<link>http://piotr.gabryjeluk.pl/dev:playing-unreal-tournament-on-ubuntu-lucid</link>
				<description>

&lt;p&gt;I wanted to play Unreal Tournament on Ubuntu 10.04 (Lucid Lynx) 64-bit. Linux is theoretically supported by Unreal Tournament, by using custom installer. So this is how to do it:&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 17 May 2010 07:16:31 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>I wanted to play Unreal Tournament on Ubuntu 10.04 (Lucid Lynx) 64-bit. Linux is theoretically supported by Unreal Tournament, by using custom installer. So this is how to do it:</p> <div class="content-separator" style="display: none:"></div> <h1><span>Get Unreal Tournament</span></h1> <p>The most likely version to obtain is UT GOTY (Game Of The Year edition).</p> <h1><span>Get Installer</span></h1> <p>Go here:</p> <p><a href="http://www.liflg.org/?catid=6&amp;gameid=51">http://www.liflg.org/?catid=6&amp;gameid=51</a></p> <p>There are two installers. Download both using BitTorrent client. For me the one witout "goty" worked.</p> <p>Run installer like this:</p> <blockquote> <p>sudo bash /path/to/unreal.tournament_436-multilanguage.run</p> </blockquote> <p>Probably it won't run, because you don't have GTK 1.2. Bad news, GTK 1.2 isn't even available in system repository. The last Ubuntu version that shipped GTK 1.2 was Ubuntu Jaunty. My favorite trick to get packages from older distros is as follows:</p> <blockquote> <p>sudo sed s/lucid/jaunty/g /etc/apt/sources.list -i<br /> sudo aptitude update<br /> sudo aptitude install -y libgtk1.2<br /> sudo sed s/jaunty/lucid/g /etc/apt/sources.list -i<br /> sudo aptitude update</p> </blockquote> <p>Try to run the installer, it should work now.</p> <p>Default options are generally OK, so you can keep them. Once "enter CD" dialog appears, you need to either enter the CD or mount the ISO image using the following command:</p> <blockquote> <p>sudo mount /path/to/the/iso-file.iso /media/cdrom</p> </blockquote> <p>Click OK, and the installer continues to run. If you're asked to enter CD2 and you don't have one, try the second installer (the one without "goty") from loki site.</p> <h1><span>Running UT</span></h1> <p>I had no luck in running UT:</p> <blockquote> <p>quake@vaio ~ $ ut<br /> Signal: SIGIOT [iot trap]<br /> Aborting.</p> </blockquote> <p>From <a href="http://www.unrealadmin.org/forums/showthread.php?t=12432">this thread</a> I've learned it could be solved by doing this:</p> <blockquote> <p>cd /usr/local/games/ut/System<br /> for i in ../Maps/*.uz ; do sudo ./ucc-bin decompress $i ; done<br /> mv *.unr ../Maps</p> </blockquote> <p>After doing this, you should be able, to run ut successfully.</p> <h1><span>Changing resolution</span></h1> <p>I was not able to change resolution (once I changed it, it was going back to 640x480 after a few seconds). Open file ~/.loki/ut/System/UnrealTournament.ini, locate "640" and "480" in it and change to desired resolution.</p> <h1><span>High speed</span></h1> <p>When I run UT it seemed going about 5 times faster than it should. After reading much about -cpuspeed option and playing with CPU downclocking I figured out that without sound it runs OK. After some experimenting it seems, that it's pulseaudio is causing it, once I killed it and prevented to run (it auto-respawns for some reason) UT finally worked at good speed.</p> <blockquote> <p>sudo chmod -x /usr/bin/pulseaudio<br /> killall pulseaudio<br /> ut</p> </blockquote> <p>The problem with this is that some process continuously tries to run pulseaudio, which causes CPU to be loaded and ut to run not smoothly.</p> <p>So this should work:</p> <blockquote> <p>sudo mv /usr/bin/pulseaudio /usr/bin/pulseaudio.original<br /> echo -e "#!/bin/bash\nsleep 10000" | sudo tee /usr/bin/pulseaudio<br /> sudo chmod +x /usr/bin/pulseaudio<br /> killall pulseaudio<br /> ut</p> </blockquote> <p>Remember to do this after playing ut:</p> <blockquote> <p>sudo mv /usr/bin/pulseaudio.original /usr/bin/pulseaudio</p> </blockquote> <p>If you have some problems with sound after playing UT, log out and in again, and it should be OK.</p> <p><strong>NOTE:</strong> this trick should be equivalent to running pasuspender ut, but for some reason it does not work.</p> <h1><span>More tricks</span></h1> <p>When playing on LAN party we discovered more tricks:</p> <p>To let UT correctly determine CPU speed, you need to set CPU frequency (using some applet or cpufrequtils) and disable additional cores (leaving one):</p> <blockquote> <p>echo 0 | sudo tee /sys/devices/system/cpu/cpu1/online<br /> echo 0 | sudo tee /sys/devices/system/cpu/cpu2/online<br /> echo 0 | sudo tee /sys/devices/system/cpu/cpu3/online<br /> echo 0 | sudo tee /sys/devices/system/cpu/cpu4/online<br /> echo 0 | sudo tee /sys/devices/system/cpu/cpu5/online<br /> echo 0 | sudo tee /sys/devices/system/cpu/cpu6/online<br /> echo 0 | sudo tee /sys/devices/system/cpu/cpu7/online</p> </blockquote> <p>(if you have 8 cores, cpu0 will be online, the rest offline).</p> <p>Next trick is disabling desktop effects or window composing. For one person this meant much smoother graphics, for other it meant working sound (which is very weird, but yes, that's true).</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:maj</guid>
				<title>Maj</title>
				<link>http://piotr.gabryjeluk.pl/dev:maj</link>
				<description>

&lt;p&gt;Od lutego nie pisałem nic na blogasku, więc czas przerwać milczenie.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 05 May 2010 18:45:16 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Od lutego nie pisałem nic na blogasku, więc czas przerwać milczenie.</p> <div class="content-separator" style="display: none:"></div> <p>Aktualnie zajmuję się następującymi projektami:</p> <ul> <li>praca magisterska</li> <li>Wikidot</li> <li>kilka pobocznych rzeczy</li> </ul> <h1><span>Praca magisterska</span></h1> <p>Tematem mojej pracy są mobilne przeglądarki internetowe. Celem praktycznym będzie stworzenie używalnej mobilnej przeglądarki internetowej dla Linuksa z serwerem X11. O ile istnieją dobre przeglądarki mobilne na różne inne mobilne platformy (BlackBerry, iPhone, Android), to żadnej dobrze działającej nie udało mi się uruchomić na zwykłym Linuksie.</p> <p>Wyspecyfikujmy wymagania przeglądarki:</p> <ul> <li>obsługa palcem <ul> <li>przewijanie przez przeciąganie po ekranie</li> <li>duże guziki</li> <li>łatwe powiększanie i pomniejszanie</li> </ul> </li> <li>utrzymywanie odpowiedniego poziomu interakcji (czytaj: wyeliminować kilkunastosekundowe zwiechy programu)</li> <li>ma być jak najszybsza (na ile to możliwe) i być zgodna ze standardami W3C (ale możemy poświęcić jakiś mało używany wodotrysk np. z CSS3, jeśli zyskamy sporo na wydajności)</li> </ul> <p>Tworzenie przeglądarki, to trudna rzecz, więc nie będę zaczynał od zera. Wezmę przeglądarkę Arora i dopasuję ją do moich wymagań. Dlaczego Arora:</p> <ul> <li>oparta na silniku WebKit, co daje sporą przewagę wydajności nad choćby Firefoksem</li> <li>w miarę dobrze napisany kod, co sprawia, że się ją łatwo modyfikuje</li> <li>z testów wydajności (które przeprowadzam w swojej pracy) nie jest wprawdzie najszybsza, ale ma bardzo dobre wyniki</li> <li>napisana w Qt, co daje możliwość skompilowania również na Symbiana, QtE, Windows Mobile i być może na Androida.</li> </ul> <h1><span>Wikidot</span></h1> <p>Z racji pracy magisterskiej nie mogę się tak bardzo skupić na Wikidocie jakbym chciał, ale obecnie zajmuję się w wolnych chwilach monitorowaniem Wikidota (wykresiki, alerty mailowe itd), a ostatnio sen z powiek spędzał mi element [[html]], który niedawno wprowadziliśmy (głównie dzięki mnie) a który czasami nieprawidłowo ustawiał swoją wysokość w przeglądarce Firefox. Okazało się to winą Firefoksa, ale udało się to jakoś obejść. W skrócie mówiąc Firefox bardzo agresywnie cache'uje iframe'y (tzn. latające ramki), co sprawia, że nie zawsze wykonuje się zawarty w nich kod JavaScript. Aby temu zapobiec dodałem coś w stylu <tt>'?' + Math.random()</tt> do URL-a ładowanego w ramce. W ten sposób (o ile mamy dobrą funkcję <tt>Math.random</tt> w przeglądarce) za każdym razem generowany jest inny URL, co wymusza ponowne pobranie go z serwera. Skrypt się wykonuje i ramka prawidłowo zmienia swój rozmiar.</p> <h1><span>Inne rzeczy</span></h1> <p>Postanowiłem stworzyć miejsce w sieci, gdzie będę zbierał projekty, które wykonuję (takie portfolio) a także, gdzie będę mógł napisać, co potrafię robić. Powstało ono pod adresem: <a href="http://web9.pl/">web9.pl</a>. Być może kiedyś ten projekt przekształci się w firmę. Póki co, jest to głównie portfolio. Mimo wszystko zapraszam :-).</p> <p>Z racji tworzenia mobilnej przeglądarki internetowej, jestem właścicielem otwartego telefonu OpenMoko Neo FreeRunner (który pracuje pod kontrolą systemu Linux). Jedną z najlepiej na nim działających dystrybucji jest QtMoko, oparte na QtExtended (dawniej Qtopia). Ostatnio testuję nowe testowe wydania tej dystrybucji, głównie pod kątem działania GPRS. Zrobiłem również małego demona, który aplikuje workaround na bug w kernelu i trzyma otwarte urządzenie ALSA-y, a wszystko po to, by umożliwić rozmawianie przez Neo za pomocą zestawu słuchawkowego Bluetooth (niestety rozmawianie bez zestawu jest bardzo trudne, bo mikrofon jest zbyt czuły, a głośnik za cichy).</p> <p>Warto powiedzieć, że dzięki GPRS i GSM oraz fajnej aplikacji o nazwie NeronGPS, można używać Neo jako aplikacji do orientowania się na drogach. Niestety nie ma funkcji nawigacji, więc nie jest absolutnie świetna. Jednak lepiej z mapą i bez nawigacji, niż bez mapy i bez nawigacji.</p> <p>Oprócz napisania pracy magisterskiej muszę powiedzieć, że sporo obowiązków nakładają na mnie studia. Muszę zaliczyć dwa przedmioty do wyboru, z czego na jeden aktualnie chodzę, a co do drugiego, to muszę się umówić na egzamin. Niestety i piąty rok musi czasem coś pozdawać.</p> <p>Tak właśnie upływa mój maj. I szybko się to pewnie nie zmieni ;-)</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:changes-not-really</guid>
				<title>Changes? Not Really</title>
				<link>http://piotr.gabryjeluk.pl/dev:changes-not-really</link>
				<description>

&lt;p&gt;As announced on &lt;a href=&quot;http://blog.wikidot.com/blog:good-morning-wikidot&quot;&gt;Wikidot blog&lt;/a&gt;, CEO of Wikidot.com is changing. The position of CEO of Wikidot has been hold by Pieter Hintjens, now changed by Michał Frąckowiak, the founder of Wikidot service.&lt;/p&gt;
&lt;p&gt;Pieter was the Wikidot front-man for its community and organized good workflow for many community and internal projects. We learned how to talk to the community, how to solve problems and how to concentrate on important things. And we&#039;re going to keep being good at it.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 28 Feb 2010 17:36:28 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>As announced on <a href="http://blog.wikidot.com/blog:good-morning-wikidot">Wikidot blog</a>, CEO of Wikidot.com is changing. The position of CEO of Wikidot has been hold by Pieter Hintjens, now changed by Michał Frąckowiak, the founder of Wikidot service.</p> <p>Pieter was the Wikidot front-man for its community and organized good workflow for many community and internal projects. We learned how to talk to the community, how to solve problems and how to concentrate on important things. And we're going to keep being good at it.</p> <div class="content-separator" style="display: none:"></div> <p>With the addition of data forms Wikidot becomes one of the most interesting wiki platfarms (platform + farm) on the Earth. Using ListPages, _templates and forms we allow (almost) regular folks to create applications like CMS for their co-workers, clients or friends. Things usually done by programmers are now available for smart guys without need to find proper hosting, web framework or writing a line of computer code.</p> <p>What I find most interesting in building applications on Wikidot is that the platform itself is quite bullet-proof. I mean when you forget to put semicolon at the end of some line, you don't get your application crashing because of syntax error. Moreover when making application you get storage with history and e-mail notifications about changes for free, which makes your data quite safe. In case someone destroys your site (which you are informed by e-mail), you can just revert the right version).</p> <p>But Wikidot applications is not the most important thing Wikidot is used for. Many sites on Wikidot are just plain wiki sites with links to store and share knowledge of certain groups. They don't use advanced features like modules, includes, templates. They usually edit and save :-) from time to time uploading some file or image. What we want to do is to review all common operations people do most often and (really really) simplify them. Sophisticated applications are worth nothing if basic usage of service is not easy.</p> <p>We want to introduce features people will appreciate, like [[html]] blocks for embedding completely custom HTML, like this:</p> <div class="code"> <pre> <code>[[html]] &lt;h1&gt;Custom HTML&lt;/h1&gt; &lt;p&gt;Something else&lt;/p&gt; &lt;img src="anything.png" alt="hello ;-)"/&gt; [[/html]]</code> </pre></div> <p>This code will just inject the HTML (including JavaScript) into the page in that place. Seems easy to do, but in fact, to make it safe for your site, we needed to implement this as a frame, that autoresizes to keep the content fit inside.</p> <p>We also want to introduce [[block]] syntax for sandboxing wiki texts, for example:</p> <div class="code"> <pre> <code>[[block]] What put inside is parsed and rendered independently, so even if you put some random [[/div]]s or other nasty things, the page outside will be rendered nicely. [[/block]]</code> </pre></div> <p>This will be useful for site designers to use in template pages, like this:</p> <div class="code"> <pre> <code>[[table]] [[row]] [[cell]] [[block]] %%content%% [[/block]] [[/cell]] [[cell]] some other things. [[/cell]] [[/row]] [[/table]]</code> </pre></div> <p>Putting %%content%% in block tags you make sure user won't break the original layout (the table). Without block, user could put [[/cell]] inside of his text and thus break the layout.</p> <p>To let our users know what happens on their sites, we want to make live feeds of activity available for most common start-places on the web — iGoogle, NetVibes, Facebook and Twitter. Most important news from YOUR sites will be next to other things you start your day from.</p> <p>We have a bunch of other fresh ideas, which we'll be sharing on <a href="http://blog.wikidot.com/">blog.wikidot.com</a>.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:using-caps-key-as-second-tab</guid>
				<title>Using Caps Key As Second Tab</title>
				<link>http://piotr.gabryjeluk.pl/dev:using-caps-key-as-second-tab</link>
				<description>

&lt;p&gt;As we all know, Caps Lock key is useless and annoying, so some folks change it to behave as third Control key. I prefer using two Controls I already have, so I mapped the Caps Lock key to Tab (which I use very often).&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 23 Dec 2009 13:49:45 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>As we all know, Caps Lock key is useless and annoying, so some folks change it to behave as third Control key. I prefer using two Controls I already have, so I mapped the Caps Lock key to Tab (which I use very often).</p> <div class="content-separator" style="display: none:"></div> <div class="code"> <pre> <code>$ xmodmap - remove Lock = Caps_Lock keycode 0x42 = Tab &lt;hit Ctrl-D now&gt;</code> </pre></div> <p>This works till you logout. If it does work, you can make this persistent by adding those two lines to your empty or missing ~/.Xmodmap file:</p> <div class="code"> <pre> <code>remove Lock = Caps_Lock keycode 0x42 = Tab</code> </pre></div> <p>If this doesn't work for you, it's possible your window manager doesn't take care of this file, but if you have a way to execute commands at each start of GNOME/KDE/whatever, just add the following command to those run it startup sequence:</p> <div class="code"> <pre> <code>xmodmap ~/.Xmodmap</code> </pre></div> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:nowa-strona-nowy-temat</guid>
				<title>Nowa Strona -- Nowy Temat</title>
				<link>http://piotr.gabryjeluk.pl/dev:nowa-strona-nowy-temat</link>
				<description>

&lt;p&gt;Stworzyłem dziś nowy temat do Wikidota będący modyfikacją Łukaszowego Orange-Black:&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 10 Dec 2009 19:09:18 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Stworzyłem dziś nowy temat do Wikidota będący modyfikacją Łukaszowego Orange-Black:</p> <div class="content-separator" style="display: none:"></div> <p style="text-align: center;"><img src="http://thumbnail.s.wdfiles.com/thumbnail/theme/orange-black/240.jpg" alt="240.jpg" class="image" /></p> <p>Oto wynik:</p> <p style="text-align: center;"><img src="http://thumbnail.s.wdfiles.com/thumbnail/theme/orange-black-improved/240.jpg" alt="240.jpg" class="image" /></p> <p>Poza tym co widać, zmiany dotyczą użytego fonta, wyglądu komentarzy i forum, uproszczenia okienka nowego komentarza, ustalenia pozycji tła (żeby przewijanie przewijało samą treść, a nie tło) i dodanie lekkiego prześwitywania tła, żeby było bardziej sexy.</p> <p>Temat jest hostowany pod adresem: <a href="http://themes.wikidot.com/orange-black-improved">http://themes.wikidot.com/orange-black-improved</a>.</p> <p>A wszystko po to, żeby nadać naszej nowej stronce: <a href="http://parapetowa.wikidot.com/">http://parapetowa.wikidot.com/</a> ładnego wyglądu. A na stronce oprócz informacji co można nam kupić z okazji zbliżającej się parapetówy (jeszcze dokładnie nie wiadomo kiedy) uruchomiliśmy też bloga, gdzie pisać będziemy (a przynajmniej ja) o trudzie przystosowania mieszkania do wymagających lokatorów (czyli nas). Link do bloga:</p> <p style="text-align: center;"><a href="http://parapetowa.wikidot.com/blog">http://parapetowa.wikidot.com/blog</a></p> <p>Serdecznie zapraszamy!</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:sobotni-poranek</guid>
				<title>Sobotni Poranek</title>
				<link>http://piotr.gabryjeluk.pl/dev:sobotni-poranek</link>
				<description>

&lt;h1&gt;&lt;span&gt;Co łączy hazard i cenzurę Internetu?&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;Przede wszystkim, z rana czytając o ostatnio modnej ustawie anty-hazardowej, zauważyłem, że nie tylko hazard (a i to nie wiem po jaką cholerę) próbuje ona ukrócić. Komentarze pod wpisem na blogu vagla.pl zdają się sugerować, że propozycja ustawy jest niezgodna z Konstytucją, regulacjami Unii Europejskiej i Kartą Praw Człowieka, a wszystko przez to, że nakazuje dostawcom internetu blokować ustalane odgórnie strony internetowe. Centralnym miejscem będzie specjalny Rejestr, do którego będą dopisywane strony o wymienionym w propozycji ustawy charakterze. Dopisywanie ma się odbywać na żądanie kilku organów państwa, a egzekucja tego żądania ma się odbywać natychmiastowo. Dostawcy internetu będą musieli blokować strony z tego rejestru swoim klientom.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 21 Nov 2009 12:20:26 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <h1><span>Co łączy hazard i cenzurę Internetu?</span></h1> <p>Przede wszystkim, z rana czytając o ostatnio modnej ustawie anty-hazardowej, zauważyłem, że nie tylko hazard (a i to nie wiem po jaką cholerę) próbuje ona ukrócić. Komentarze pod wpisem na blogu vagla.pl zdają się sugerować, że propozycja ustawy jest niezgodna z Konstytucją, regulacjami Unii Europejskiej i Kartą Praw Człowieka, a wszystko przez to, że nakazuje dostawcom internetu blokować ustalane odgórnie strony internetowe. Centralnym miejscem będzie specjalny Rejestr, do którego będą dopisywane strony o wymienionym w propozycji ustawy charakterze. Dopisywanie ma się odbywać na żądanie kilku organów państwa, a egzekucja tego żądania ma się odbywać natychmiastowo. Dostawcy internetu będą musieli blokować strony z tego rejestru swoim klientom.</p> <div class="content-separator" style="display: none:"></div> <p>Zapraszam do przeczytania komentarzy (zarówno prawników, "techników" jak i nietechnicznych, ale zdrowo myślących ludzi) pod następującym adresem:</p> <p><a href="http://prawo.vagla.pl/node/8752">http://prawo.vagla.pl/node/8752</a></p> <p>Komentarze przedstawiają wątpliwości natury technicznej (techniki blokowania będą albo nieskuteczne albo bardzo drogie) jak i prawnej. Znajdziemy również sugestię, że ten rejestr stanie się pierwszym źródłem informacji wśród szukających w Internecie pornografii dziecięcej.</p> <p>Pomijając jednak te "drobne" aspekty, sprawę należy postawić zupełnie inaczej. Czy uprawnione jest w ogóle myślenie o tym, żeby blokować dostęp do części internetu ludziom przybywającym na terenie Polski? Czy zamiast dodawać mechanizmy mające niby uchronić Polaków przed naciągaczami i pedofilami, nie powinniśmy poprawić tych mechanizmów, które już istnieją? Moim zdaniem zamiast żądać dodania strony do Rejestru, odpowiedni urząd powinien złożyć doniesienie o popełnieniu przestępstwa i zostawić prokuraturze i sądom szybkie załatwienie tej sprawy (włącznie z żądaniem zdjęcia jej z sieci). Prokuratura i sądy działają za wolno? No właśnie to jest problem, który należy rozwiązać zamiast zajmować się jakimiś głupimi pomysłami blokowania Internetu!</p> <p>Inny komentator podaje również jako problem wymuszenie stosowania takiego rejestru. O ile rejestry SPAM-u, malware'u i innych nieporządnych stron internetowych (wliczając w to zawierające "nielegalną" pornografię, np. dziecięcą) istnieją, ich używanie jest zupełnie dobrowolne. Jeśli dbam o swoje bezpieczeństwo w sieci, mogę takiego filtra użyć, będąc świadomym, że może mi to ograniczyć dostęp do niektórych serwisów (do których mogę się dostać "omijając" filtr na własne życzenie). Propozycja ustawy jest bezlitosna, dostawcy internetu mają blokować pod rygorem kary pieniężnej.</p> <h1><span>Chwila rozrywki</span></h1> <p>Korzystając z chwilowego braku cenzury w Internecie chciałbym podzielić się filmikiem zaczerpniętym ze strony failblog.org, która prezentuje wypadek rowerzysty.</p> <p><strong>UWAGA: TREŚĆ DRASTYCZNA</strong> (chociaż wydaje mi się, że uczestnik wypadku nie odniósł dużych obrażeń)</p> <p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/XxGGyVklPHg&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" /> <param name="allowFullScreen" value="true" /> <param name="allowScriptAccess" value="always" /> <embed src="http://www.youtube.com/v/XxGGyVklPHg&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="425" height="344" /></object></p> <p>I jeszcze jedno, a co!</p> <p><iframe src="http://www.viddler.com/player/bc706765/" width="437" height="288" border="0" frameborder="0"></iframe></p> <p>I jeszcze powiększanie biustu po chińsku (trzeba przyznać, że bardzo pomysłowe, od razu przypomniał mi się Abracada Bra Mossa z IT Crowd):</p> <p><iframe src="http://www.viddler.com/player/a492be30/" width="437" height="351" border="0" frameborder="0"></iframe></p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:home-directory-snapshots</guid>
				<title>Home Directory Snapshots</title>
				<link>http://piotr.gabryjeluk.pl/dev:home-directory-snapshots</link>
				<description>

&lt;p&gt;Your home directory is where the most important data is stored.&lt;/p&gt;
&lt;p&gt;But from time to time you just simply &lt;tt&gt;rm -Rf ~&lt;/tt&gt; and your all precious data is totally out of luck. Backups you say, don&#039;t you?&lt;/p&gt;
&lt;p&gt;So let&#039;s think how do you do backups. &lt;tt&gt;cp /home/quake /my/distant/location&lt;/tt&gt; ? On my 24&amp;nbsp;GB home directory? It would take hours. &lt;tt&gt;cp /home/quake /home/backups/quake/date&lt;/tt&gt; ? Better, this will take a few minutes, but wait, I have like 120&amp;nbsp;GB of disk space, which means I can have no more than 5 backups.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 25 Oct 2009 16:12:38 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Your home directory is where the most important data is stored.</p> <p>But from time to time you just simply <tt>rm -Rf ~</tt> and your all precious data is totally out of luck. Backups you say, don't you?</p> <p>So let's think how do you do backups. <tt>cp /home/quake /my/distant/location</tt> ? On my 24&nbsp;GB home directory? It would take hours. <tt>cp /home/quake /home/backups/quake/date</tt> ? Better, this will take a few minutes, but wait, I have like 120&nbsp;GB of disk space, which means I can have no more than 5 backups.</p> <div class="content-separator" style="display: none:"></div> <p>What to do with this? There are two posibilities. Either you minimize data to backup to only backup important data (but figuring out what data is important may take some time and be inappropriate) or move to smarter solution, like incremental backups. Or snapshots. Either way, you've got to make sure your data is backed up - when switching <a href="http://www.o2.co.uk/">mobile phone deals</a>, you back up your SIM card, right? It's no different, and if anything, even more important with your PC, so make sure you're looking at the right types of temporary backup and memory storage solutions for your machine before anything goes south.</p> <p>Having brtfs as the filesystem for my home directory, I chose to make a snapshot of it each hour. It takes between 0 and 1 second to complete and uses almost no disk space. Why? Btrfs is copy-on-write filesystems, which means cloning a filesystems is instant as it only makes it available under two locations. And then modifying one of the two makes a real copy of the modified fragment of it and changes that copy.</p> <p>OK. How to do it.</p> <p>First create a btrfs filesystem (you'll need a recent kernel and btrfs-utils):</p> <div class="code"> <pre> <code># mkfs.btrfs /dev/sda7</code> </pre></div> <p>(sda7 is partition for my /home directory)</p> <p>Then mount it somewhere else than /home, let's use /vol as an example:</p> <div class="code"> <pre> <code># mount /dev/sda7 /vol</code> </pre></div> <p>Create some volumes on that filesystem: home, quake, snapshots:</p> <div class="code"> <pre> <code># btrfsctl -S home /vol # btrfsctl -S quake /vol # btrfsctl -S snapshots /vol</code> </pre></div> <p>The volumes are accessible as the subdirectories of /vol:</p> <div class="code"> <pre> <code># ls -la /vol drwx------ 1 root root 36 1970-01-01 01:00 . drwxr-xr-x 24 root root 4096 2009-10-25 15:04 .. drwx------ 1 root root 20 2009-10-25 15:51 home drwx------ 1 root root 11488 2009-10-25 16:17 quake drwx------ 1 root root 76 2009-10-25 15:40 snapshots</code> </pre></div> <p>But you can mount then separately:</p> <div class="code"> <pre> <code># mount /dev/sda7 /home -o subvolume=home # mkdir /home/quake # mount /dev/sda7 /home/quake -o subvolume=quake</code> </pre></div> <p>Fix permissions:</p> <div class="code"> <pre> <code># chown quake:quake /home/quake /vol/quake /vol/snapshots # chmod 0755 /home/ /home/quake</code> </pre></div> <p>Now you're ready to do snapshots. Now populate the /home/quake directory:</p> <div class="code"> <pre> <code>$ mkdir /home/quake/abcd $ mkdir /home/quake/dddd $ mkdir /home/quake/abcd/eeee $ echo testtest &gt; /home/quake/testfile</code> </pre></div> <p>Aaaaaand, make snapshots!</p> <div class="code"> <pre> <code>$ btrfs -s /vol/snapshots/quake-`date +%Y%m%d-%H%M` /vol/quake</code> </pre></div> <p>I figured out, that it's quite important to point to /vol/quake and not /home/quake. At first it seams that it's totally the same, but on /home/quake there can be some other filesystems mounted (like .gvfs for GNOME virtual file systems) and /vol/quake contains "pure data". When doing snapshots of /home/quake with filesystems mounted under it, the filesystems freezes for me (btrfs is still experimental, they say). So as noted above, it's better to snapshot pure data directory.</p> <p>Now, the /vol/snapshots/quake-20091025-1653 (or whatever your date is) and /vol/quake should list the same files and the operation of "cloning" should be just instant no matter how much data you have. But now modifying the contents of /vol/quake should not change anything in /vol/snapshots/quake-20091025-1653 (but of course should in /home/quake).</p> <p>Also the snapshot doesn't really take any disk space as long as you keep the /vol/quake directory unchanged. Once you change some file from /vol/quake, it needs to really keep two copies of it, so this is when additional space is allocated.</p> <p>To sum up let's have a table listing possibilities to have the same contents in two directories:</p> <table class="wiki-content-table"> <tr> <th>method</th> <th>file copy</th> <th>symbolic link</th> <th>hard link</th> <th>bind-mount</th> <th>btrfs' clone</th> </tr> <tr> <th>how</th> <td>cp -a dir1 dir2</td> <td>ln -s dir1 dir2</td> <td>ln dir1 dir2</td> <td>mount -o bind dir1 dir2</td> <td>btrfs-bcp dir1 dir2</td> </tr> <tr> <th>time</th> <td>long</td> <td><strong>instant</strong></td> <td><strong>instant</strong></td> <td><strong>instant</strong></td> <td><strong>instant</strong></td> </tr> <tr> <th>takes disk space</th> <td>yes</td> <td><strong>no</strong></td> <td><strong>no</strong></td> <td><strong>no</strong></td> <td><strong>no</strong> (only the difference)</td> </tr> <tr> <th>points to the same data<br /> (changing file in dir1 changes it in dir2)</th> <td><strong>no</strong></td> <td>yes</td> <td>yes</td> <td>yes</td> <td><strong>no</strong></td> </tr> <tr> <th>notes</th> <td></td> <td></td> <td>not on Linux (Mac only?)</td> <td></td> <td>btrfs-bcp not distributed in Ubuntu's btrfs-tools</td> </tr> </table> <p>More notes on btrfs and snapshotting:</p> <ul> <li>What can be done with btrfs-bcp on directories level can be done with snapshots on volumes level (as described in this post)</li> <li>Snapshots in btrfs are not removable yet. You can clear them and reclaim the space taken by saved difference from the starting point. Still a few bytes is taken by having the directory that is not removable. Deleting snapshots is to be implemented in stable version of btrfs.</li> </ul> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:0x600df00d</guid>
				<title>0x600DF00D</title>
				<link>http://piotr.gabryjeluk.pl/dev:0x600df00d</link>
				<description>

&lt;p&gt;Ta notka powstaje z dwóch powodów.&lt;/p&gt;
&lt;p&gt;Po pierwsze obiecałem, że napiszę coś na blogasku, jeśli będzie mi się dzisiaj podobać.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 07 Oct 2009 19:44:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Ta notka powstaje z dwóch powodów.</p> <p>Po pierwsze obiecałem, że napiszę coś na blogasku, jeśli będzie mi się dzisiaj podobać.</p> <div class="content-separator" style="display: none:"></div> <p>Po drugie, muszę oddać hołd mojemu dziewczęciu — Marcie.</p> <p>Marto, jesteś bardzo dobrze przewidującą osobą. Przewidziałaś dwa wydarzenia w Californication (na dwa strzały — 100% skuteczności).</p> <p>Poza tym, lepiej znasz kolekcję moich płyt niż ja. Tak, mam w niej płytę Rapid Eye Movement naszego kochanego Riverside'u.</p> <p>Cieszę się, że jesteśmy razem.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:ssd-fses-benchmark-results</guid>
				<title>SSD FS-es Benchmark Results</title>
				<link>http://piotr.gabryjeluk.pl/dev:ssd-fses-benchmark-results</link>
				<description>

&lt;p&gt;As I &lt;a href=&quot;http://piotr.gabryjeluk.pl/dev:file-systems-on-solid-state-drives-benchmark&quot;&gt;promised&lt;/a&gt; I benchmarked some of the Linux filesystems on my solid state disk.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 02 Oct 2009 17:39:53 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>As I <a href="http://piotr.gabryjeluk.pl/dev:file-systems-on-solid-state-drives-benchmark">promised</a> I benchmarked some of the Linux filesystems on my solid state disk.</p> <div class="content-separator" style="display: none:"></div> <h1><span>Introduction</span></h1> <p>I wanted to benchmark the following filesystems:</p> <ul> <li>ext2, ext3</li> <li>ext4</li> <li>xfs</li> <li>reiserfs, reiser4</li> <li>nilfs</li> <li>btrfs</li> <li>zfs (via fuse)</li> </ul> <p>NILFS2 haven't managed to even finish the Bonnie++ test. This means this filesystem is not yet ready to use (but promises very nice features). Other filesystem that has not been benchmarked is reiser4, because the Ubuntu kernel doesn't have support for it. I would need to patch it and I wasn't happy about it.</p> <p>Images shown here show results of the standard Bonnie++ tests. Command to do them was:</p> <div class="code"> <pre> <code>bonnie -d /dir/on/ssd/partition -n 200:200</code> </pre></div> <p>The -n parameter was tuned so that for each test some values were returned. With default setting I got many values "++++" indicating test was performed so fast, that Bonnie++ was not able to calculate the performance.</p> <p>Explanation of test names can be found in <a href="http://www.coker.com.au/bonnie++/readme.html">bonnie++ documentation</a>.</p> <p>Before each test, filesystem was created on the prepared partition (25&nbsp;GB) and some (the same for each test) data was copied to it (about 10&nbsp;GB) to simulate "used" filesystem.</p> <p>As it appeared I was not able to <em>disable</em> write-caching with running hdparm -W0 /dev/sda. Instead it stated</p> <div class="code"> <pre> <code>/dev/sda: setting drive write-caching to 0 (off) write-caching = 1 (on)</code> </pre></div> <p>Possible write-caching is good thing though (and by default enabled), so I have no problem with that.</p> <p>All tests were run twice, but the results was nearly the same, so I just removed the second results for each filesystem.</p> <p><strong>For each test, bigger is better with value being thousands operations per second.</strong></p> <h1><span>The best filesystem</span></h1> <p>As some suggest, the preferred I/O-scheduler for SSD disk is "noop", which means there's no IO scheduling in kernel, so we rely on scheduling logic in the hardware (which for various reasons is believed to be good in SSD disks) and profit from no software overhead of queuing.</p> <p>Let's then compare how well filesystems perform with this scheduler chosen:</p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/noop-tests1.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/noop-tests1.png/small.jpg" alt="noop-tests1.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/noop-tests2.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/noop-tests2.png/medium.jpg" alt="noop-tests2.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/noop-tests3.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/noop-tests3.png/medium.jpg" alt="noop-tests3.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/noop-tests4.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/noop-tests4.png/medium.jpg" alt="noop-tests4.png" class="image" /></a></p> <p>This benchmark was performed for all filesystems but NILFS2 and reiser4.</p> <h2><span>Random seeks</span></h2> <p>When it comes to random seeks (very important for low-latency systems), the best is ext4 with reiserfs and xfs having almost the same result. Btrfs is next (10% slower), then ext3, ext2 and zfs at the end being 6 time worse than the best.</p> <h2><span>Creation and deletion of files</span></h2> <p>Ext4 is the fastest in creating files (both sequentially and randomly) while btrfs is the fastest in deleting files, which small exception of ext2 being 7 times faster than everything in sequentially deleting files. On the other hand it's ability to delete files in random fashion is pretty bad. Comparing only btrfs and ext4, both are fast, the difference is about 10% to the one or the other side. Ext3 performs pretty well in this test, reiserfs reaches about half the performance of ext4/btrfs, while xfs and zfs are really slow.</p> <h2><span>Read/write</span></h2> <p>Reading and writing of data is pretty equal through filesystems in terms of benchmark results. The worst results has zfs and ext2 (especially in random read, which is vital in modern use of computers).</p> <p>As per-character reading/writing is not so important, let's concentrate on the rest of tests. As you can see, btrfs is clearly the best, having first place in 3/5 tests being really close to first in the following two. Reiserfs and ext4 perform really well in this area.</p> <h2><span>Semi-summary</span></h2> <p>At this point it's clear that when it comes to performance on SSD disk we have two filesystems to consider the best: btrfs and ext4. Reiserfs is slightly worse, but the most mature from them. Xfs and ext3 are just OK, but don't perform equally good in all tests, while ext2 and zfs (on fuse) being not an option at all.</p> <p>Let's then compare the features of the three:</p> <table class="wiki-content-table"> <tr> <th>Limits</th> <th>reiserfs</th> <th>ext4</th> <th>btrfs</th> </tr> <tr> <td>file name</td> <td>4&nbsp;KB</td> <td>256&nbsp;B</td> <td>255&nbsp;B</td> </tr> <tr> <td>max file size</td> <td>8&nbsp;TB</td> <td>16&nbsp;GB to 16&nbsp;TB<br /> (depends on block size)</td> <td>16 EB</td> </tr> <tr> <td>max volume size</td> <td>16&nbsp;TB</td> <td>1 EB</td> <td>16 EB</td> </tr> <tr> <th>Features</th> <th>reiserfs</th> <th>ext4</th> <th>btrfs</th> </tr> <tr> <td>checksum (error check)</td> <td>no</td> <td>yes</td> <td>yes</td> </tr> <tr> <td>snapshots (like time machine)</td> <td>no</td> <td>no</td> <td>yes</td> </tr> <tr> <td>mirroring/stripping on FS layer</td> <td>no</td> <td>no</td> <td>yes</td> </tr> <tr> <td>compression</td> <td>no</td> <td>no</td> <td>yes</td> </tr> </table> <p>So it seems, btrfs is full of new features compared to (old) reiserfs and (new) ext4 with only small performance penalty in some areas, while even being faster in some.</p> <p>The rest tests presented only cover ext4, reiserfs and btrfs filesystems.</p> <h1><span>What is the best scheduler, then?</span></h1> <p>Having chosen the best filesystems, let's see, which scheduler works best.</p> <h2><span>ext4</span></h2> <p>Comparison of schedulers performance for ext4 filesystem:</p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/ext4-tests1.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/ext4-tests1.png/small.jpg" alt="ext4-tests1.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/ext4-tests2.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/ext4-tests2.png/medium.jpg" alt="ext4-tests2.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/ext4-tests3.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/ext4-tests3.png/medium.jpg" alt="ext4-tests3.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/ext4-tests4.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/ext4-tests4.png/medium.jpg" alt="ext4-tests4.png" class="image" /></a></p> <p>As we see, cfq is the best in 5 tests, significantly worse in two (random creation of files and random seeks) and nearly as good as best in the rest. Deadline and noop perform pretty the same (with noop being better at creating files randomly and deadline being better at creating files sequentially).</p> <h2><span>reiserfs</span></h2> <p>Schedulers performance for reiserfs filesystem:</p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/reiserfs-tests1.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/reiserfs-tests1.png/small.jpg" alt="reiserfs-tests1.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/reiserfs-tests2.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/reiserfs-tests2.png/medium.jpg" alt="reiserfs-tests2.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/reiserfs-tests3.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/reiserfs-tests3.png/medium.jpg" alt="reiserfs-tests3.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/reiserfs-tests4.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/reiserfs-tests4.png/medium.jpg" alt="reiserfs-tests4.png" class="image" /></a></p> <p>For reiserfs, again, cfq does its work really well with only random reads being significantly slower than deadline and noop schedulers.</p> <h2><span>btrfs</span></h2> <p>Let's now see what scheduler will be best for btrfs filesystem:</p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/btrfs-tests1.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/btrfs-tests1.png/small.jpg" alt="btrfs-tests1.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/btrfs-tests2.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/btrfs-tests2.png/medium.jpg" alt="btrfs-tests2.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/btrfs-tests3.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/btrfs-tests3.png/medium.jpg" alt="btrfs-tests3.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/btrfs-tests4.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/btrfs-tests4.png/medium.jpg" alt="btrfs-tests4.png" class="image" /></a></p> <p>This time not cfq, but deadline scheduler is the man! In random seeks, where cfq is generally worse, this time it's worse by about 30% than the best: deadline scheduler. Only in one test deadline is worse than noop, but this is only slight difference. Cfq is only slightly better in 4 tests, but in the rest, deadline is better.</p> <h1><span>Ultimate comparison of btrfs, reiserfs and ext4</span></h1> <p>When we know which scheduler will run best with certain filesystems, let's compare Bonnie++ results for the perfect tandems:</p> <ul> <li>btrfs with deadline scheduler on underlying disk</li> <li>ext4 with cfq</li> <li>reiserfs with cfq</li> </ul> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/best-tests1.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/best-tests1.png/small.jpg" alt="best-tests1.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/best-tests2.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/best-tests2.png/medium.jpg" alt="best-tests2.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/best-tests3.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/best-tests3.png/medium.jpg" alt="best-tests3.png" class="image" /></a></p> <p style="text-align: center;"><a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/best-tests4.png"><img src="http://piotr.gabryjeluk.pl/local--resized-images/dev:ssd-fses-benchmark-results/best-tests4.png/medium.jpg" alt="best-tests4.png" class="image" /></a></p> <h2><span>Random seeks</span></h2> <p>Choosing cfq scheduler on any of the tested filesystems degraded random seek performance. This is why btrfs with deadline scheduler is better than its competitors.</p> <h2><span>Creation and deletion of files</span></h2> <p>This time, without ext2 having so high bar, you can see the differences in creating and deleting files on the three filesystems I tested. Btrfs is much (about 2 times) faster than ext4 in deleting files, while ext4 is a bit faster in creating files randomly, and significantly faster (about 50%) in creating files sequentially. Reiserfs is about 2 times slower than the slower filesystem in each test.</p> <h1><span>Read/write</span></h1> <p>In read/write tests btrfs, ext4 and reiserfs perform almost equally well, with btrfs being slightly better than the latter two filesystems.</p> <h1><span>Summary</span></h1> <p>Ext4 and btrfs filesystems perform really well on SSD disks making the users really happy about the speed they get from normal computer use.</p> <p>With ext4 being the default filesystem for Ubuntu 9.10, having SSD disk, you'll notice that it boots really fast:</p> <ul> <li>from Grub to GDM in 8 seconds</li> <li>from GDM to GNOME in 5 seconds</li> <li>OpenOffice launches the first time in 2-3 seconds (second time is 0 seconds)</li> </ul> <p>With btrfs being equally fast (or even faster) than ext4 it's amazing what features it delivers:</p> <ul> <li>snapshots (you can make a snapshot of filesystem and then roll back to it, or just explore historical version files)</li> <li>compression</li> <li>mirroring/stripping — things usually done on block-device level now incorporated into filesystem</li> <li>nice internal structures and algorithms (copy on write, B-trees, …)</li> <li>integrated volume management</li> </ul> <p>On the second hand, btrfs as of version 0.19 has still experimental disk format, which means it can be non-compatible with future kernels, but usually kernel developers create code that either preserve the old format or converts the filesystem to new one on the first mount (and then it's not possible to mount such a partition from an older kernel). Also if I understand well, the biggest changes from 0.18 to 1.0 were just applied in 0.19, so probably this will be the final format of btrfs partitions.</p> <p>It's clear, that btrfs is the Linux answer to Sun's ZFS, which due to incompatible license can't be incorporated into the kernel (this is why we only have FUSE port available).</p> <p>Having all this said, it's time for me to migrate my /home (and maybe the system partition too) to btrfs!</p> <p>You can download <a href="http://piotr.gabryjeluk.pl/local--files/dev:ssd-fses-benchmark-results/ssd-benchmark.ods">raw benchmark data in ODS format</a>.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:informacja-pks</guid>
				<title>Informacja PKS</title>
				<link>http://piotr.gabryjeluk.pl/dev:informacja-pks</link>
				<description>

&lt;p&gt;Zgłoszone poprzez: &lt;a href=&quot;http://www.pks.bydgoszcz.pl/kontakt.php?pom=3&quot;&gt;http://www.pks.bydgoszcz.pl/kontakt.php?pom=3&lt;/a&gt;&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 01 Oct 2009 11:55:43 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Zgłoszone poprzez: <a href="http://www.pks.bydgoszcz.pl/kontakt.php?pom=3">http://www.pks.bydgoszcz.pl/kontakt.php?pom=3</a></p> <div class="content-separator" style="display: none:"></div> <blockquote> <p>Szanowni Państwo,</p> <p>chciałbym zgłosić reklamację dotyczącą pracy informacji telefonicznej PKS Bydgoszcz.</p> <p>Dnia 30 września 2009 pomiędzy godziną 23:40 a 23:55 znajdując się na dworcu autobusowym w Bydgoszczy, wykonaliśmy z telefonu komórkowego połączenie do informacji — nr *720-84-00. Zapytanie dotyczyło najwcześniejszego połączenia z dworca w Bydgoszczy do Torunia. Mężczyzna poinformował nas, że najbliższe takie połączenie będzie dopiero po godzinie szóstej dnia następnego, co było nieprawdą. Nabliższe połączenie z owego dworca było bowiem o godzinie 23:55 (wykonywane przez PKS Mława, ze stanowiska nr 12 na dworcu autobusowym w Bydgoszczy), a następne o godzinie 01:40 (do Łodzi przez Toruń, ze stanowiska nr 11 na dworcu autobusowym w Bydgoszczy).</p> <p>Połączenie telefoniczne kosztowało 5 złotych, o którym to koszcie nie było żadnej informacji na naklejce na szybie na wejściu do budynku dworca. Takiej informacji nie ma różnież na stronie internetowej PKS Bydgoszcz pod adresem: <a href="http://www.pks.bydgoszcz.pl/kontakt.php">http://www.pks.bydgoszcz.pl/kontakt.php</a> .</p> <p>Koszty poniesione w wyniku wprowadzenia w błąd, to 5 złotych (czyli koszt telefonu na informację), zszargane nerwy i stanie na chłodzie przez ponad godzinę. Koszty mogły być znacznie większe, gdybyśmy na podstawie przekazanych informacji zdecydowali się nocować w Bydgoszczy lub wynająć inny środek transportu.</p> <p>Aby sprawę zakończyć polubownie, proponuję zwrot kosztów poniesionych na wykonanie połączenia, oraz wyciągnięcie konsekwencji co do osoby, która wprowadziła nas, czym wpłynęła na znaczne pogorszenie postrzegania przez nas Firmy.</p> <p>W sprawie zwrotu poniesionych kosztów (podamy numer konta), proszę skontaktować się na podany w formularzu kontaktowym adres e-mail.</p> <p>Treść zażalenia będzie dostępna również pod adresem: <a href="http://piotr.gabryjeluk.pl/dev:informacja-pks">http://piotr.gabryjeluk.pl/dev:informacja-pks</a> do czasu uzyskania odpowiedzi, która będzie objawem zajęcia się tą sprawą.</p> <p>Z góry dziękuję za pozytywne rozpatrzenie wniosku.</p> </blockquote> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:cleaning-up</guid>
				<title>Cleaning Up</title>
				<link>http://piotr.gabryjeluk.pl/dev:cleaning-up</link>
				<description>

&lt;p&gt;Some of you, following Wikidot code on &lt;a href=&quot;http://github.com/gabrys/wikidot&quot;&gt;GitHub&lt;/a&gt; may see it&#039;s nicely split into templates, php, web and conf directories. But this is the first impression.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 17 Sep 2009 16:42:53 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Some of you, following Wikidot code on <a href="http://github.com/gabrys/wikidot">GitHub</a> may see it's nicely split into templates, php, web and conf directories. But this is the first impression.</p> <div class="content-separator" style="display: none:"></div> <p>Maintaining Wikidot is a bit more complex, because, files uploaded to sites are located in web, side to side with some static Wikidot php and javascript files. Also for historical reasons, there are web/files--common and web/files--local directories, which maps to /common--* and /local--* URLs and in fact, the files--local is never served directly by the web server (need to check permissions first).</p> <p>Also some time ago, we made static files versioned, so that we can apply more aggressive HTTP caching to them (reducing average page load time) and still be able to fix bugs on them without waiting a few days till the cache expire. In current model, URL to static file contains version hash, this may be for example: <a href="http://static.wikidot.com/v--b44e0ce810ee/common--javascript/WIKIDOT.js">http://static.wikidot.com/v--b44e0ce810ee/common--javascript/WIKIDOT.js</a> (notice the b44e0ce810ee). The whole static.wikidot.com is now hosted on Amazon's CloudFront, which means you get static Wikidot files from a server nearby your location and not always from USA.</p> <p>This all become quite complicated, so we decided to make things really clear and simple in the source code. The primary rule: make the source code (updatable from git) separate from files uploaded by users and generated by Wikidot. Second rule: make files that are automatically generated during installation (not in the runtime) separate from persistent files (like the uploaded by users) and from source code.</p> <p>And at the end there needs to be some place for logs and a place for temporary data (we need this to generate some random cool stuff, but after generating them, files are deleted).</p> <p>So we end up with something like this:</p> <ul> <li>WIKIDOT_ROOT <ul> <li><strong>data/</strong> <ul> <li>avatars/ — user avatars</li> <li>sites/ — site files (both generated thumbnails and uploaded files)</li> </ul> </li> <li><strong>generated/</strong> <ul> <li>static/ — generated static files. This dir can be server directly by a fast non-PHP webserver for static.wikidot.com in case we don't want CloudFront anymore</li> </ul> </li> <li><strong>tmp/</strong> — temporary files including Smarty compiled versions of templates. Content of this dir can be safely removed</li> <li><strong>logs/</strong> — Wikidot logs</li> <li>everything else — comes from git and is unchangeable by application</li> </ul> </li> </ul> <p>Application needs write-access to data, tmp and logs. Generated dir needs write access to one installing or upgrading application.</p> <p>Wikidot persistent data is now ONLY database and data/ directory, so it's easy to backup and restore the application (if you have enough time to make full backup of this).</p> <p>There is still one exception to this nice schema which is php/db/base directory, which is autogenerated during installation from XML database definition files, but the cleaning is not over, I still work on this.</p> <p>Nice thing about this work is that it does not need a lot of code changing, because directory paths are usually stored in one (max two) places in application, so this kind of totally reorganizing directory structure does not break things. As such, it is very very worth doing it. In the end we get clean internal structure of files and it's clear which files you can safely remove, which you can restore from git (and thus you can experiment a little on them — in case of crash, just re-download application), which are "state" of the Wikidot and where to look for logs.</p> <p>This all is also very important, because we aim to make current Wikidot.com source open and as such we want it to be a nice code.</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:file-systems-on-solid-state-drives-benchmark</guid>
				<title>File Systems On Solid State Drives Benchmark</title>
				<link>http://piotr.gabryjeluk.pl/dev:file-systems-on-solid-state-drives-benchmark</link>
				<description>

&lt;p&gt;Recently I bought a solid state hard disk for my laptop. All have heard that SSDs are faster and better, and help booting your OS faster. While it&#039;s all true, you need to face a fact, that no mature file system available for Linux is ready (optimized) for SSDs.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 13 Sep 2009 20:57:40 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Recently I bought a solid state hard disk for my laptop. All have heard that SSDs are faster and better, and help booting your OS faster. While it's all true, you need to face a fact, that no mature file system available for Linux is ready (optimized) for SSDs.</p> <div class="content-separator" style="display: none:"></div> <p>During last 20 years, file system (and kernel-side logic like write schedulers and disk buffers) were made to optimize use of hard disks — magnetic hard disks. The disks are now quite fast when you read or write 1&nbsp;GB file from them, but when you need to read 2000 small files that are located in different physical locations of the disk, their performance degrades.</p> <h1><span>Rotating disks</span></h1> <p>For the years, many developed systems (both software and hardware) to make as little disk seeks as possible. I've heard there are optimizations in kernel like: if you need to read a block that is 20 sectors after current position, don't seek, read the 19 useless sectors, and then read the meaningful one. I don't know if this is true and if yes, is this optimization of Linux kernel or some particular file system.</p> <h1><span>Solid State Drives</span></h1> <p>OK, so the file systems out there perform really well on rotating magnetic disk drives. So what about the solid state non-rotating disks. Are the previously talked optimizations good for them too? No. Solid state drives are not <em>as fast as</em> magnetic disks for sequential reads and writes, but they are much much better in random access to data. The seek time is approximately 0 (actually much less than 0.1&nbsp;ms, when magnetic disks have the seek time about 5&nbsp;ms).</p> <h1><span>SSD + File Systems?</span></h1> <p>On the other hand, there are quite a few new file systems that are meant to be run on SSD disks or at least are SSD-aware. I'm talking about <a href="http://www.nilfs.org">NILFS2</a> and <a href="http://btrfs.wiki.kernel.org">btrfs</a>. Unfortunately neither of them is stable in the sense of on-disk data format. This means that partitions created with current version of NILFS or btrfs may not be readable by future versions of these file systems. Thus it's not too nice to have important data on them.</p> <h1><span>Looking for a benchmark</span></h1> <p>So this is time when I have my expensive SSD in my hand and face serious problem of choosing the right file system to keep my data secure and fast to access. I searched for some benchmarks to compare the results of different file systems, both the old XFS, ReiserFS, ext2/3, the new ext4 and SSD-optimized btrfs and NILFS2. The number of benchmarks of these filesystems on SSD drives I found is 0. So time to make my own benchmark.</p> <h1><span>My benchmark</span></h1> <p>I want to benchmark the following file systems:</p> <ul> <li>ext2, ext3</li> <li>ext4</li> <li>xfs</li> <li>reiserfs, reiser4</li> <li>nilfs</li> <li>btrfs</li> <li>zfs (via fuse)</li> </ul> <p>I will use my new OCZ Agility 120&nbsp;GB SSD disk for this.</p> <p>As this option is used even for magnetic disks, I will append noatime to mount options for every file system I check.</p> <p>Also, I will try the following tweaks as suggested by random sites:</p> <ul> <li>using noop scheduler for disk IO: <tt>echo noop &gt; /sys/block/sdb/queue/scheduler</tt></li> <li>turning on and off write-back caching: <tt>hdparm -W1 /dev/sda</tt>, <tt>hdparm -W0 /dev/sda</tt></li> <li>discourage swapping (so that app data is kept in RAM and is not replaced with disk buffers, reading from SSD is damn fast anyway): <tt>sysctl -w vm.swappiness=1</tt></li> </ul> <p>For each setting, I'll make a test with bonnie++. I'll try to make nice graphs out of the data.</p> <p>If you want me to test more settings or file systems or have some suggestion about the benchmarking tools, feel free to leave a comment.</p> <p><strong>UPDATE:</strong> I will also perform one more test: time of launching Firefox, Claws Mail and Pidgin from encfs-encrypted .mozilla, .purple and .claws-mail directories with different underlying file systems. This is very common task for me (they all start automatically after logging in).</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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:problemy-z-netia</guid>
				<title>Problemy z Netią</title>
				<link>http://piotr.gabryjeluk.pl/dev:problemy-z-netia</link>
				<description>

&lt;p&gt;Dzisiaj rano ku mojemu zdziwieniu nie mogłem pobrać poczty z mojego serwera. Pomyślałem, że nie działa internet, ale działa. Druga myśl, serwer padł. O nie! Ale serwer działa (sprawdzone z serwera w firmie). Sprawdziłem jeszcze szybko inny serwer w naszej serwerowni i też nie działał. No to jasna sprawa, szybki tracepath i potencjalnie wadliwy router namierzony.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 04 Sep 2009 09:27:57 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Dzisiaj rano ku mojemu zdziwieniu nie mogłem pobrać poczty z mojego serwera. Pomyślałem, że nie działa internet, ale działa. Druga myśl, serwer padł. O nie! Ale serwer działa (sprawdzone z serwera w firmie). Sprawdziłem jeszcze szybko inny serwer w naszej serwerowni i też nie działał. No to jasna sprawa, szybki tracepath i potencjalnie wadliwy router namierzony.</p> <div class="content-separator" style="display: none:"></div> <p>Dzwonię czym prędzej do Netii, aby zgłosić mój problem, ale wpierw muszę zaktualizować swoje dane (które nie zmieniły się od początku trwania umowy). Więc podaję swój numer komórkowy i e-mail i już, już prawie szczęśliwy, że mogę opowiedzieć na czym polega problem zaczynam, aby dowiedzieć się, że:</p> <ul> <li>działa panu internet, a jakaś strona nie, to nie nasz problem</li> <li>pewnie ma pan wirusy (a może bakterie?)</li> <li>rozmawiam z osobą, która WIE co to jest PING, TRACEPATH i ROUTER, ale nie potrafi odpowiedzieć na prośbę:</li> </ul> <blockquote> <p>Czy mógłbym prosić, aby powiedziała mi Pani do jakiego adresu IP rozwiązuje się nazwa hetzner.de</p> </blockquote> <p>(Odpowiedzią na to pytanie było: ale Pan nie ma stałego IP i dlatego Pana nie widzę)</p> <p>Poprosiłem, aby kobieta zapingowała adres, który mi nie działa i niby jej działa. No to może faktycznie problem u mnie jakiś. Zrestartuję swój router i zobaczymy.</p> <p>Poprosiłem w międzyczasie Slafsa, który jeden z serwerów w firmie ma podpięty do internetu przez Netię, ażeby zapingował dla mnie hetzner.de i również nie dostał odpowiedzi, a tracepath zatrzymał się na tym samym hopie.</p> <p>Zadzwoniłem zatem drugi raz na infolinię. Tym razem odebrał mężczyzna. O niebo wolę rozmawiać o takich rzeczach z przedstawicielami tej samej płci. Przedstawiłem mu problem przekazując jak najmniej szczegółów. Zapytał jaki komunikat otrzymuję gdy próbuję otworzyć tę stronę. Powiedziałem, że próbuję zapingować ten serwer (co działa z internetu TPSA) i nie dostaję odpowiedzi, a gdy uruchamiam tracepath, to pakiet zatrzymuje się na konkretnym routerze. Dodałem, że problem dotyczy również innych serwerów w tej serwerowni i usłyszałem klarowne i oczekiwane:</p> <blockquote> <p>Rozumiem</p> </blockquote> <p>To było mocne. Kwintesencja męskiej komunikacji w jednym słowie. Po chwili dodał, że sprawdzi i pochwili wrócił do telefonu i powiedział, że jest problem (!), że wystawi zgłoszenie i sprawdzą, czy jest to problem masowy. Hurra!</p> <p>Będę mógł się podłączyć do jabberpl.org, żeby zalogować się do jabbera (jednego z kilku kont). Będę mógł sprawdzić pocztę nie korzystając z proxy SOCKS. Będę mógł zobaczyć stronę hetzner.de!</p> <p>Może to nieuczciwe, ale uważam, że kobiety nie powinny rozmawiać z klientami takimi jak ja. Następnym razem jak odbierze kobieta odkładam słuchawkę i próbuję natrafić na faceta :).</p> <p>Jeszcze naszła mnie refleksja, że dobrze byłoby widzieć aktualne problemy, które są znane pracownikom Netii i nad którymi pracują. Dobrym przykładem jest tutaj strona toruńskiego dostawcy internetu:</p> <p><a href="http://www.man.torun.pl/index.php?mod=tickets">http://www.man.torun.pl/index.php?mod=tickets</a></p> <p>Gdyby takie zestawienie było dostępne na stronach Netii, mógłbym śledzić na bieżąco rozwój wydarzeń. Scenariusz wydarzeń od rana mógłby wyglądać wtedy tak:</p> <ul> <li>nie działa mi poczta</li> <li>patrzę na stronach Netii, czy jest jakiś błąd</li> <li>nie ma błędu, to sobie patrzę, czy to mój problem</li> <li>nie jest to mój problem, więc dzwonię do Netii i zgłaszam</li> <li>w Netii aktualizują tę stronę jeśli uznają, że to faktycznie jest ich problem</li> <li>widzę, że to zrobili, czyli pracują nad tym (przynajmniej tak sobie myślę)</li> <li>za jakiś czas jest aktualizacja, że wymienili router gdzieś tam i, że będzie działać za godzinę</li> <li>za godzinę działa, problem na stronie przechodzi do archiwum</li> </ul> <p>Tutaj pojawia się wniosek taki sam jak z naszego ostatniego zepsucia się Wikidota:</p> <ul> <li>Ludzie nie są bardzo wkurzeni, że coś od czasu do czasu nie działa. Awarie się zdarzają</li> <li>Ludzie są wkurzeni, jak nie wiedzą dlaczego coś nie działa</li> <li>Ludzie są wkurzeni, gdy wiedzą, że jest awaria, a nikt nie chce im tego przyznać</li> </ul> <p>Jak poradziliśmy sobie z tym w przypadku Wikidota? Gdy usługa nie działała, uruchomiliśmy statyczną stronę HTML z opisem awarii (dość szczegółowym) i postępów w jej usuwaniu. Po awarii napisaliśmy co zrobimy, gdy zdarzy się coś podobnego w przyszłości. Ludzie szczęśliwi, bo wiedzą, że potrafimy rozwiązywać poważne problemy, więdzą, że nawet jak będzie awaria, to ich dane są bezpieczne, więdzą, że Wikidot nie zniknie ot tak pewnego dnia. Trochę są smutni, że dzisiaj Wikidot nie działa, ale się cieszą, że będzie działał jutro.</p> <p>I jeszcze mała ciekawostka:</p> <p><a href="http://www.wykop.pl/link/231750/sensacja-ipv6-powstaje-w-polsce-rotfl">IPv6 został opracowany w Bydgoszczy</a></p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></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-crashes</guid>
				<title>Wikidot Crashes</title>
				<link>http://piotr.gabryjeluk.pl/dev:wikidot-crashes</link>
				<description>

&lt;p&gt;Last night we made Wikidot online again after a great crash.&lt;/p&gt;
&lt;p&gt;Wikidot was down for about 12 hours and the time it was down was full of work for us. We got a few things that could be broken starting from recent changes of the Wikidot software, hardware failure, high load-related kernel bugs or limitations to connection number or maximum possible number or file descriptors.&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;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=2462)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/2/2462/a16.png&quot; alt=&quot;Gabrys&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&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, 27 Aug 2009 13:03:23 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Last night we made Wikidot online again after a great crash.</p> <p>Wikidot was down for about 12 hours and the time it was down was full of work for us. We got a few things that could be broken starting from recent changes of the Wikidot software, hardware failure, high load-related kernel bugs or limitations to connection number or maximum possible number or file descriptors.</p> <div class="content-separator" style="display: none:"></div> <p>The problem is Wikidot kind of worked, so some people had their sites loading, some other not and getting "500" errors. We didn't want to stop it, but at some point Wikidot was completely unusable. We switched the database to the other machine, but this was not the solution, then we switched all Wikidot traffic to the machine, still no good, we switched the software to some previous version, but this still seemed bad.</p> <p>Finally we worked out, there was a site, that had so big traffic, that it killed anything else (and itself as well). When we temporarily disabled it, the whole Wikidot started to work nicely again. Then Michał made some improvements for the high traffic site serving and the situation is stable again.</p> <p>In the middle of everything, we had huge problems with our hosting company and their service called Portable IP addresses. It seems that switching DNS is much more reliable that using Portable IPs that took hours to switch (and were supposed to take seconds to switch)! DNS switching time was 15 minutes.</p> <p>We learned a lot from the situation. Hardware upgrade postponed from really long time needs to be done quite quickly. We need more servers, to see which element breaks. For example if database server has high load, we know we need to tune database settings. If we have all on one massive server and one brick on it crashes, it usually causes all the server overloaded and this causes other bricks to crash as well, so it's hard too tell what the real problem is.</p> <p>Another thing is that we see our users want information on what happens. It's bad when Wikidot crashes, but it's even worse, when it crashes and they have no information about this.</p> <p>So, the next time a similar disaster happens we'll update on each technical detail possible, to let you know, that we know it's broken and we work hard to fix it. Other thing is, we plan having more fail-over servers in case something dies.</p> <p>Thank you all for using Wikidot, it's a great pleasure working (and fixing things) for you!</p> <p>by <span class="printuser avatarhover"><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank"><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/2/2462/a16.png" alt="Gabrys" style="background-image:url(http://www.wikidot.com/userkarma.php?u=2462)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/2/2462/a16.png" alt="Gabrys" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=2462,sizingMethod='scale')"/><![endif]--></a><a href="http://piotr.gabryjeluk.pl/profile2:2462" target="_blank">Gabrys</a></span></p> 
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>