<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.haraldkraft.de</title>
	<atom:link href="http://blog.haraldkraft.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.haraldkraft.de</link>
	<description>Blog Project of Harald Kraft</description>
	<lastBuildDate>Sat, 05 May 2012 17:17:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>domain part @gmx.net is evil</title>
		<link>http://blog.haraldkraft.de/2012/05/domain-part-gmx-net-is-evil/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=domain-part-gmx-net-is-evil</link>
		<comments>http://blog.haraldkraft.de/2012/05/domain-part-gmx-net-is-evil/#comments</comments>
		<pubDate>Sat, 05 May 2012 17:17:35 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[Life and People]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[evil]]></category>
		<category><![CDATA[gmx]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=502</guid>
		<description><![CDATA[First of all, let me point out that the title (and content of this article) does not read out &#8220;GMX is evil&#8221;. I like GMX, but imho they made a mistake in enabling @gmx.net as a possible domain part in their free email service. GMX (short for Global Message eXchange) was founded as a German <a href='http://blog.haraldkraft.de/2012/05/domain-part-gmx-net-is-evil/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">First of all, let me point out that the title (and content of this article) does <strong>not</strong> read out &#8220;GMX is evil&#8221;. I like GMX, but imho they made a mistake in enabling <em>@gmx.net</em> as a possible domain part in their free email service.</p>
<p style="text-align: justify;">GMX (short for <em>Global Message eXchange</em>) was founded as a German company and is now owned by United Internet. The most popular service back in the days (and maybe still today) was their freemail service.</p>
<p><span id="more-502"></span></p>
<p style="text-align: justify;">When users registered an email account with their service, they could choose an individual local-part of the email address and choose from a list of domain-parts (because GMX owned several domains).<br />
The earliest choices I do remember were gmx.de, gmx.com and gmx.net &#8211; later on they added domains like gmx.at and gmx.li (even though I have to admit, the very beginning in 1997 might have been just gmx.de, as I wasn&#8217;t using their service back then). The list grew bigger with other TLDs and various new domain names.</p>
<p style="text-align: justify;">But to cut to the chase: whereas practically all TLDs are localized and therefore bare a certain mark (in addition to <em>.com</em> carrying the stigma of being special), <em>.net</em> has undefined attributes. My guess is, people decided to use @gmx.net because they didn&#8217;t want to use .com with a German email account (because back then .com equaled English in our minds) or when desired email addresses were already taken with @gmx.de .<br />
However, the main problem with @gmx.net was that in our minds there weren&#8217;t enough characteristics to longterm differentiate it from @gmx.de . After a while people forgot whether an email address used @gmx.net or @gmx.de (maybe not their own but pretty much every other email address that wasn&#8217;t in an address book).<br />
The first email address I registered with GMX (and one I&#8217;m still primarily using for private contacts) ended in @gmx.de &#8211; the local-part is very easy to remember and I thought people might actually remember the email address without having to write it down. I have since then encountered a myriad of occasions when people asked me if my email was @gmx.de or @gmx.net! It even got to the point where people wrote emails to @gmx.net because they could only remember the local-part. That&#8217;s when I also registered the same local-part but with @gmx.net . The effect is, I actually do get all emails intended for me &#8211; but people still ask me the evil question.</p>
<p style="text-align: justify;">That said, I still like using GMX and considering the fact that many people actually do remember this very old address by heart I would never give it up. However, it&#8217;s not only sort of annoying to be asked about the domain-part, but I&#8217;m just angry at GMX for ever having created that domain choice <img src='http://blog.haraldkraft.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=502" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2012/05/domain-part-gmx-net-is-evil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IMAP is evil</title>
		<link>http://blog.haraldkraft.de/2012/04/imap-is-evil/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=imap-is-evil</link>
		<comments>http://blog.haraldkraft.de/2012/04/imap-is-evil/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 11:54:11 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[Life and People]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[evil]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[pop]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=494</guid>
		<description><![CDATA[Nobody sane who cares about keeping emails uses IMAP! Apart from a few other things (stay tuned) in the IT world, IMAP is a very prominent example of evil. Many people today claim that nobody uses POP anymore and most email providers nowadays offer access via IMAP. But they couldn&#8217;t be further from the truth. <a href='http://blog.haraldkraft.de/2012/04/imap-is-evil/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Nobody sane who cares about <em>keeping</em> emails uses IMAP!</p>
<p style="text-align: justify;">Apart from a few other things (stay tuned) in the IT world, IMAP is a very prominent example of evil.<br />
Many people today claim that nobody uses POP anymore and most email providers nowadays offer access via IMAP. But they couldn&#8217;t be further from the truth.</p>
<p style="text-align: justify;">Once you&#8217;ve used IMAP and lost (more or less important) emails, you start hating it and might move back to POP.</p>
<p><span id="more-494"></span></p>
<p style="text-align: justify;">The basic issue is this: as soon as email clients treat an account as IMAP they are keen on synchronizing, no matter what.<br />
If you&#8217;re without internet connection, you might not see any emails (which you had already loaded previously). If you delete emails in one client, it gets deleted on the server (which is the idea) and on all other clients with the same account once they synchronize (which is also the idea).<br />
However, this might not be what the user wants. If I&#8217;m without internet connection, I would still like to be able to read previously viewed emails. If I delete emails from one client, it doesn&#8217;t necessarily mean I want to consequently delete it on all other clients. Furthermore, once deleted (on the client and hence also on the server) there&#8217;s hardly any way to get the email back &#8211; same thing applies if you move email inter- and intra-folderwise (and the client and/or server might implement this by deletion). Even if you [accidentally] delete an email on one client and would like to restore it via another client (that had previously loaded the email) which you intentionally unplug from the internet before it could do the sync magic, you might not be successful because the client won&#8217;t show you any emails until you synchronize.</p>
<p style="text-align: justify;">Bottom line, if you care about keeping emails (without having to meet extra measures concerning backup) it is not a good idea to use IMAP.<br />
And as a side note: I agree, not all clients follow the above example(s), however most do <img src='http://blog.haraldkraft.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=494" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2012/04/imap-is-evil/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SMS extractor for iPhone now supports iMessages correctly</title>
		<link>http://blog.haraldkraft.de/2012/03/sms-extractor-for-iphone-now-supports-imessages-correctly/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sms-extractor-for-iphone-now-supports-imessages-correctly</link>
		<comments>http://blog.haraldkraft.de/2012/03/sms-extractor-for-iphone-now-supports-imessages-correctly/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 14:19:44 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Life and People]]></category>
		<category><![CDATA[iMessage]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[text messages]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=484</guid>
		<description><![CDATA[It took me a while until I would finally face the issue about iMessages (and their date). The latest released version of the SMS extractor was able to deal with iOS 5 containers and would already also extract iMessages &#8211; however with a wrong date. In order to fix this, I had to treat iMessages <a href='http://blog.haraldkraft.de/2012/03/sms-extractor-for-iphone-now-supports-imessages-correctly/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">It took me a while until I would finally face the issue about iMessages (and their date). The <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAxMi8wMS91cGRhdGVkLWFuZC11bmlmaWVkLXZlcnNpb24tb2Ytc3RhbmRhbG9uZS1zbXMtZXh0cmFjdG9yLWZvci1pcGhvbmUv" title=\"Updated and unified version of standalone SMS extractor for iPhone\">latest released version</a> of the SMS extractor was able to deal with iOS 5 containers and would already also extract iMessages &#8211; however with a wrong date.</p>
<p style="text-align: justify;">In order to fix this, I had to treat iMessages as a special case. Thing is, in order to still be able and deal with container files prior to iOS 5 (and the program stay universal), the fact whether iMessages can appear needs to be determined <em>before</em> the actual message retrieval is done. So far I&#8217;ve been too lazy to approach this issue, that&#8217;s why it took a while. (And yes, I hate legacy support, but I hate it even more when users are left out who don&#8217;t or can&#8217;t update for some reason!)</p>
<p><span id="more-484"></span></p>
<p style="text-align: justify;">Thanks to Tom Offermann a.k.a. <em>toffer</em> (<a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cHM6Ly9naXRodWIuY29tL3RvZmZlcg==">over at github</a>) I now know that iMessages store their date starting to count seconds since 01.01.2001. So converting that into a human readable timestamp needs to be done differently than normal text messages. Furthermore iMessages carry new special flags (<em>madrid_flags</em>), which determine whether an iMessage was sent or received (among other additional information). These new flags were also taken into account to keep up the feature of extracting only incoming or outgoing messages.</p>
<p style="text-align: center;">You can retrieve the code of the updated standalone version <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvd3AtY29udGVudC91cGxvYWRzLzIwMTIvMDMvZXh0cmFjdF9zbXMucGhwXzIwMTIwMzEzLnR4dA==">here</a>.</p>
<p style="text-align: center;"><a rel=\"license\" href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLw=="><img style="border-width: 0;" src="http://i.creativecommons.org/l/by/3.0/88x31.png" alt="Creative Commons License" /></a><br />
This work is licensed under a <a rel=\"license\" href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLw==">Creative Commons Attribution 3.0 Unported License</a>.</p>
<p style="text-align: justify;">In case you need instructions on how to work with the standalone version, please refer to the <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAxMS8wNS9zbXMtZXh0cmFjdG9yLWZvci1pcGhvbmUtd3JpdHRlbi1pbi1waHAv" title=\"SMS Extractor for iPhone (written in PHP)\">very original release post</a>.</p>
<p style="text-align: justify;">Also, naturally, the update was included in the <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2hhcmFsZGtyYWZ0LmRlL3Ntcy1leHRyYWN0b3Iv" title=\"online SMS / text message extraction from iPhone\">online version</a> of the extractor!</p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=484" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2012/03/sms-extractor-for-iphone-now-supports-imessages-correctly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do a Barrel Roll</title>
		<link>http://blog.haraldkraft.de/2012/02/do-a-barrel-roll/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=do-a-barrel-roll</link>
		<comments>http://blog.haraldkraft.de/2012/02/do-a-barrel-roll/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 12:38:33 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Life and People]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[barrel roll]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=473</guid>
		<description><![CDATA[I know, I&#8217;m kind of late, but when I found out about Google&#8217;s &#8220;Do a Barrel Roll&#8221; just recently, I had to try this out myself and wanna blog about it. (On a side note: seriously, how nerdy is it if you want to type &#8220;myself&#8221; but instead type &#8220;mysql&#8221;? Having to write this sentence <a href='http://blog.haraldkraft.de/2012/02/do-a-barrel-roll/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">I know, I&#8217;m kind of late, but when I found out about Google&#8217;s <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPWRvK2ErYmFycmVsK3JvbGw=" title=\"Do a Barrel Roll\">&#8220;Do a Barrel Roll&#8221;</a> just recently, I had to try this out myself and wanna blog about it.<br />
(On a side note: seriously, how nerdy is it if you want to type &#8220;myself&#8221; but instead type &#8220;mysql&#8221;? Having to write this sentence was already a chore)</p>
<p style="text-align: justify">If you clicked the above link and if your browser is sort of up-to-date, you will have witnessed the Google website to spin about and stop again when at its original position. It <em>did a barrel roll</em>.</p>
<p style="text-align: justify">Now the interesting part is the actual techniques behind it as the whole thing is done via CSS. It makes use of two new things in CSS3: keyframes and animations.</p>
<p><span id="more-473"></span></p>
<p style="text-align: justify">I included the same example on my website, which will execute if called with <em>barrel</em> as a GET parameter: <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2hhcmFsZGtyYWZ0LmRlLz9iYXJyZWw=" title=\"haraldkraft.de: Do a Barrel Roll\">haraldkraft.de/?barrel</a> (Repeat the process by clicking the barrel icon)<br />
When you check the source code, you will find the inclusion of barrelrole.css, which containes the keyframes and animation rulesets for Webkit, Firefox and Opera (however, for me it&#8217;s not working in Opera, yet):</p>
<p></p><pre class="crayon-plain-tag">@-webkit-keyframes barrelroll {
from { -webkit-transform: rotate(0deg) }
to   { -webkit-transform: rotate(360deg) }
}

@-o-keyframes barrelroll {
from { -moz-transform: rotate(0deg) }
to   { -moz-transform: rotate(360deg) }
}

@-moz-keyframes barrelroll {
from { -moz-transform: rotate(0deg) }
to   { -moz-transform: rotate(360deg) }
}

@keyframes barrelroll {
from { transform: rotate(0deg) }
to   { transform: rotate(360deg) }
}

body {
-moz-animation-name: barrelroll;
-moz-animation-duration: 4s;
-moz-animation-iteration-count: 1;
-o-animation-name: barrelroll;
-o-animation-duration: 4s;
-o-animation-iteration-count: 1;
-webkit-animation-name: barrelroll;
-webkit-animation-duration: 4s;
-webkit-animation-iteration-count: 1;
}</pre><p></p>
<p style="text-align: justify">Once this CSS code is interpreted by the browser, it will spin the website (0-360 degrees) one time (iteration-count 1) over a period of 4 seconds (duration 4s).</p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=473" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2012/02/do-a-barrel-roll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updated and unified version of standalone SMS extractor for iPhone</title>
		<link>http://blog.haraldkraft.de/2012/01/updated-and-unified-version-of-standalone-sms-extractor-for-iphone/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=updated-and-unified-version-of-standalone-sms-extractor-for-iphone</link>
		<comments>http://blog.haraldkraft.de/2012/01/updated-and-unified-version-of-standalone-sms-extractor-for-iphone/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 22:21:14 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[Life and People]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[standalone]]></category>
		<category><![CDATA[text messages]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=453</guid>
		<description><![CDATA[Last year I released a script written in PHP which was able to extract text messages from the iPhone (more specifically: from the SQLite storage container) into a simple TXT file, which was documented in this blog post. The software required a PHP interpreter, which had to be cared for by the user (check the <a href='http://blog.haraldkraft.de/2012/01/updated-and-unified-version-of-standalone-sms-extractor-for-iphone/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Last year I released a script written in PHP which was able to extract text messages from the iPhone (more specifically: from the SQLite storage container) into a simple TXT file, which was documented in <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAxMS8wNS9zbXMtZXh0cmFjdG9yLWZvci1pcGhvbmUtd3JpdHRlbi1pbi1waHAv" title=\"SMS Extractor for iPhone (written in PHP)\">this blog post</a>. The software required a PHP interpreter, which had to be cared for by the user (check the blog post for details), but was published under <em>CC BY 3.0</em> so the user could make any alteration he desired or deemed necessary.<br />
Some time later I wrote an <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2hhcmFsZGtyYWZ0LmRlL3Ntcy1leHRyYWN0b3Iv" title=\"SMS / text message extraction from iPhone\">online version</a> of the extractor (<a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAxMS8wNi9zbXMtZXh0cmFjdG9yLWZvci1pcGhvbmUtd3JpdHRlbi1pbi1waHAtb25saW5lLXZlcnNpb24v" title=\"Free SMS Extractor for iPhone (written in PHP) – online version\">release blog post</a>), which offered extended functionality and above all no longer needed the user to run the interpreter him- or herself.<br />
However, due to the lack of time I couldn&#8217;t keep the standalone version up to date with the online version and so they diverged.</p>
<p><span id="more-453"></span></p>
<p style="text-align: justify;">As of now I am publishing the updated code of the standalone version, which has partially been re-written in two ways: for one it now comprises of the same functionality as the online version, and for another the coding structure has been reorganized so I can keep the two versions in unison easier. This means that any update or change made to the software will be applied to both versions: the online version will make use of the update whereas the standalone version will be published open source under the same license with the updated code.</p>
<p style="text-align: center;">You can download the updated code <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvP2F0dGFjaG1lbnRfaWQ9NDY0">here</a>.</p>
<p style="text-align: center;"><a rel=\"license\" href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLw=="><img style="border-width: 0;" src="http://i.creativecommons.org/l/by/3.0/88x31.png" alt="Creative Commons License" /></a><br />
This work is licensed under a <a rel=\"license\" href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLw==">Creative Commons Attribution 3.0 Unported License</a>.</p>
<p style="text-align: justify;">Let me quickly list the options which the new standalone version offers (i.e. the differences to the original publication), which are about user customizations:</p>
<ul>
<li><strong>$OUTFILE_TYPE = &#8220;TXT&#8221;</strong><br />
defines whether the type of the output should be in text (<em>TXT</em>) or comma-separated values (<em>CSV</em>). Please note that the file extension you define for <em>$OUTFILE</em> as part of the filename is not taken into consideration; so  e.g. if you want to output a CSV file, setting the outfile name to &#8220;outfile.csv&#8221; is not enough, you need to specifically set <em>$OUTFILE_TYPE</em> to CSV.</li>
<li><strong>$NEWLINE = &#8220;\n&#8221;</strong><br />
defines the format of the system dependent newline. Use <em>\r\n</em> on Windows and <em>\n</em> on Unix/Linux and Mac.</li>
<li>default file opening mode is now &#8220;overwrite&#8221; ( <strong>$f_handle = fopen( $OUTFILE, “w” );</strong> ). If you would like to append extracted text message to the output file rather than overwrite the file use &#8220;<em>a</em>&#8221; instead of &#8220;<em>w</em>&#8220;. Note that the line now moved towards the end of the file.</li>
<li>Change format of output of single text messages<br />
In case of <em>TXT</em> you need to change <strong>$OUTSTRING .= &#8220;$time$senderror$NEWLINE$address$NEWLINE$text$NEWLINE$NEWLINE$NEWLINE&#8221;;</strong> to your liking and in case of <em>CSV</em> change <strong>$OUTSTRING .= &#8220;$address,$time,\&#8221;" . str_replace( &#8220;\&#8221;", &#8220;\&#8221;\&#8221;", $text) . &#8220;\&#8221;$NEWLINE&#8221;;</strong>.<br />
Make sure you only change the format string and leave the <strong>.=</strong> intact <img src='http://blog.haraldkraft.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</li>
</ul>
<p style="text-align: justify;">If you are a new user to this and don&#8217;t know what to do about the <em>user specific CONFIGURATION</em> section or how to run the script, please refer to the <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAxMS8wNS9zbXMtZXh0cmFjdG9yLWZvci1pcGhvbmUtd3JpdHRlbi1pbi1waHAv" title=\"SMS Extractor for iPhone (written in PHP)\">original blog post</a>, which explains in detail how the standalone version works.</p>
<p style="text-align: justify;">As always you can <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=bWFpbHRvOiU2MiU2QyU2RiU2NyU0MCU2OCU2MSU3MiU2MSU2QyU2NCU2QiU3MiU2MSU2NiU3NCUyRSU2NCU2NQ==">contact me</a> with any remarks you would like to bring to my attention.</p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=453" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2012/01/updated-and-unified-version-of-standalone-sms-extractor-for-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebug&#8217;s &#8220;Aborted&#8221; message upon AJAX request</title>
		<link>http://blog.haraldkraft.de/2011/12/firebugs-aborted-message-upon-ajax-request/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=firebugs-aborted-message-upon-ajax-request</link>
		<comments>http://blog.haraldkraft.de/2011/12/firebugs-aborted-message-upon-ajax-request/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 14:08:57 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[aborted]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[dragonfly]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[xml http request]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=418</guid>
		<description><![CDATA[A while ago I encountered this error in Firebug during my work with AJAX techniques but never really documented it &#8211; so here we go. The scenario is simple: a number of asynchronous requests are done via JavaScript and many of them Firebug will list as Aborted. I attached screenshots below. What seemed mysterious was <a href='http://blog.haraldkraft.de/2011/12/firebugs-aborted-message-upon-ajax-request/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">A while ago I encountered this error in Firebug during my work with AJAX techniques but never really documented it &#8211; so here we go.</p>
<p style="text-align: justify;">The scenario is simple: a number of asynchronous requests are done via JavaScript and many of them Firebug will list as <em>Aborted</em>. I attached screenshots below.</p>
<p style="text-align: justify;">What seemed mysterious was that these requests were done at completely different locations in the code, which didn&#8217;t have any relation to one another. Furthermore I didn&#8217;t render the fact problematic that some of the requests were shuffled amongst each other &#8211; that&#8217;s what AJAX was for &#8230;</p>
<p><span id="more-418"></span></p>
<p style="text-align: justify;">However &#8211; of course the answer was <em>PEBKAC</em> &#8211; I was using the <strong>same</strong> XMLHttpRequest object from the different locations over and over not caring whether the previous request had returned or not. The browser is left with no other option than to stop the already open request of the object and start a new one. Firebug shows this behavior by the label &#8220;Aborted&#8221; in the HTTP Status column, I don&#8217;t think this is a term used in the standards. For example Opera&#8217;s Dragonfly calls it &#8220;n/a&#8221;, which is probably even more correct in ways of &#8220;the HTTP status code is not available&#8221;, but does not give the developer any clue about what happened.</p>
<p style="text-align: justify;">Bottom line: I encountered many &#8220;Aborted&#8221; messages in Firebug with AJAX because I was using the same XHR object for simultaneous connections. Maybe some other folks with the same problem will stumble across this blog and find peace <img src='http://blog.haraldkraft.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p style="text-align: justify;">Here is an simple example of how to reproduce the issue:</p>
<ul>
<li>A minimal HTML page including the separate Javascript file and calling an entry function <em>wrapper( )</em> on load:</li>
<p></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
    
&lt;html&gt;  
    &lt;head&gt;
        &lt;title&gt;Testpage for firebug abort problem&lt;/title&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;./script.js&quot;&gt;&lt;/script&gt;
    &lt;/head&gt;

    &lt;body onload=&quot;wrapper();&quot;&gt;
        &lt;div&gt;
            &lt;h1&gt;testpage for firebug abort problem&lt;/h1&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre><p></p>
<li>A separate JavaScript file with the entry function that will call the interfering procedures. The procedures have to be called asynchronously (third parameter of <em>open( )</em> is set to <em>true</em>) otherwise the browser would wait for the return (or a browser specific timeout):</li>
<p></p><pre class="crayon-plain-tag">function createRequestObject() {
    if( navigator.appName == &quot;Microsoft Internet Explorer&quot; ) {
        return new ActiveXObject( &quot;Microsoft.XMLHTTP&quot; );
    }
    
    return new XMLHttpRequest();
}

var xhttp = createRequestObject();
        
function wrapper() {
    ajax_sleep( 5 );
    ajax_sleep( 1 );
    ajax_sleep( 1 );
}

function ajax_sleep( seconds ) {
    xhttp.open( &quot;GET&quot;, &quot;./sleep.php?seconds=&quot;+seconds, true );
    xhttp.onreadystatechange = handleResponse;
    xhttp.send(null);
}

function handleResponse() {
    if( xhttp.readyState == 4 ) {
        var response = xhttp.responseText;
        alert( response );
    }
}</pre><p></p>
<li>An external PHP script that will do nothing but sleep for the expected amount of seconds:</li>
<p></p><pre class="crayon-plain-tag">&lt;?php

$seconds = $_GET['seconds'];
sleep( $seconds );

print( &quot;slept for $seconds sec(s)&quot; );

?&gt;</pre><p>
</ul>
<p>And here are the screenshots with the mentioned error messages:</p>
<ul>
<li>Firebug console:</li>
<p><a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMTIvZmlyZWJ1Zy1jb25zb2xlLWFqYXgtYWJvcnRlZC5wbmc="><img src="http://blog.haraldkraft.de/wp-content/uploads/2011/12/firebug-console-ajax-aborted-300x49.png" alt="&quot;Aborted&quot; message in Firebug&#039;s console upon AJAX request" title="firebug-console-ajax-aborted" width="300" height="49" class="aligncenter size-medium wp-image-423" /></a></p>
<li>Firebug net view:</li>
<p><a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMTIvZmlyZWJ1Zy1uZXQtYWpheC1hYm9ydGVkLnBuZw=="><img src="http://blog.haraldkraft.de/wp-content/uploads/2011/12/firebug-net-ajax-aborted-300x47.png" alt="&quot;Aborted&quot; message in Firebug&#039;s net view upon AJAX request" title="firebug-net-ajax-aborted" width="300" height="47" class="aligncenter size-medium wp-image-421" /></a></p>
<li>Opera&#8217;s Dragonfly network view:</li>
<p><a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMTIvb3BlcmEtZHJhZ29uZmx5LWFqYXgtbi1hLnBuZw=="><img src="http://blog.haraldkraft.de/wp-content/uploads/2011/12/opera-dragonfly-ajax-n-a-300x69.png" alt="&quot;n/a&quot; message in Opera&#039;s Dragonfly network view upon AJAX request" title="opera-dragonfly-ajax-n-a" width="300" height="69" class="aligncenter size-medium wp-image-422" /></a>
</ul>
<p></p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=418" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2011/12/firebugs-aborted-message-upon-ajax-request/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The story of an occasional Virgin Mobile cell phone</title>
		<link>http://blog.haraldkraft.de/2011/12/the-story-of-an-occasional-virgin-mobile-cell-phone/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-story-of-an-occasional-virgin-mobile-cell-phone</link>
		<comments>http://blog.haraldkraft.de/2011/12/the-story-of-an-occasional-virgin-mobile-cell-phone/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 19:14:25 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[Life and People]]></category>
		<category><![CDATA[cell phone]]></category>
		<category><![CDATA[customer service]]></category>
		<category><![CDATA[paypal]]></category>
		<category><![CDATA[top-up]]></category>
		<category><![CDATA[virgin mobile]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=401</guid>
		<description><![CDATA[For the past few years I&#8217;ve been using a Virgin Mobile cell phone every time I spent time in the United States. Because this was happening only once a year (meaning the rest of the year I&#8217;d be outside of the US and any US signal) I would use a plan that was good for <a href='http://blog.haraldkraft.de/2011/12/the-story-of-an-occasional-virgin-mobile-cell-phone/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">For the past few years I&#8217;ve been using a Virgin Mobile cell phone every time I spent time in the United States. Because this was happening only once a year (meaning the rest of the year I&#8217;d be outside of the US and any US signal) I would use a plan that was good for a month and then just stop topping up until I would get back into the country. Of course this meant that I would lose the phone number and get a new one every time I got back; but since this was a holiday phone (in different places of the country with different contacts) that was totally fine. Besides, I know people who change their phone numbers (and email addresses) almost every month &#8211; and yes, I am being a bit dramatic here btw.</p>
<p style="text-align: justify;">This year&#8217;s trip to Miami shouldn&#8217;t be any different: (re-)activate phone (=get a new number), top-up, fire away (=get to know ppl and write lots of texts).<br />
However, this time it turned out to be sort of a chore, which I&#8217;ll be trying to document here.</p>
<p><span id="more-401"></span></p>
<p style="text-align: justify;">Like I said, the first step would be to activate my phone and get a number. The last time I did this I was using the dial programming code <strong>##847446#</strong> (which works on every VM phone), following the steps and getting a text with the new number. However this time the process couldn&#8217;t be completed and I got a note to call customer service (<em>1-888-322-1122</em>). Trying to do so failed with an announcement &#8220;<em>Sorry, your phone has not been activated, yet. Please call customer service</em>&#8220;. Great, so I can&#8217;t call customer service to activate this phone using the phone; furthermore the hotel would charge $1/min for toll-free numbers (very logical I have to admit). Luckily I also brought my home iPhone and the hotel offered free WiFi, plus I have an American VoIP account.<br />
Using my iPhone and VoIP I finally called customer service and went through the steps of activating the phone: get a new VM account (unlike the last time, when I could just re-use the old one) with a new number, program the phone with the new MSN and MSID and getting an activation notice. However, in order to top up I again had to link my PayPal account to VM (would have been too easy if I could have just reused the old VM account where that step had already been done last year -_-).</p>
<p style="text-align: justify;">Getting off the phone with support I went onto the website, logged into my new account and started out to connect my PayPal account. Having done that I wanted top-up &#8211; right away just like last time. However, for two reasons I was unable to complete the process: it took me a long while to figure out what the exact amount for topping-up was (would be so easy if you American guys could include VAT before labeling the total &#8211; just like the rest of the world -_-) and second the form field didn&#8217;t let me put in cent values.</p>
<p>Means, I would call the service line again. This time with the newly activated phone <img src='http://blog.haraldkraft.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p style="text-align: justify;">I described my problem and the woman said it would be no problem to issue the PayPal payment over the phone. Her telling me the final total and me giving her confirmation to hit &#8220;go&#8221;, it didn&#8217;t go through. Also following tries returned an error and she put me on hold in order to find out what the problem was. After a few minutes she got back to me and told me that this was a very rare issue and I should wait 4 hours and try it again. Apparently sometimes there is a grace period that needs to pass until the PayPal connection can be used.</p>
<p style="text-align: justify;">It being in the middle of the night already I decided to <em>get</em> some rest and <em>give</em> this a rest until morning.</p>
<p style="text-align: justify;">Before I&#8217;d call their number again I wanted to give it a last shot. But on their website I couldn&#8217;t use the PayPal option anymore. Great. Instead I then tried to use my credit card &#8211; however they require a US address and entering my hotel address didn&#8217;t work (even though it was just an electronic billing address).</p>
<p style="text-align: justify;">So there I was dialing customer support again. Explaining the situation didn&#8217;t really help, but this time it even got worse. The woman blamed PayPal and something being wrong with that account &#8211; yeah right, as I had also just used it for something else and it aas working just fine. Nevertheless she didn&#8217;t give into giving the PayPal option another try, but instead she insisted on giving me the support number offered by PayPal. So much for that.</p>
<p style="text-align: justify;">Honestly I didn&#8217;t even bother calling PayPal because I knew there was nothing wrong with the account. I basically gave up on &#8220;just pay as much as needed for exactly one month use&#8221; and went to a local store buying a top-up card, which &#8211; of course &#8211; wasn&#8217;t available with the amount I needed.<br />
Therefore I ended up paying more than I actually needed plus wanted, but maybe that money is staying in my account without expiring and I can use it next time I get back.</p>
<p style="text-align: justify;">Upside is, I&#8217;ve used the phone a lot during my stay and it&#8217;s just absolutely necessary to stay in contact with local people (or folks that are currently around the same area).</p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=401" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2011/12/the-story-of-an-occasional-virgin-mobile-cell-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Correct CSV export for free iPhone SMS extractor</title>
		<link>http://blog.haraldkraft.de/2011/11/correct-csv-export-for-free-iphone-sms-extractor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=correct-csv-export-for-free-iphone-sms-extractor</link>
		<comments>http://blog.haraldkraft.de/2011/11/correct-csv-export-for-free-iphone-sms-extractor/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 22:39:13 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[Life and People]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[text messages]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=390</guid>
		<description><![CDATA[About half a year ago I published a PHP script that could extract text messages from an iPhone SQLite container. It was followed by an online version (blog post) a few weeks later, which was a website offering to use the original PHP script for text message extraction without having to install and/or run a <a href='http://blog.haraldkraft.de/2011/11/correct-csv-export-for-free-iphone-sms-extractor/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">About half a year ago I <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAxMS8wNS9zbXMtZXh0cmFjdG9yLWZvci1pcGhvbmUtd3JpdHRlbi1pbi1waHAv" title=\"SMS Extractor for iPhone (written in PHP)\">published a PHP script</a> that could extract text messages from an iPhone SQLite container. It was followed by an <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2hhcmFsZGtyYWZ0LmRlL3Ntcy1leHRyYWN0b3Iv" title=\"SMS / text message extraction from iPhone\">online version</a> (<a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAxMS8wNi9zbXMtZXh0cmFjdG9yLWZvci1pcGhvbmUtd3JpdHRlbi1pbi1waHAtb25saW5lLXZlcnNpb24v" title=\"Free SMS Extractor for iPhone (written in PHP) – online version\">blog post</a>) a few weeks later, which was a website offering to use the original PHP script for text message extraction without having to install and/or run a webserver.</p>
<p><span id="more-390"></span></p>
<p style="text-align: justify;">The online version continued development including security checks and the likes. Until I have more than 24h a day at my disposal, I will continue development on the online version only. The source code for the online version is not yet publicly available (it will be once I merge the two branches), but please do <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=bWFpbHRvOiU2OSU3MCU2OCU2RiU2RSU2NSU0MCU2OCU2MSU3MiU2MSU2QyU2NCU2QiU3MiU2MSU2NiU3NCUyRSU2NCU2NQ==">contact me</a> if you&#8217;re interested.</p>
<p style="text-align: justify;">The current blog post is about a small update that basically fixed the CSV format. Even though there is no &#8220;CSV standard&#8221; and a few different formats in common usage, I am refering to RFC 4180: enclosing text with double quotes and escaping double quotes with themselves.</p>
<p style="text-align: justify;">Bottom line, feel free to use the updated online version of the free SMS extractor:</p>
<p style="text-align: center;">Click: <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2hhcmFsZGtyYWZ0LmRlL3Ntcy1leHRyYWN0b3Iv" title=\"SMS / text message extraction from iPhone\">SMS / text message extraction from iPhone</a></p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=390" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2011/11/correct-csv-export-for-free-iphone-sms-extractor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;sudo&#8221; in OpenSolaris</title>
		<link>http://blog.haraldkraft.de/2011/11/sudo-in-opensolaris/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sudo-in-opensolaris</link>
		<comments>http://blog.haraldkraft.de/2011/11/sudo-in-opensolaris/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 16:22:53 +0000</pubDate>
		<dc:creator>Harald Kraft</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[opensolaris]]></category>
		<category><![CDATA[sudo]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=377</guid>
		<description><![CDATA[One of the objectives of this blog &#8211; when I started it &#8211; was to archive solutions to problems which took me a while to find. If at the time a Google search with the most common question to the problem didn&#8217;t show a page with a solution within the first results, I created a <a href='http://blog.haraldkraft.de/2011/11/sudo-in-opensolaris/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">One of the objectives of this blog &#8211; when I started it &#8211; was to archive solutions to problems which took me a while to find. If at the time a Google search with the most common question to the problem didn&#8217;t show a page with a solution within the first results, I created a blog post in order for it to be easier accessible for myself &#8211; along with sharing that solution with the open web. Furthermore, it&#8217;s a technique to remember things easier: <em>write them down once and you won&#8217;t forget</em>.</p>
<p><span id="more-377"></span></p>
<p style="text-align: justify;">In the beginning I was fooling around with a <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuaGFyYWxka3JhZnQuZGUvMjAwOS8wNi9xdWFkcnVwbGUtYm9vdC8=" title=\"Quadruple boot\">quad-boot system</a> including OpenSolaris.<br />
Unfortunately I haven&#8217;t been using OpenSolaris that much, so I kept forgetting what the equivalent to the Unix command <em>sudo</em> was. However I still remember that whenever I did use OpenSolaris, somehow it took me a while to find the answer &#8211; this might seem strange because when googling for &#8220;sudo in opensolaris&#8221; at this point in time, you will get the correct answer right away.</p>
<p style="text-align: justify;">Nevertheless I thought this might be worth a tiny blog post and personal reminder that the OpenSolaris equivalent to Unix&#8217;s sudo is <em>pfexec</em>:</p<br />
<code>pfexec &lt;command&gt;</code></p>
<p style="text-align: justify;">or if I may quote <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2RldmVsb3BlcnMuc3VuLmNvbS9kZXZlbG9wZXIvdGVjaG5pY2FsQXJ0aWNsZXMvb3BlbnNvbGFyaXMvcGZleGVjLmh0bWw=" title=\"pfexec\">Sun/Oracle</a>: <em>"In effect, pfexec functions as a passwordless su or sudo in Linux."</em></p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=377" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2011/11/sudo-in-opensolaris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>btrfs</title>
		<link>http://blog.haraldkraft.de/2011/10/btrfs/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=btrfs</link>
		<comments>http://blog.haraldkraft.de/2011/10/btrfs/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 18:15:08 +0000</pubDate>
		<dc:creator>Markus Mauder</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[btrfs]]></category>
		<category><![CDATA[file system]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://blog.haraldkraft.de/?p=366</guid>
		<description><![CDATA[Is it possible to get excited about a technology we never notice when using a computer? File systems do their job and we never give them a second thought. On a fresh setup of Ubuntu 11.10 I have 10 different mkfs.* binaries, allowing the creation of as many file systems. Why is there more than <a href='http://blog.haraldkraft.de/2011/10/btrfs/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Is it possible to get excited about a technology we never notice when using a computer? File systems do their job and we never give them a second thought. On a fresh setup of Ubuntu 11.10 I have 10 different mkfs.* binaries, allowing the creation of as many file systems. Why is there more than one? Let&#8217;s take a look at one I find truly exciting: <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2J0cmZzLndpa2kua2VybmVsLm9yZy8=">btrfs</a>, the newest entry in the Linux file system zoo.</p>
<h3>What is it?</h3>
<p style="text-align: justify;">Btrfs is a file system designed to handle large amounts of data. It is capable of organizing volumes of up to 16 EiB and supports a maximum file size of 16 EiB. To ensure a consistent file system state, it uses copy-on-write, meaning it writes data to new locations and then updates the entry in the file system trees, so the changes only become visible once they have been completed. As a comparison: ext4 (which is the newest update of the ext-family of file systems traditionally used on Linux) supports 1 EiB volumes (1/16) and 16 TiB file sizes (1/2^20). And ext4 is a journaling file system. It records changes to be made before making them so the system state can be restored in the event of a crash.</p>
<p><span id="more-366"></span></p>
<p style="text-align: justify;">btrfs also has a few interesting new features, which we will take a look at in a minute after having a look at how the development of btrfs started.</p>
<p style="text-align: justify;">In 2004, Sun made waves with their ZFS file system for Solaris. It provided many new capabilities, which were not available in production-grade file systems at the time. Examples include 16EB maximum file size, copy-on-write and data dedublication. It was opensourced as part of OpenSolaris and eventually <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3pmc29ubGludXgub3JnLw==">ported to linux</a>, although never included due to license incompatibilities. Probably in response, <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMDcvNi8xMi8yNDI=">Oracle&#8217;s Chris Mason announced btrfs</a>, its own new copy-on-write file system capable of storing 16 EiB files and supporting similar features like snapshots in 2007. Ironically, <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL3VzL3N1bi9pbmRleC5odG0=">Oracle acquired Sun</a> in 2010.<br />
By now this new file system is bundled in all major Linux distributions (since <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5kZWJpYW4ub3JnL05ld3MvMjAxMS8yMDExMDIwNWEuZW4uaHRtbA==">Debian 6.0</a>, <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cHM6Ly93aWtpLnVidW50dS5jb20vTWF2ZXJpY2tNZWVya2F0L1JlbGVhc2VOb3Rlcw==">Ubuntu 10.10</a> and <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2RvY3MuZmVkb3JhcHJvamVjdC5vcmcvZW4tVVMvRmVkb3JhLzEzL2h0bWwvUmVsZWFzZV9Ob3Rlcy8=">Fedora 13</a> (this was the earliest mention I found, maybe even earlier). Fedora plans to eventually <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvNDU0MzQ3Lw==">use btrfs as their default file system</a>.</p>
<h3>New features</h3>
<p style="text-align: justify;">The <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMDcvNi8xMi8yNDI=">original announcement</a> listed 12 features as implemented or to do. Let me highlight some of the more exciting ones:</p>
<ul>
<li>snapshots</li>
<p style="text-align: justify;">Since btrfs is a copy-on-write file system, it can keep trees representing the state at an earlier time around without any additional copying. This feature can be used to implement proper &#8220;safe points&#8221; to restore a system in case something goes wrong. No more booting of life systems and manual restoring of backups!</p>
<li>storage mode for SSDs</li>
<p style="text-align: justify;">New computers often come with solid state disks, which are faster to read and write, allow random access, but have a smaller number of write cycles. These properties can be used and taken into account by choosing a different strategy for identifying disk space to allocate on write. <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5waG9yb25peC5jb20vc2Nhbi5waHA/cGFnZT1hcnRpY2xlJmFtcDtpdGVtPWJ0cmZzX3NzZF9tb2RlJmFtcDtudW09MQ==">Phoronix has compared the write speed of SSD drives</a> using btrfs in both the normal and SSD mode.</p>
<li>file system based RAID</li>
<p style="text-align: justify;">Or rather RAID-like features. Specifically, btrfs currently supports distributing file systems over more than one physical disk (like RAID0) and duplication (like RAID1).</p>
<li>subvolumes</li>
<p style="text-align: justify;">Similar to snapshots, subvolumes allow the same data store to be used for several file systems. In essence, the same file system can have more than one root directory in the same disk space.</p>
</ul>
<p style="text-align: justify;">I for one am very excited about snapshots, but can imagine all of those features to come in handy in the future. Check out the <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CdHJmcw==">btrfs wikipedia article</a>, which lists those features with links to helpful articles inside its enormous repository of knowledge.</p>
<h3>Status</h3>
<p style="text-align: justify;">btrfs is still not considered stable and there are some very exciting features forthcoming. One notable omission is that of a file system check utility. btrfs-fsck can currently detect errors in the file system, but not fix them yet. After some delays, this functionality is supposed to be <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAuZmlsZS1zeXN0ZW1zLmJ0cmZzLzEzNDE4">released real soon now</a>. Oracle plans to use btrfs as their default file system in Oracle Linux, which makes this tool a necessity.</p>
<p style="text-align: justify;">I have used btrfs on the storage partition of my laptop since the release of Ubuntu 11.10 and have not had any issues. (However, making the boot partition btrfs failed with boot issues. Not unresolvable, but not a priority of mine at the time.) Additionally, I have upgraded the default ext4 root partition on a fresh Fedora 16 beta release to btrfs using the btrfs-convert tool from btrfs-progs. (Doing it this way is quite risk-free. The tool will keep your ext-data around so you can restore your previous state. As usual, backups are a good idea when playing with new stuff. Don&#8217;t forget to update the affected partitions&#8217; UUIDs (use blkid to determine the current value), which will be changed by the conversion. /etc/fstab and the boot loader come to mind.)</p>
<h3>Summary</h3>
<p style="text-align: justify;">btrfs is a new Linux file system. It has many exciting new features and is already stable enough to be used on non-critical systems. When the integration with tools on Linux-based systems improves we will see some exciting new capabilities coming to these systems. Currently, <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVhdHVyZXMvU3lzdGVtUm9sbGJhY2tXaXRoQnRyZnM=">Fedora integrates snapshots into GRUB</a> to realize proper system rollbacks. Expect this and more features to get picked up by the other distributions.</p>
<p style="text-align: justify;">We are not going to notice much of it in normal operation, but we can rest easy in the knowledge that btrfs manages our exbibytes for us.</p>
<p><i>Guest post by <a href="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL21hdWRlci5uYW1l">Markus Mauder</a>.</i></p>
 <img src="http://blog.haraldkraft.de/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=366" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.haraldkraft.de/2011/10/btrfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

