<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Karol 'grzywacz' Nowak</title>
	<atom:link href="http://knowak.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://knowak.wordpress.com</link>
	<description>:(){ :&#124;:&#38; };:</description>
	<lastBuildDate>Sat, 05 Nov 2011 18:13:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='knowak.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Karol 'grzywacz' Nowak</title>
		<link>http://knowak.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://knowak.wordpress.com/osd.xml" title="Karol &#039;grzywacz&#039; Nowak" />
	<atom:link rel='hub' href='http://knowak.wordpress.com/?pushpress=hub'/>
		<item>
		<title>GCI 2011</title>
		<link>http://knowak.wordpress.com/2011/11/05/gci-2011/</link>
		<comments>http://knowak.wordpress.com/2011/11/05/gci-2011/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 18:11:50 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[GCI]]></category>
		<category><![CDATA[GHOP]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=223</guid>
		<description><![CDATA[So, Google is running an another edition of Google Code-In this year. I&#8217;ve been involved in its very first edition (called Google Highly Open Participation Contest) for the MoinMoin wiki project. Long story short, I volunteered to help this year too. It will probably be just one small task, but I&#8217;m looking forward to it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=223&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, Google is running an another edition of <a href="http://code.google.com/gci" title="GCI" target="_blank">Google Code-In</a> this year. I&#8217;ve been involved in its very first edition (called Google Highly Open Participation Contest) for the <a href="http://moinmo.in" title="MoinMoin Wiki" target="_blank">MoinMoin wiki project</a>. Long story short, I volunteered to help this year too. It will probably be just one small task, but I&#8217;m looking forward to it anyway.</p>
<p><img src="http://code.google.com/opensource/gci/2011-12/gci_logo.jpg" alt="GCI 2011 Logo" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=223&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2011/11/05/gci-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>

		<media:content url="http://code.google.com/opensource/gci/2011-12/gci_logo.jpg" medium="image">
			<media:title type="html">GCI 2011 Logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Kind of pretty</title>
		<link>http://knowak.wordpress.com/2011/09/21/kind-of-pretty/</link>
		<comments>http://knowak.wordpress.com/2011/09/21/kind-of-pretty/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 19:32:22 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Math]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=219</guid>
		<description><![CDATA[Somehow I find this graph pretty: It shows integers from [0, 100000] range (blue) and sums of their digits to 2nd, 3rd and 4th power. Scale of the Y axis is obviously logarithmic.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=219&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Somehow I find this graph pretty:</p>
<p><a href="http://knowak.files.wordpress.com/2011/09/digisums.png"><img src="http://knowak.files.wordpress.com/2011/09/digisums.png?w=300&#038;h=177" alt="" title="Digit sum powers" width="300" height="177" class="aligncenter size-medium wp-image-220" /></a></p>
<p>It shows integers from [0, 100000] range (blue) and sums of their digits to 2nd, 3rd and 4th power. Scale of the Y axis is obviously logarithmic.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/219/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=219&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2011/09/21/kind-of-pretty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2011/09/digisums.png?w=300" medium="image">
			<media:title type="html">Digit sum powers</media:title>
		</media:content>
	</item>
		<item>
		<title>HP server management tools</title>
		<link>http://knowak.wordpress.com/2011/04/26/server-management/</link>
		<comments>http://knowak.wordpress.com/2011/04/26/server-management/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 14:46:44 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=215</guid>
		<description><![CDATA[Turns out HP has some useful tools on supported Linux boxes. The little hpasmcli utility can display and alter basic server configuration options related to boot, hardware configuration and troubleshooting. One can, for example, examine which memory modules failed following ECC errors being spotted in kernel log.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=215&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Turns out HP has some useful tools on supported Linux boxes. The little <a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBYQFjAA&amp;url=http%3A%2F%2Fh50146.www5.hp.com%2Fproducts%2Fsoftware%2Foe%2Flinux%2Fmainstream%2Fsupport%2Fdoc%2Fgeneral%2Fmgmt%2Fima%2Fv790%2Fhpasmcli.txt&amp;rct=j&amp;q=hpasmcli&amp;ei=39m2Tf-HIMO2twfBjO13&amp;usg=AFQjCNE16cEFdU2aY3DiDapfvvqNKXSicg&amp;sig2=w3Jc8DWoxp9DZj4bG8Kr-w&amp;cad=rja">hpasmcli </a>utility can display and alter basic server configuration options related to boot, hardware configuration and troubleshooting. One can, for example, examine which memory modules failed following ECC errors being spotted in kernel log.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=215&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2011/04/26/server-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>
	</item>
		<item>
		<title>UI design failure</title>
		<link>http://knowak.wordpress.com/2010/02/01/ui-design-failure/</link>
		<comments>http://knowak.wordpress.com/2010/02/01/ui-design-failure/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 23:27:50 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Amarok]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=160</guid>
		<description><![CDATA[Today&#8217;s example comes from Amarok (1.4.10). Turns out the Stop button doesn&#8217;t stop the song immediately anymore. Instead, it presents the user with a following menu, which lets (forces!) her to specify when playback should be stopped! The options are: Now At the end of the current track At the end of the queue<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=160&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s example comes from Amarok (1.4.10). Turns out the Stop button doesn&#8217;t stop the song immediately anymore. Instead, it presents the user with a following menu, which lets (<strong>forces!</strong>) her to specify when playback should be stopped!</p>
<p><a href="http://knowak.files.wordpress.com/2010/02/uifail.png"><img src="http://knowak.files.wordpress.com/2010/02/uifail.png?w=241&#038;h=119" alt="" title="Amarok - Stop button madness" class="aligncenter size-full wp-image-161" width="241" height="119"></a></p>
<p>The options are:</p>
<ul>
<li>Now</li>
<li>At the end of the current track</li>
<li>At the end of the queue</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=160&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2010/02/01/ui-design-failure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2010/02/uifail.png" medium="image">
			<media:title type="html">Amarok - Stop button madness</media:title>
		</media:content>
	</item>
		<item>
		<title>Amazon failed</title>
		<link>http://knowak.wordpress.com/2009/09/08/amazon-failed/</link>
		<comments>http://knowak.wordpress.com/2009/09/08/amazon-failed/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 08:47:03 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=149</guid>
		<description><![CDATA[I&#8217;ve just received my order from Amazon and it&#8217;s in a very, very sorry state. Two books have been pretty much destroyed, one is badly damaged, the rest is not in an ideal state either. I started to fill a refund form in, but they require sending the items back in case of required replacement [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=149&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just received my order from Amazon and it&#8217;s in a very, very sorry state. Two books have been pretty much destroyed, one is badly damaged, the rest is not in an ideal state either. I started to fill a refund form in, but they require sending the items back in case of required replacement and, frankly, it doesn&#8217;t make much sense in this case. Let&#8217;s see how their customer support reacts to these photos first.</p>
<p>Needless to say, I&#8217;m <strong>very</strong> disappointed&#8230;</p>

<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0922_small/' title='IMG_0922_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0922_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0922_small" title="IMG_0922_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0923_small/' title='IMG_0923_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0923_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0923_small" title="IMG_0923_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0929_small/' title='IMG_0929_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0929_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0929_small" title="IMG_0929_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0927_small/' title='IMG_0927_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0927_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0927_small" title="IMG_0927_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0928_small/' title='IMG_0928_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0928_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0928_small" title="IMG_0928_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0932_small/' title='IMG_0932_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0932_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0932_small" title="IMG_0932_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0925_small/' title='IMG_0925_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0925_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0925_small" title="IMG_0925_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0924_small/' title='IMG_0924_small'><img width="112" height="150" src="http://knowak.files.wordpress.com/2009/09/img_0924_small.jpg?w=112&#038;h=150" class="attachment-thumbnail" alt="IMG_0924_small" title="IMG_0924_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0934_small/' title='IMG_0934_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0934_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0934_small" title="IMG_0934_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0933_small/' title='IMG_0933_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0933_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0933_small" title="IMG_0933_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0935_small/' title='IMG_0935_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0935_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0935_small" title="IMG_0935_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0936_small/' title='IMG_0936_small'><img width="150" height="112" src="http://knowak.files.wordpress.com/2009/09/img_0936_small.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="IMG_0936_small" title="IMG_0936_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0930_small/' title='IMG_0930_small'><img width="112" height="150" src="http://knowak.files.wordpress.com/2009/09/img_0930_small.jpg?w=112&#038;h=150" class="attachment-thumbnail" alt="IMG_0930_small" title="IMG_0930_small" /></a>
<a href='http://knowak.wordpress.com/2009/09/08/amazon-failed/img_0926_small/' title='IMG_0926_small'><img width="112" height="150" src="http://knowak.files.wordpress.com/2009/09/img_0926_small.jpg?w=112&#038;h=150" class="attachment-thumbnail" alt="IMG_0926_small" title="IMG_0926_small" /></a>

<h3>Update</h3>
<p>I think it would be unfair if I didn&#8217;t mention how this issue has been resolved &#8211; Amazon sent me replacements of the most damaged books in priority mail without making me return the damaged copies. A customer saved.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=149&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2009/09/08/amazon-failed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0922_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0922_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0923_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0923_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0929_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0929_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0927_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0927_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0928_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0928_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0932_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0932_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0925_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0925_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0924_small.jpg?w=112" medium="image">
			<media:title type="html">IMG_0924_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0934_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0934_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0933_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0933_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0935_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0935_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0936_small.jpg?w=150" medium="image">
			<media:title type="html">IMG_0936_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0930_small.jpg?w=112" medium="image">
			<media:title type="html">IMG_0930_small</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/09/img_0926_small.jpg?w=112" medium="image">
			<media:title type="html">IMG_0926_small</media:title>
		</media:content>
	</item>
		<item>
		<title>S.M.A.R.T. data visualization</title>
		<link>http://knowak.wordpress.com/2009/07/27/s-m-a-r-t-data-visualization/</link>
		<comments>http://knowak.wordpress.com/2009/07/27/s-m-a-r-t-data-visualization/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 22:12:02 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=126</guid>
		<description><![CDATA[Today, I got worried about two consecutive changes of the &#8216;ECC Recovered Errors&#8217; parameter reported by SMART on my desktop machine: Device: /dev/disk/by-id/scsi-SATA_ST3200827AS_4ND2DF00, SMART Usage Attribute: 195 Hardware_ECC_Recovered changed from 67 to 66 Device: /dev/disk/by-id/scsi-SATA_ST3200827AS_4ND2DF00, SMART Usage Attribute: 195 Hardware_ECC_Recovered changed from 66 to 65 That prompted me to see if there have been any [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=126&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:left;">Today, I got worried about two consecutive changes of the &#8216;ECC Recovered Errors&#8217; parameter reported by SMART on my desktop machine:</p>
<p style="text-align:left;"><em>Device: /dev/disk/by-id/scsi-SATA_ST3200827AS_4ND2DF00, SMART Usage Attribute: 195 Hardware_ECC_Recovered changed from 67 to 66</em></p>
<p style="text-align:left;"><em><br />
Device: /dev/disk/by-id/scsi-SATA_ST3200827AS_4ND2DF00, SMART Usage Attribute: 195 Hardware_ECC_Recovered changed from 66 to 65</em></p>
<p style="text-align:left;">That prompted me to see if there have been any similar events recently. Two lines of shell script were more than enough to reassure me that nothing bad was going on:</p>
<pre style="text-align:left;">grep ECC /var/log/messages | egrep -o 'from [[:digit:]]+' | cut -f2 -d' ' &gt; data</pre>
<p style="text-align:left;">And then with gnuplot:</p>
<pre style="text-align:left;">gnuplot&gt; plot 'data' with lines</pre>
<p style="text-align:left;">I got this:</p>
<pre style="text-align:left;">

<div id="attachment_127" class="wp-caption alignleft" style="width: 510px"><img class="size-full wp-image-127" title="SMART values graph" src="http://knowak.files.wordpress.com/2009/07/ecc.png?w=500&#038;h=381" alt="SMART values graph" width="500" height="381" /><p class="wp-caption-text">SMART values graph</p></div></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/126/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=126&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2009/07/27/s-m-a-r-t-data-visualization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>

		<media:content url="http://knowak.files.wordpress.com/2009/07/ecc.png" medium="image">
			<media:title type="html">SMART values graph</media:title>
		</media:content>
	</item>
		<item>
		<title>C++ static analysis</title>
		<link>http://knowak.wordpress.com/2009/07/06/c-static-analysis/</link>
		<comments>http://knowak.wordpress.com/2009/07/06/c-static-analysis/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 20:15:19 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Wesnoth]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=124</guid>
		<description><![CDATA[Yesterday I was looking for a free C++ static analysis tool that I could use on Wesnoth code base and found cppcheck. It&#8217;s actually quite nice and supports running tests in parallel (much appreciated quality in the increasingly multi-core world). I&#8217;m yet to compare it with other tools, but thanks to cppcheck I&#8217;ve already fixed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=124&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I was looking for a free C++ static analysis tool that I could use on <a href="http://wesnoth.org">Wesnoth</a> code base and found <a title="cppcheck" href="http://cppcheck.wiki.sourceforge.net/">cppcheck</a>. It&#8217;s actually quite nice and supports running tests in parallel (much appreciated quality in the increasingly multi-core world). I&#8217;m yet to compare it with other tools, but thanks to cppcheck I&#8217;ve already fixed <a href="https://mail.gna.org/public/wesnoth-commits/2009-07/msg00150.html">this</a>, <a href="https://mail.gna.org/public/wesnoth-commits/2009-07/msg00153.html">this</a> and <a href="https://mail.gna.org/public/wesnoth-commits/2009-07/msg00149.html">this</a>.</p>
<p>Sadly, compared to Java there are very few similar tools that support C++&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/124/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=124&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2009/07/06/c-static-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>
	</item>
		<item>
		<title>A glance at offshoring discussions</title>
		<link>http://knowak.wordpress.com/2008/12/14/a-glance-at-offshoring-discussions/</link>
		<comments>http://knowak.wordpress.com/2008/12/14/a-glance-at-offshoring-discussions/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 18:59:50 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=103</guid>
		<description><![CDATA[I&#8217;ve been reading through some discussions on LinkedIn, regarding offshoring practices as performed by companies located in the US and, oh boy, this topic does bring out some emotions. I don&#8217;t know how volatile these posts are, so instead of linking to them directly, I&#8217;ll just quote without mentioning any names. I hope they are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=103&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been reading through some discussions on LinkedIn, regarding offshoring practices as performed by companies located in the US and, oh boy, this topic does bring out some emotions. I don&#8217;t know how volatile these posts are, so instead of linking to them directly, I&#8217;ll just quote without mentioning any names. I hope they are easy enough to find given the titles.</p>
<p>Let&#8217;s start with this sneaky attempt at suggesting some general racial/national problems to analyze:</p>
<blockquote>
<h3><em>Should Gartner do research on the quality of code produced in India?</em></h3>
</blockquote>
<blockquote><p><em>Would you find value if Gartner were to perform extensive research to provide insight into the question of whether Americans write better code than their Indian counterparts? Does code written in India have more OWASP Top Ten vulnerabilities than code written onshore? The perspectives of IT executives and how they make tradeoffs on quality for cost?</em></p></blockquote>
<p>While most of the responses are balanced and in good faith, it&#8217;s not unusual to see a retaliatory &#8220;answer&#8221;:</p>
<blockquote><p><em>I think Gartner should research quality of code produced in America, exclusively&#8230; and Indians should stop writing code on services projects for america.</em></p></blockquote>
<p>Let&#8217;s take an another topic:</p>
<blockquote>
<h3><em>What european country do you suggest to outsourcing/offshoring software development?</em></h3>
</blockquote>
<p>While probably not intended to be so, I found these comments quite amusing:</p>
<blockquote><p><em>Try outsourcing to the Midwest. (United states).<br />
You&#8217;d be surprised at your cost savings over the life of the project.</em></p></blockquote>
<p>Or:</p>
<blockquote><p><em>How about outsourcing to USA.<br />
Contact -[email removed for obvious reasons]</em></p></blockquote>
<p>Way to go! Obviously, not everyone likes peaceful means of promotion/competition, and replies along these lines happen as well:</p>
<blockquote><p><em>I&#8217;m sorry, with very few exceptions, any US company that outsources/offshores its software development should be boycotted.</em></p></blockquote>
<p>The topic is &#8220;hot&#8221; right now. Different kinds of arguments related to the state of economy are being brought up and I believe what can be found in these posts is just a tip of the iceberg &#8211; the moods are probably much worse than that&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=103&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2008/12/14/a-glance-at-offshoring-discussions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>
	</item>
		<item>
		<title>Uruchamianie programu w Linuksie</title>
		<link>http://knowak.wordpress.com/2008/11/08/uruchamianie-programu-w-linuksie/</link>
		<comments>http://knowak.wordpress.com/2008/11/08/uruchamianie-programu-w-linuksie/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 21:32:16 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[DSO]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[linker]]></category>
		<category><![CDATA[recovery]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=69</guid>
		<description><![CDATA[Note: this is the original paper as I wrote it a long time ago, when I still was a student. I&#8217;m publishing it here in Polish, hoping that someone will find it useful. English version is going to be released soon. Po polsku Poniższy wpis wyjaśnia jak uruchamiane są programy łączone dynamicznie w Linuksie, choć [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=69&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Note</strong>: <em>this is the original paper as I wrote it a long time ago, when I still was a student. I&#8217;m publishing it here in Polish, hoping that someone will find it useful. English version is going to be released soon.</em></p>
<h3><em>Po polsku</em></h3>
<p>Poniższy wpis wyjaśnia jak uruchamiane są programy łączone dynamicznie w Linuksie, choć podaję też przykłady pochodzące z Solarisa. Grupą docelową nie są doświadczeni administratorzy, a raczej osoby dopiero zaczynające swoją przygodę z systemami wywodzącymi się od Uniksa, więc zostawiłem w nim potencjalnie trywialne fragmenty.</p>
<h3>Wstęp</h3>
<p>Pewnego razu znajomemu administratorowi przydarzyła się taka oto historia: próbując stworzyć sobie &#8220;system w systemie&#8221; (odseparowany przy pomocy <em>chroot</em>a) zabrał się za tworzenie nowej struktury katalogowej dla zagnieżdżonego środowiska. Stworzył więc katalog <em>/newroot</em>, a następnie zaczął wypełniać go kopiami plików z systemu pierwotnego. O tyle niefortunnie, że zamiast skopiować (<em>cp</em>), przeniósł (<em>mv</em>) katalogi <em>/bin</em> oraz <em>/lib</em> (<em>mv</em>), skutecznie psując system. W efekcie tej pochopnej operacji, ważne programy zaczęły zachowywać się, na przykład, w następujący sposób:</p>
<pre>host:/newroot/bin/# ./cp
-su: ./cp: Nie ma takiego pliku ani katalogu</pre>
<p>Komunikat bardzo mylący, gdyż plik <em>cp</em> oczywiście istniał w katalogu <em>/newroot/bin</em>.</p>
<p>Jak się okazało, istnieje elegancki sposób wybrnięcia z tej sytuacji, lecz by wyjaśnić to zachowanie, musimy zrozumieć systemowe mechanizmy odpowiedzialne za obsługę bibliotek współdzielonych oraz ich rolę w działaniu całego środowiska. Na zakończenie, oprócz pokazania sposobu rozwiązania takiego problemu, pokażę alternatywną metodę częściowego zabezpieczenia się przed awariami związanymi z brakiem lub uszkodzeniem systemowych bibliotek.</p>
<p>Zakładam przy tym, że znasz pojęcia <a href="http://en.wikipedia.org/wiki/Kernel_(computer_science)">jądra</a>, <a href="http://en.wikipedia.org/wiki/Process_(computing)">procesu</a>, <a href="http://en.wikipedia.org/wiki/Shared_library#Shared_libraries">bibliotek współdzielonych</a>, <a href="http://en.wikipedia.org/wiki/Address_space">przestrzeni adresowej</a> oraz <a href="http://en.wikipedia.org/wiki/Memory-mapped_file">mapowania plików do pamięci</a>, gdyż ich znajomość jest potrzebna do zrozumienia dalszej części tekstu.</p>
<h3>Struktura pliku programu</h3>
<p>Aby program mógł zostać uruchomiony przez system operacyjny, musi być zapisany w pliku o odpowiedniej strukturze. Aktualnie w świecie systemów uniksowych króluje format ELF (Executable and Linking Format), więc poniższe informacje podane są w jego kontekście. Funkcjonujące dawniej formaty a.out i COFF pomijamy.</p>
<p>Zacznijmy od zbadania przykładowego pliku wykonywalnego (<em>/bin/ls</em>) przy pomocy narzędzia <em><strong>readelf</strong></em>, wypisującego w czytelnej dla człowieka formie informacje zgromadzone w nagłówku oraz <em>sekcjach</em> plików w formacie ELF.</p>
<p>Wynik działania programu powinien wyglądać tak:</p>
<pre>% readelf -h /bin/ls
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x4025d0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          87432 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         10
  Size of section headers:           64 (bytes)
  Number of section headers:         27
  Section header string table index: 26</pre>
<p>Widzimy kolejno:</p>
<ol>
<li>&#8220;Magiczny numer&#8221; (Magic), dzięki któremu możliwe jest rozpoznanie formatu pliku</li>
<li>Klasę (Class), określającą architekturę (32 lub 64 bity), do której przystosowany jest plik</li>
<li>Interfejs binarny (OS/ABI), z którego korzysta plik wykonywalny</li>
<li>Rodzaj maszyny (Machine), dla której przeznaczony jest kod</li>
<li>Punkt wejścia (Entry point address), czyli adres, od którego zaczyna się wykonywanie programu</li>
<li>Dane określające liczbę oraz rozmiar dodatkowych nagłówków i sekcji</li>
</ol>
<p>Oprócz tych ogólnych informacji, w wykonywalnym pliku w formacie ELF znajdują się jeszcze metadane opisujące dokładne wymagania programu, takie jak adresy pamięci, pod którymi mają znaleźć się sekcje pliku oraz wymagane biblioteki wraz z importowanymi z nich symbolami. Przyjrzymy się im w dalszej części wpisu.</p>
<h3>Uruchamianie</h3>
<p>Uruchamiania łączonego dynamicznie programu jest dość skomplikowanym procesem, który zaczyna się w momencie wywołania funkcji z rodziny <em>exec</em>, zapewniającej różnorodne interfejsy do systemowego wywołania <em>execve</em>, którego rolą jest załadowanie do przestrzeni adresowej procesu kodu nowego programu oraz przygotowanie środowiska do jego wykonania. W przypadku Linuksa, proces ten można przedstawić skrótowo jako listę następujących kroków:</p>
<ol>
<li>Sprawdzenie formatu pliku wykonywalnego i, jeśli jest on obsługiwany, rozpoczęcie jego przetwarzania</li>
<li>Odczyt części nagłówka pliku, opisującego segmenty programu</li>
<li>Zwolnienie zasobów związanych z poprzednim kontekstem wykonania (m.in. usunięcie przyporządkowania stron pamięci, aktualizacja procedur obsługi sygnałów)</li>
<li>Alokacja pamięci na stos trybu użytkownika, zmienne środowiskowe, argumenty podane z linii poleceń oraz kod i część danych uruchamianego programu</li>
<li>Mapowanie segmentów pliku pod odpowiednie adresy w przestrzeni procesu</li>
<li>Powtórzenie kroku 6 dla interpretera programu (wybranego na podstawie nagłówka)</li>
<li>Zakończenie wykonania wywołania systemowego &#8211; proces zaczyna wykonywać kod interpretera, który po zakończeniu pracy wykonuje skok do punktu wejścia programu, rozpoczynając wykonanie właściwego kodu</li>
</ol>
<p>Powyższy wykaz operacji jest bardzo uproszczony. Pełen opis z dokładnym uwzględnieniem operacji wykonywanych w trybie jądra znaleźć można m.in. w książce &#8220;Linux kernel&#8221; [1], oraz oczywiście w kodzie jądra.</p>
<p>Skorzystajmy ponownie z narzędzia <em>readelf</em>, by obejrzeć zawartość nagłówka programu (skrócona wersja poniżej):</p>
<pre>rogram Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
                 0x0000000000000230 0x0000000000000230  R E    8
  INTERP         0x0000000000000270 0x0000000000400270 0x0000000000400270
                 0x000000000000001c 0x000000000000001c  R      1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x0000000000013f4c 0x0000000000013f4c  R E    200000
  LOAD           0x0000000000014df0 0x0000000000614df0 0x0000000000614df0
                 0x00000000000006c0 0x0000000000000c60  RW     200000
  DYNAMIC        0x0000000000014e18 0x0000000000614e18 0x0000000000614e18
                 0x00000000000001c0 0x00000000000001c0  RW     8
  NOTE           0x000000000000028c 0x000000000040028c 0x000000000040028c
                 0x0000000000000020 0x0000000000000020  R      4
  GNU_EH_FRAME   0x0000000000011f3c 0x0000000000411f3c 0x0000000000411f3c
                 0x0000000000000694 0x0000000000000694  R      4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     8
  GNU_RELRO      0x0000000000014df0 0x0000000000614df0 0x0000000000614df0
                 0x0000000000000210 0x0000000000000210  R      1
  PAX_FLAGS      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000         8</pre>
<p>Oprócz wpisów określających części pliku oraz odpowiadające im adresy w przestrzeni adresowej procesu, interesuje nas linia INTERP, która określa <strong>interpreter programu</strong>, który ma zostać załadowany i uruchomiony przez jądro na końcu wywołania <em>execve</em>. Wpis ten ma znaczenie tylko w przypadku plików wykonywalnych (choć może pojawić się też w plikach obiektów). Oczywiście, jeśli interpreter nie zostanie znaleziony, lub jądro nie będzie mogło umieścić go w przestrzeni adresowej procesu, uruchomienie programu się nie powiedzie.</p>
<p><strong>Dygresja:</strong> Interpreter znajduje się zazwyczaj w katalogach <em>/lib</em> lub <em>/libexec</em>, dlatego operacje na nich należy wykonywać z odpowiednią ostrożnością &#8211; uszkodzenie go może doprowadzić od poważnej awarii systemu.</p>
<h3>Wiązanie dynamiczne</h3>
<p>Skompilowane (łączone dynamicznie) programy, które można znaleźć w katalogach <em>/bin</em>, <em>/usr/bin</em>, itd., nie nadają się do bezpośredniego uruchomienia (załadowania kodu do pamięci i rozpoczęcie jego wykonywania przez procesor) z dwóch powodów:</p>
<ul>
<li>Ich kod jest niezależny od miejsca w pamięci, w którym się znajduje (PIC &#8211; Position Independent Code), a co za tym idzie &#8211; początkowo część referencji do pamięci nie wskazuje na jej poprawne w danym kontekście fragmenty. Muszą one zostać odpowiednio ustawione.</li>
<li>W przestrzeni adresowej procesu nie jest dostępny wymagany kod, należący do bibliotek współdzielonych, a referencje do <em>symboli</em> (nazwanych adresów, pod którymi znajduje się kod lub obiekty) nie posiadają poprawnych wartości.</li>
</ul>
<p>Nim sterowanie zostanie przekazane pod adres wskazany przez punkt wejściowy programu, powyższe elementy muszą zostać odpowiednio zainicjowane przez linker dynamiczny. Wykonywanie kodu właściwego programu może rozpocząć się dopiero po przeprowadzeniu odpowiedniego mapowania oraz serii <em>relokacji</em>. Chcąc skupić się na przedstawionym na początku problemie, omówimy tylko kwestię ładowania bibliotek.</p>
<p>Jak już wcześniej wspomniałem, w przestrzeni adresowej procesu musi znaleźć się mapowany kod. Przy pomocy narzędzia <strong><em>strace</em></strong>, śledzącego wywołania systemowe wykonywane przez proces, pokażemy, że linker faktycznie odpowiednio wypełnia przestrzeń adresową przy pomocy funkcji <em>mmap</em>. Wykonajmy <em>strace /bin/ls 2&gt;&amp;1 | less</em> i znajdźmy w wyniku poniższy fragment:</p>
<pre>open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\2\1\1\3&gt;\1\220\334\1"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1293456, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdab4233000
mmap(NULL, 3399928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdab38fd000
mprotect(0x7fdab3a33000, 2093056, PROT_NONE) = 0
mmap(0x7fdab3c32000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x135000) = 0x7fdab3c32000
mmap(0x7fdab3c37000, 16632, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdab3c37000
close(3)                                = 0</pre>
<p>Co robi linker?</p>
<ul>
<li><em>open()</em> &#8211; otwiera plik biblioteki w trybie tylko do odczytu; będzie on dostępny pod deskryptorem o numerze 3</li>
<li><em>read()</em> &#8211; odczytuje jego nagłówek, by zdobyć informacje o formacie pliku (czy to na pewno biblioteka?) oraz rozmieszczeniu danych</li>
<li><em>fstat()</em> &#8211; sprawdza, czy otwarty plik jest zwykłym plikiem, co jest istotne z punktu widzenia późniejszych wywołań <em>mmap()</em>; również sprawdza jego rozmiar</li>
<li><em>mmap()</em> &#8211; drugie wywołanie mapuje cały plik w trybie tylko do odczytu z ustawioną flagą pozwalającą na wykonanie &#8211; domyślnie kod nie jest zapisywalny; mapowanie jest prywatne, więc ewentualne zmiany nie zostaną wprowadzone do pliku</li>
<li><em>mmap()</em> &#8211; trzecie wywołanie mapuje część pliku zezwalając na zapis do tego obszaru pamięci; można się spodziewać, że w tej części znajdują się statyczne dane używane przez bibliotekę</li>
<li><em>close()</em> &#8211; zamyka plik</li>
</ul>
<p>Pozostałe wywołania nie są w tym momencie istotne. Podobne fragmenty pojawią się w wyniku działania <em>strace</em> jeszcze kilka razy, kolejno dla wszystkich ładowanych bibliotek. Wprowadzane zmiany odniesień do pamięci w programie oczywiście nie są widoczne, bo przebiegają bez udziału jądra systemu operacyjnego. Po zakończeniu pracy linkera, zaczyna się wykonywanie kodu programu.</p>
<p><strong>Dygresja<em></em>:</strong> Rozmieszczenie wszystkich segmentów w przestrzeni adresowej procesu można w Linuksie odczytać z pliku <em>/proc/PID/maps</em>, gdzie PID oznacza identyfikator interesującego nas procesu.</p>
<h3>Słowo o środowisku</h3>
<p>Nim przystąpimy do rozwiązywania postawionego na początku problemu, musimy zdać sobie sprawdę z jednego faktu: linker dynamiczny wykonuje się w przestrzeni adresowej przeznaczonej dla nowo uruchamianego programu. Ma zatem dostęp do jego argumentów oraz zmiennych środowiskowych. Dzięki temu mamy możliwość ingerowania w jego działanie przy pomocy odpowiednich zmiennych środowiskowych. Dwie z nich są szczególnie interesujące:</p>
<ul>
<li>LD_LIBRARY_PATH &#8211; określa listę ścieżek, które mają być dodatkowo przeszukiwane pod kątem potrzebnych bibliotek; umożliwia korzystanie z bibliotek znajdujących się w miejscach nie przeszukiwanych standardowo oraz nie określonych przez konfigurację linkera (<em>/etc/ld.so.conf</em>).</li>
<li>LD_PRELOAD &#8211; określa listę bibliotek, które mają być załadowane przed wszystkimi innymi, określonymi w nagłówkach programu; umożliwia zastępowanie symboli (mówiąc potocznie, umożliwia &#8220;podmianę&#8221; bibliotecznych funkcji oraz obiektów, gdyż symbole dopasowywane są tylko raz)</li>
</ul>
<h3>Rozwiązanie problemu</h3>
<p>Znamy już mechanizm uruchamiania programów w systemach uniksowych, możemy więc przystąpić do analizy przedstawionego na początku wpisu problemu.</p>
<p>Możemy się już domyślić, że dziwnie brzmiący komunikat wyniknął z faktu, że jądro systemu nie odnalazło pliku zawierającego potrzebny mu interpreter, określony w nagłówku pliku programu. Gdyby problem sprowadzał się wyłącznie do braku biblioteki współdzielonej, zostalibyśmy o tym poinformowani w bardziej czytelny sposób, a rozwiązanie byłoby trywialne. Co można zrobić w takiej sytuacji?</p>
<ul>
<li><strong>Przenieść (<em>mv</em>, <em>cp</em>) plik linkera do pierwotnego katalogu</strong><br />
Jeśli programy <em>mv</em> i <em>cp</em> są łączone dynamicznie, a tak było w tym przypadku, nie można ich użyć do tego celu (nie da się ich uruchomić!)</li>
<li><strong>Stworzyć kopię linkera wyłącznie przy użyciu wewnętrznych poleceń powłoki<br />
</strong>Polecenia wewnętrzne, jak nazwa wskazuje, nie uruchamiają zewnętrznych programów. O ile w sytuacji awaryjnej mamy uruchomioną powłokę, można próbować z nich korzystać. Przykładowe zastosowanie poleceń wewnętrznych (<em>read </em>i <em>echo</em>) oraz mechanizmu przekierowań:</p>
<pre>% read tresc &lt; plik
% echo $tresc &gt; plik2</pre>
<p>Niestety, jądro odmawia załadowania linkera z pliku, który nie ma ustawionych praw wykonania. Z kolei, by je ustawić potrzebny jest program <em>chmod</em>, którego nie możemy uruchomić z powodu braku interpretera. Powyższy przykład ma też dość poważną wadę polegającą na tym, że z dużym prawdopodobieństwem uszkodzi &#8220;kopiowany&#8221; plik.</li>
</ul>
<p>Pech. W ogólnym przypadku, z poziomu działającego systemu nie jesteśmy w stanie zaradzić takiej sytuacji &#8211; potrzebne jest środowisko ratunkowe (np. płyta CD z możliwym do uruchomienia systemem). Rozwiązanie to, oczywiście, nie jest dobre &#8211; w przypadku maszyny pełniącej istotną funkcję nie chcemy powodować dodatkowych przestojów. Co jeszcze nam zostało?</p>
<ul>
<li><strong>Posiadać zestaw podstawowych narzędzi linkowanych statycznie<br />
</strong>Rzeczywiście, jeśli podstawowe narzędzia systemowe skompilowano statycznie, powyższy problem w ogóle się nie pojawi. Jest to doskonałe zabezpieczenie przed problemami związanymi z obsługą ważnych bibliotek współdzielonych.</li>
</ul>
<ul>
<li><strong>Poinstruować system, gdzie szukać linkera dynamicznego<br />
</strong>Pomysł dobry, ale niewykonalny &#8211; taki mechanizm po prostu nie istnieje. Jednak użytkownicy GNU/Linuksa oraz Solarisa mogą skorzystać z dość specyficznej cechy dostępnych w ich systemach linkerów. Pamiętamy, że jest to w gruncie rzeczy normalny program (uruchamiany zazwyczaj przez jądro systemu) z odpowiednim punktem wejściowym. Okazuje się, że w tych systemach istnieje możliwość uruchomienia <em>/lib/ld-linux*.so</em> lub <em>/lib/ld.so.1</em> z podaniem programu, który ma zostać załadowany i obsłużony przez linker! Zatem mając interesujące nas pliki w katalogu <em>/newroot</em> możemy użyć tej możliwości w następujący sposób:</p>
<pre>% export LD_LIBRARY_PATH=/newroot/lib
% /newroot/lib/ld-2.3.6.so /newroot/bin/mv /newroot/lib /</pre>
<p>Czyli: ustawiamy niestandardową ścieżkę, pod którą linker ma szukać bibliotek (potrzebna, bo wskazuje miejsce, gdzie znajdują się wymagane przez <em>mv</em> pliki), a następnie uruchamiamy <em>mv</em>, przenosząc potrzebne pliki na ich miejsce! <em>Voila</em>! Przywróciliśmy system do stanu pełnej sprawności!</li>
</ul>
<h3>Do zastanowienia się</h3>
<p>Zachęcam do zastanowienia się nad implikacjami faktów przedstawionych w tym wpisie. Pozwolę sobie pomóc, ale przy użyciu metody sokratejskiej:</p>
<ul>
<li>Badając przy pomocy narzędzia <em>ldd</em> najważniejsze programy narzędziowe w systemie &#8211; jaka biblioteka pojawia się na liście najczęściej i co z tego wynika?</li>
<li>Kod biblioteczny mapowany jest do przestrzeni adresowej procesu z pliku. Czy nadpisanie pliku zawierającego kod biblioteki współdzielonej to dobry pomysł?</li>
<li>Zakładając, że powyższe to zły pomysł, to jak zaktualizować bibliotekę współdzieloną jeśli jest ona używana przez działający proces?</li>
<li>Rozważmy sytuację, w której program <em>/bin/secret</em> używa funkcji <em>strcmp</em> ze standardowej biblioteki języka C do porównania skrótu wprowadzonego hasła z zakodowanym wzorcem i na podstawie wyniku tej operacji zapewnia dostęp do ściśle tajnych informacji. Stwórz bibliotekę zawierającą funkcję <em>strcmp</em>, która zawsze zwraca wartość wskazującą identyczność argumentów, a następnie spraw, by <em>/bin/secret</em> akceptował każde wprowadzone hasło.</li>
<li>Jakie implikacje dla bezpieczeństwa systemu ma powyższy punkt? Czy linker dynamiczny honoruje ustawienia zmiennych LD_PRELOAD i LD_LIBRARY_PATH jeśli wykonywany jest program z ustawionym bitem SUID?</li>
</ul>
<h3>Bibliografia</h3>
<ul>
<li>[1] (Daniel P. Bovet, Marco Cesati, O&#8217;Reilly, Wydawnictwo RM, Warszawa 2001</li>
</ul>
<p><img src="///tmp/moz-screenshot-1.png" alt="" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=69&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2008/11/08/uruchamianie-programu-w-linuksie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>

		<media:content url="///tmp/moz-screenshot-1.png" medium="image" />
	</item>
		<item>
		<title>git</title>
		<link>http://knowak.wordpress.com/2008/10/12/git/</link>
		<comments>http://knowak.wordpress.com/2008/10/12/git/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 16:24:03 +0000</pubDate>
		<dc:creator>knowak</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Wesnoth]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://knowak.wordpress.com/?p=59</guid>
		<description><![CDATA[I started to use git a few days ago. I&#8217;m still a fan of Mercurial, but git turned out to be &#8220;a must&#8221; due to the number of &#8220;Battle of Wesnoth&#8221; developers switching to it, and thanks to rather seamless integration with Subversion. The other reason is that I&#8217;ve been looking for a DVCS tool [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=59&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I started to use git a few days ago. I&#8217;m still a fan of Mercurial, but git turned out to be &#8220;a must&#8221; due to the number of &#8220;Battle of Wesnoth&#8221; developers switching to it, and thanks to rather seamless integration with Subversion.</p>
<p>The other reason is that I&#8217;ve been looking for a DVCS tool to use as a front-end to an SVN repository I use at work, with a possibility of converting at least one other open-minded guy to that paradigm. Of course, in this case solid integration with the existing (and mandatory&#8230;) tool is a must, so git scored an another point.</p>
<p>So far, it seems to work, and reasonably fast at that. Getting it to run on Cygwin was a pain in the neck, though, because for some reason git opens its internal files in text-mode (ugh), which leads to problems with index getting corrupted (CRLF/LF) if Cygwin file systems are <strong>not</strong> mounted in binmode. Careful there.</p>
<p>I&#8217;ve also hit a problem with Subversion import, most likely caused by some branching mess in our development history (empty directories being created in branches/ with no data, then being deleted, then being recreated as proper branches). Don&#8217;t ask why it&#8217;s like that. I probably have a bug to report, once I have it tested on a simple test case. As it is, inspection of the branching history shows branches where nothing has been branched, and merges when a branch was created. Ouch.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/knowak.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/knowak.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/knowak.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/knowak.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/knowak.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/knowak.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/knowak.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/knowak.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/knowak.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/knowak.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/knowak.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/knowak.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/knowak.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/knowak.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=knowak.wordpress.com&amp;blog=2121008&amp;post=59&amp;subd=knowak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://knowak.wordpress.com/2008/10/12/git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e7a4b8ee941d64aada19535196a28a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grzywacz</media:title>
		</media:content>
	</item>
	</channel>
</rss>
