<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<title type="text">CoffeeBreak</title>
	<subtitle type="text">CoffeeBreak:CoffeeBreak, the neverpanic.de blog</subtitle>
	<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/" />
	<link rel="self" type="application/atom+xml" href="http://www.neverpanic.de/blog/atom/" />
	<updated>2010-07-03T17:36:53Z</updated>
	<rights>Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Germany License</rights>
	<generator uri="http://expressionengine.com/" version="1.6.8">ExpressionEngine</generator>
	<id>tag:neverpanic.de,2010-07-03:/blog/</id>
	
	<entry>
		<title>whatthecommit.com git hook</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/whatthecommit.com&#45;git&#45;hook/" />
		<id>tag:neverpanic.de,2010-07-03:/blog/single/whatthecommit.com-git-hook/#3.83</id>
		<published>2010-07-03T17:23:52Z</published>
		<updated>2010-07-03T17:36:53Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Development"
				scheme="/site/category/development/"
				label="Development" />
		
			<category
				term="Linux"
				scheme="/site/category/linux/"
				label="Linux" />
		<content type="html">
			<![CDATA[
				<p>I currently use <a href="http://gitscm.org/">Git</a> for most of my version control needs. I'm keeping all of my hand-ins for university under version control to be able to sync them between university and my laptop easily and to make it easy for others to contribute (and sometimes they actually do!). But those of you using version control systems know what the biggest problem with version control is: Thinking of a commit message. Wait no moar! The ultimate solution is here!</p>
<p><a href="http://whatthecommit.com/" title="a commit message generator">whatthecommit.com</a> is a website that provides you with a fresh commit message every time you load it. So all you have to do, is copy and paste the line into your commit window. Still too much work? That's why git comes with hook scripts. Paste the following code in <code>.git/hooks/prepare-commit-msg</code> in your working copy and make the file executable and you'll be provided with a wonderful commit message every time you type <code>git commit</code> automatically!
<pre class="bash" style="font-family:monospace;"><ol><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># A hook script to prepare the commit log message.</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># Called by &quot;git commit&quot; with the name of the file that has the</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># commit message, followed by the description of the commit</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># message's source.  The hook's purpose is to edit the commit</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># message file.  If the hook fails with a non-zero status,</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># the commit is aborted.</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;$2,$3&quot;</span> <span style="color: #000000; font-weight: bold;">in</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        ,<span style="color: #000000; font-weight: bold;">|</span>template,<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #007800;">line</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>whatthecommit.com<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-O</span> - <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">'&lt;p&gt;.*$'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/&lt;[^&gt;]*&gt;//g'</span> <span style="color: #7a0874; font-weight: bold;">&#41;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #007800;">file</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1d'</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${1}</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#41;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${line}</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${1}</span>&quot;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${file}</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${1}</span>&quot;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #000000; font-weight: bold;">;;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">;;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000000; font-weight: bold;">esac</span></div></li></ol></pre></p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>Windows 7 on MSI K9N Platinum (nForce 570 SLI)</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/windows&#45;7&#45;on&#45;msi&#45;k9n&#45;platinum&#45;nforce&#45;570&#45;sli/" />
		<id>tag:neverpanic.de,2009-12-26:/blog/single/windows-7-on-msi-k9n-platinum-nforce-570-sli/#3.82</id>
		<published>2009-12-26T00:41:28Z</published>
		<updated>2009-12-26T02:16:29Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
		<content type="html">
			<![CDATA[
				<p>Recently, a fresh Windows install<sup id="ftnt1src"><a href="#footnote1">[1]</a></sup> was due on my home PC primarily used by my parents and family after my <a href="/blog/single/university-macbook-pro/" title="blog post about switching to a Mac from Nov 30th 2008">switch to a MacBook</a> about a year ago.</p>
<p>However, whenever I tried to start the installation routine, the setup would boot into the "Windows is starting"-screen with the nicely animated glowing 7-logo<sup id="ftnt2src"><a href="#footnote2">[2]</a></sup>, but stay there indefinitely without an error message. When starting the setup in safe mode (I had to press F5 or F6 during start-up IIRC), the setup would just hang after</p>
<pre class="html4strict" style="font-family:monospace;"><ol><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">Loaded: \Windows\system32\drivers\disk.sys</div></li></ol></pre>

<p>I started searching the internet for similar problems and found a couple of recommendations related to nForce chipsets. Some told you to disable your on-board LAN ports (which I happen not using anyway) and a lot of similar disable-some-hardware tips, which, unfortunately, did not help at all. I had almost given up on Windows 7 and re-installed XP, when I decided to try a BIOS-update as a last resort. After using MSI's rather comfortable LiveUpdate<sup id="ftnt3src"><a href="#footnote3">[3]</a></sup> the Windows 7 setup did work fine<sup id="ftnt4src"><a href="#footnote4">[4]</a></sup>.</p>

<ul class="footnotes">
<li id="footnote1"><a class="footnote" href="#ftnt1src">[1]</a>: MSDN-AA is one of the benefits of being a student <img src="/images/smileys/smile.gif" width="19" height="19" alt="smile" style="border:0;" /></li>
<li id="footnote2"><a class="footnote" href="#ftnt2src">[2]</a>: <a href="http://images.google.de/images?q=Windows%207%20boot%20screen">http://images.google.de/images?q=Windows%207%20boot%20screen</a></li>
<li id="footnote3"><a class="footnote" href="#ftnt3src">[3]</a>: It's an Internet Explorer Active-X plug-in optimized for IE5 and 800x600, but other than that, it works pretty good. I can even update your BIOS from within the OS (does a hard reset after finishing, but that's probably the better alternative to shutting down on a possibly non-working BIOS)</li>
<li id="footnote4"><a class="footnote" href="#ftnt4src">[4]</a>: Sorry for the excessive usage of footnotes <img src="/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" /></li>
</ul> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>RapidShare. Completely unusable?</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/rapidshare.&#45;completely&#45;unusable/" />
		<id>tag:neverpanic.de,2009-12-25:/blog/single/rapidshare.-completely-unusable/#3.81</id>
		<published>2009-12-25T23:59:27Z</published>
		<updated>2009-12-26T01:13:28Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Personal"
				scheme="/site/category/personal/"
				label="Personal" />
		<content type="html">
			<![CDATA[
				<p>RapidShare is changing it&#8217;s free download limits (as in speed, time and size) like others are changing their underwear. Their current setup however, is the worst I&#8217;ve experienced so far and makes RapidShare almost completely unusable without a client software.<br />
I had to reload about 20 times and wait around 15 minutes, before I even got a download ticket. I had to wait 90 seconds after I got the ticket for the download to finally start. For each reload I had to click twice, after I got the ticket it took another click to start the download. In total, that sums up to 20 * 2 + 1 = 41 clicks on a website that advertises itself as &#8220;1-CLICK Web hosting - Easy Filehosting&#8221;.<br />
The download itself took 43 minutes 25 seconds for a total of 114.83 MiB, that&#8217;s about 45.14 KiB per second. Compare that to a test download I did from a full-speed server that delivered 657.37 KiB/s for a 30.6 MiB file in 48 seconds. That&#8217;s more than 1400% as fast as a download from RapidShare, not counting the waiting time.</p>

<p>The numbers speak for themselves – in my opinion RapidShare is completely unusable at the moment (and even more for less tech-savvy people than for me).
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>Bon Appetit at the Erlangen canteen</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/bon&#45;appetit&#45;at&#45;the&#45;erlangen&#45;canteen/" />
		<id>tag:neverpanic.de,2009-09-29:/blog/single/bon-appetit-at-the-erlangen-canteen/#3.80</id>
		<published>2009-09-29T17:31:53Z</published>
		<updated>2009-09-29T17:43:54Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Personal"
				scheme="/site/category/personal/"
				label="Personal" />
		<content type="html">
			<![CDATA[
				<p>It&#8217;s no secret the canteen on the Erlangen university&#8217;s southern campus is not the best – but I haven&#8217;t seen something like <strong>that</strong> before.<br />
<a href="http://www.neverpanic.de/images/uploads/erlangen-canteen-worm.jpg" class="lightbox"><img src="http://www.neverpanic.de/images/uploads/erlangen-canteen-worm_thumb.jpg" class="float" alt="erlangen canteen worm" width="480" height="360" /></a><br />
A little bit disgusting if you ask me – I was lucky, it wasn&#8217;t my meal, though…
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>Xcode from NULL to 100;</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/xcode&#45;from&#45;null&#45;to&#45;100/" />
		<id>tag:neverpanic.de,2009-09-17:/blog/single/xcode-from-null-to-100/#3.79</id>
		<published>2009-09-17T16:24:41Z</published>
		<updated>2009-09-18T00:08:42Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Development"
				scheme="/site/category/development/"
				label="Development" />
		
			<category
				term="OS X"
				scheme="/site/category/os-x/"
				label="OS X" />
		<content type="html">
			<![CDATA[
				<p>
    I was recently browsing the new <a href="http://www.apple.com/itunes/">iTunes 9</a> Store and somehow ended up in the podcast section. I had a look around the featured podcast and noticed a somewhat new podcast about Xcode called “Xcode von NULL auf Hundert;” (the podcast is german and, as such, has a german title). Ever since I switched to a Mac I have wanted to learn some basics of Cocoa programming.
</p>
<p>
    I started reading some resources on Objective-C programming a while ago, but didn't finish any because most of them were pretty technical and theoretical and thus getting boring pretty fast. The “Xcode from NULL to 100;” podcast does a lot more learning by doing – e.g. they guide you to build a (graphical!) calculator and explain memory allocating and releasing using that example.
</p>
<p>
    The podcast targets absolute beginners – if you already have a background in programming, some of the information not related to OS X GUI programming will probably be pretty redundant to you, but you might still use the podcast to get started with Apple's Interface Builder.
</p>
<p>
    <a href="http://0x02100.silutions.de/">Xcode von NULL auf Hundert; podcast</a>
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>GeSHify has moved</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/geshify&#45;has&#45;moved/" />
		<id>tag:neverpanic.de,2009-04-02:/blog/single/geshify-has-moved/#3.77</id>
		<published>2009-04-02T16:52:55Z</published>
		<updated>2009-04-02T16:58:56Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Web Development"
				scheme="/site/category/web-development/"
				label="Web Development" />
		
			<category
				term="PHP"
				scheme="/site/category/php/"
				label="PHP" />
		<content type="html">
			<![CDATA[
				<div style="text-align: center;">
<p style="clear: right; padding-top: .5em;">My syntax highlighting extension for ExpressionEngine has moved to a new home:</p>
<p style="font-size: 3em; margin-top: .5em;"><a href="http://geshify.com/">http://geshify.com/</a></p>
</div> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>Subversion Property Copy</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/subversion&#45;property&#45;copy/" />
		<id>tag:neverpanic.de,2009-02-15:/blog/single/subversion-property-copy/#3.73</id>
		<published>2009-02-15T22:03:04Z</published>
		<updated>2009-04-02T16:23:05Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Linux"
				scheme="/site/category/linux/"
				label="Linux" />
		<content type="html">
			<![CDATA[
				<p>Although there is a <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/features/" title="svnX (free)">couple</a> <a href="http://versionsapp.com/" title="Versions">of</a> <a href="http://www.zennaware.com/cornerstone/" title="Cornerstone">Subversion</a> <a href="http://zigversion.com/" title="ZigVersion (free for students)">GUI</a>s for Macs, I usually use the <abbr title="Command Line Interface">CLI</abbr>. I manage all source code I write during my studies using Subversion and usually add revision number and date of last checkin to the file using the <code>svn:keywords</code>-Property. However, I always forget the set of keywords I usually add: <code>Author Date Id Revision URL</code>. Unfortunately, there is no way to copy a property from one file to another in the standard subversion binary. There is, however, a little shortcut:<br />
<pre class="bash" style="font-family:monospace;"><ol><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #c20cb9; font-weight: bold;">svn</span> propset <span style="color: #007800;">$propertyName</span> <span style="color: #ff0000;">&quot;<span style="color: #780078;">`svn propget $propertyName $fromFileName`</span>&quot;</span> <span style="color: #007800;">$toFileName</span></div></li></ol></pre><br />
Typing this monster isn&#8217;t any userfriendly at all, though – a little <code>.bashrc</code> magic does the trick:<br />
<pre class="bash" style="font-family:monospace;"><ol><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># add svn propcopy</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000000; font-weight: bold;">function</span> <span style="color: #c20cb9; font-weight: bold;">svn</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #000000; font-weight: bold;">in</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        pc<span style="color: #000000; font-weight: bold;">|</span>propcopy<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></li><li style="font-weight: bold; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #007800;">propName</span>=<span style="color: #007800;">$2</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #007800;">fromFile</span>=<span style="color: #007800;">$3</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #7a0874; font-weight: bold;">shift</span> <span style="color: #000000;">3</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">which</span> <span style="color: #c20cb9; font-weight: bold;">svn</span><span style="color: #000000; font-weight: bold;">`</span> propset <span style="color: #007800;">$propName</span> <span style="color: #ff0000;">&quot;<span style="color: #780078;">`\`</span>which svn\<span style="color: #780078;">` propget $propName $fromFile`</span>&quot;</span> $<span style="color: #000000; font-weight: bold;">@</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #000000; font-weight: bold;">;;</span></div></li><li style="font-weight: bold; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">which</span> <span style="color: #c20cb9; font-weight: bold;">svn</span><span style="color: #000000; font-weight: bold;">`</span> $<span style="color: #000000; font-weight: bold;">@</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #000000; font-weight: bold;">;;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #000000; font-weight: bold;">esac</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #7a0874; font-weight: bold;">&#125;</span></div></li></ol></pre></p>

<p><strong>Update</strong>: Thanks to <a href="http://raim.codingfarm.de/" title="Rainer Müller">Raim</a> for the wildcard support. Using subversion auto-props is an option for files, but unfortunately, <a href="http://subversion.tigris.org/issues/show_bug.cgi?id=1989" title="issue 1989 on auto-props on directories">auto-props don&#8217;t work on directories</a> yet.
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>A Friday 13th story</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/a&#45;friday&#45;13th&#45;story/" />
		<id>tag:neverpanic.de,2009-02-14:/blog/single/a-friday-13th-story/#3.72</id>
		<published>2009-02-14T14:32:36Z</published>
		<updated>2009-02-16T13:01:37Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Internal"
				scheme="/site/category/internal/"
				label="Internal" />
		
			<category
				term="Linux"
				scheme="/site/category/linux/"
				label="Linux" />
		<content type="html">
			<![CDATA[
				<p>This site is served by my own virtual server hosted by Carrot Servers in Austria. The hardware nodes running their servers are housed in one of Germany&#8217;s largest hosting company&#8217;s datacenters. However, three of their datacenters recently suffered from a power loss because of a defunct uninterruptible power source and a series of other unfortunate problems – a little over 12,000 servers were without power for a few hours.<br />
However, it seems my vServer&#8217;s hardware node was damaged by the power loss; one of the hard disk drives in the RAID array was replaced after the outage. Yesterday, the worst-case scenario came true: besides the hard disks, apparently the motherboard was also damaged causing the RAID controller to slowly corrupt the data on the drives. On Friday, 13<sup>th</sup>, my provider informed me data had been lost and the server will be swapped with a new machine.<br />
Luckily, I did remember creating backup – and it happened to be a recent one (namely from Thursday, 12<sup>th</sup>). But as Murphy&#8217;s law states, things never work the way you expect them to work. In this case that meant that permissions were incorrect on the backup although I used rsync with the appropriate preserve-permissions option. I&#8217;ve thus been busy reinstalling the software, uploading the files and databases and fixing their permission. As of now, all data has been successfully restored (blessing in disguise) and I&#8217;m supervising the server&#8217;s functions.
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>Software on a stick?</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/software&#45;on&#45;a&#45;stick/" />
		<id>tag:neverpanic.de,2008-12-04:/blog/single/software-on-a-stick/#3.71</id>
		<published>2008-12-04T11:39:54Z</published>
		<updated>2008-12-04T12:07:55Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
		<content type="html">
			<![CDATA[
				<p>
Why is the software industry still using optical media to distribute software? Besides the few companies that offer software downloads everybody else ships CDs or DVDs. I occasionally wonder why they don't use USB flash drives? Flash drives are
<ol>
<li>
small (from a hardware point of view)<br />
USB drives are much smaller and thus much more portable than optical media
</li>
<li>large (in terms of storage capacity)<br />
flash memory can easily store the amount of data a DVD can and the amount will certainly grow in the future</li>
<li>robust<br />
try to break apart a CD, and then do the same with a flash drive  <img src="/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" />
</li>
<li>cheap<br />
I don't know the exact price per Gigabyte of a CD or DVD, but USB drives are quite cheap as well.</li>
</ol>
</p>
<p>I'm not a business analyst, but imho thumb drives are a serious alternative to optical media especially since there will be more PCs or laptops without any optical drive (such as the MacBook Air) in the future.</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>university &amp;amp; MacBook Pro</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/university&#45;macbook&#45;pro/" />
		<id>tag:neverpanic.de,2008-11-30:/blog/single/university-macbook-pro/#3.70</id>
		<published>2008-11-30T16:34:12Z</published>
		<updated>2009-05-19T18:55:13Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
		<content type="html">
			<![CDATA[
				<p>
However, it's not just about the work for university — besides that I'm also living in Erlangen now (at least during the week, rather infrequently at the weekends), which means cooking and housekeeping for myself. I currently have a room at a student hostel but will be moving into my own apartment (along with a friend of mine) by the end of december.
</p>
<p>
Another thing I desperately needed for university was a laptop, as I didn't bother moving my home computer (it's the last one left at home for parents and everybody else anyway).<br />
It took me a good while to decide what kind of laptop to get, but I finally chose a MacBook Pro with a whooping 4 Gigabytes of RAM, because I didn't want to fiddle with neither Windows Vista nor XP anymore. Linux would have been an option, but having a GUI to configure your PC isn't that bad after all either.<br />
Lots of people buy Macs for their product design, but the point that convinced me was the possibility to run every software that works on Linux on the Mac as well (you gotta love a real bash shell, not some emulated cr*p on Windows).
So far I'm very satisfied with my choice and the MacBook — I might blog a little bit more in detail about that soon.
</p>
<p>
So far this was just a short update from me to let you know I'm still alive.
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>on work atmosphere</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/on&#45;work&#45;atmosphere/" />
		<id>tag:neverpanic.de,2008-08-26:/blog/single/on-work-atmosphere/#3.67</id>
		<published>2008-08-26T20:49:00Z</published>
		<updated>2008-08-26T21:41:44Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Personal"
				scheme="/site/category/personal/"
				label="Personal" />
		<content type="html">
			<![CDATA[
				<p>
	Whether I feel comfortable in office depends on a lot of criteria, some subtle, less important, some of uttermost importance. I'll try to list some factors here, but this list doesn't claim to be anywhere close to complete. Note that this list is compiled from my experience; your mileage might vary. You're welcome to share your opinion using the comment form.
</p>
<ul>
	<li>
		<h3>Co-Workers</h3>
		<p>
			Colleagues probably have the largest impact on the atmosphere at work (at least when working in an office with a couple of other people around). Whether they are friendly, open and humorous (jokes make work <em>a lot</em> more fun) is one of the two key factors deciding whether I feel comfortable working at that place.<br />
			Unfortunately you hardly talk to your co-workers before picking up work, but that's probably why there's a probationary period…
		</p>
	</li>
	<li>
		<h3>Your Boss</h3>
		<p>
			They guy in charge at your company can make your work life a misery. If he doesn't like you (or he's a complete id**t) and you don't have backup from your colleagues work can be a pain.<br />
			<em>Hey bosses, if you're reading this, here's to you: <a href="http://number17.com/number17comic18.pdf">how to be a good boss</a> (PDF document, 98KB) at number17.com</em>
		</p>
	</li>
	<li>
		<h3>Your Client(s)</h3>
		<p>
			If you're working in the services sector you're working for someone. That's fine, however there usually is a simple problem with this person (or these persons, depending on whom you're working for this might be a large user base): they've got the money. And as we all know having the money makes you the king.<br />
			We all know the saying <strong>customer is king</strong>, but sometimes you should (at least try to) parent your customers to be less exhaustive towards you.<br />
			<em>Oh, hey clients, read this: <a href="http://number17.com/number17comic21.pdf">how to be a good client</a> (PDF document, 66KB) at number17.com</em>
		</p>
	</li>
	<li>
		<h3>Equipment</h3>
		<p>
			This one's not a very big part, but it helps if you can work with a somewhat current system. Oh, and two screens are luxury, too.
		</p>
	</li>
</ul>
<p>
	Inspired by <a href="http://62.146.72.123/wordpress/?p=32">Lektion in Unusability und “Placebo forte!”</a> on Keep Smoking<br />
	number17 comics via <a href="http://www.pixelgraphix.de/weblog/artikel/understand-that-nothing-takes-5-minutes/">pixelgraphix.de</a>
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>Backup a Linux server to a Windows PC while preserving user, group and permissions</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/backup&#45;linux&#45;server&#45;to&#45;windows&#45;pc&#45;preserving&#45;user&#45;group&#45;permissions/" />
		<id>tag:neverpanic.de,2008-08-24:/blog/single/backup-linux-server-to-windows-pc-preserving-user-group-permissions/#3.66</id>
		<published>2008-08-24T21:32:44Z</published>
		<updated>2008-12-25T17:48:45Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Linux"
				scheme="/site/category/linux/"
				label="Linux" />
		<content type="html">
			<![CDATA[
				<p>
 I moved my sites to a new virtual server at <a href="http://carrot-server.com/">Carrot Server</a>. Their offer is (imho) better than the one over at <a href="http://www.hosteurope.de/">HostEurope</a>, however there are some downsides: they don't have a rescue system yet (you better watch your step!) and there's no backup included.
</p>
<p>
 I can live without the rescue system, but no backup? <strong>No way</strong>.
</p>
<p>
 Since I don't have a dedicated Linux box around at home, I needed to store the backup on my Windows PC. There's a problem with storing files from a Unix system on Windows though: You'll lose the owner, group and permission data for the files, since the file systems supported by Windows can't store this information. A backup without this metadata is useless, though.
</p>
<h3>Finding a solution</h3>
<p>
 Some kind of container solution was needed. Tar archives support Unix permissions, however packing all files into a huge tar file would require transferring all data on every backup run. My internet connection at home is not T1, so transferring all data every time I do a backup is probably not a good idea (and it's perfectly useless, too).
</p>
<p>
 There's <code>rsync</code> — the state-of-the-art tool to transfer only the changes (yes, changes, not only changed files; very useful if you have some multiple GB files around). So combining rsync and tar seems the way to go.
</p>
<p>
 I could have packed all files into a huge tarball and rsynced it to my PC (effectively only tranferring the changes), but that would mean the tarball would need to be stored at the server (at least temporarily). Now imagine the disk is 95% full and you're trying to pack the whole filesystem — we have a problem here.
</p>
<p>
 Fortunately I'm not the first one facing this problem: <a href="http://ttsiodras.googlepages.com/index.html">Thanassis Tsiodras</a> outlines a way to <a href="http://ttsiodras.googlepages.com/backup.html">backup your Linux server preserving permissions to a Windows PC</a> using a loop-mounted file system on a Samba share.<br />
 This technique would require a Linux box, though. Bummer! (If I had a Linux box around, I'd backup to it directly).
</p>

 <h3>Setting it up</h3>
<p>
 So I went with Virtualization: I remember having an old version of Parallels Workstation (now VMware Workstation) laying around. This should do the job. I installed a minimalistic Debian Etch in a virtual machine. The virtualization software supports folder sharing with the host operating system after installing some kernel extensions. Sounds good for my needs. Installed the kernel modules (I had to compile them, since there were none pre-built for my kernel), added a shared folder and found it in /mnt/hgfs/backup/.
</p>
<p>
 <code>#cd /mnt/hgfs/backup/</code> followed by<br />
 <code>#dd if=/dev/zero of=destinationfilename bs=1M count=1 seek=150000</code><br />provided me with a 15GB file full of zeroes to put my file system to. Notice the seek parameter; on file systems supporting sparse files (NTFS does, FAT32 does not) it prevents physically writing 15GB of junk to the disk, but will instead create a file that only looks like it was 15GB. Physically this file is only a couple of KB large. If you need more than 15GB, adjust the seek parameter. Basically the block size (bs) times the seek parameter equals the size of your file system.<br />
 Next I mounted the file to a loopback device:<br />
 <code>#losetup -f /mnt/hgfs/backup/destinationfilename</code><br />
 -f will tell losetup to use the next free loop device and print it's name to stdout.<br />
 Now I had to create a file system on the loopback device. You can chose whatever filesystem you think is best, I went with ext3:<br />
 <code>#mkfs -t ext3 /dev/loop0</code><br />
 Make sure to substitute <code>/dev/loop0</code> with the device <code>losetup</code> printed after mounting.<br />
 Finally, I mounted the file system by executing<br />
 <code>#mount -t ext3 /dev/loop0 /media/backup</code>.<br />
 In this case the device /dev/loop0 is mounted to /media/backup (the folder needs to be created before) using the ext3 filesystem driver.
</p>
<h3>Make it stick</h3>
<p>
 You wouldn't want to execute <code>losetup</code> and <code>mount</code> every time you start the system, so here's what you need to add to <code>/etc/fstab</code> to have the file mounted automatically on startup:
 <pre>/mnt/hgfs/backup/destinationfilename /media/backup ext3 loop,defaults 0 0</pre>
</p>
<h3>Backup</h3>
<p>
 Finally you need to use rsync to backup the files. I wrote a small shell script for my needs:
<pre class="bash" style="font-family:monospace;"><ol><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># make sure we're in ~; adjust this, if you want your rsync-backup.err file to be elsewhere</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #7a0874; font-weight: bold;">cd</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># remove old log file. you could use logrotate for this, if you want to do it right</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> rsync-backup.err.gz <span style="color: #7a0874; font-weight: bold;">&#93;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> rsync-backup.err.gz</div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># gzip existing log file</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> rsync-backup.err <span style="color: #7a0874; font-weight: bold;">&#93;</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #c20cb9; font-weight: bold;">gzip</span> rsync-backup.err</div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #666666; font-style: italic;"># do the rsync; this will sync remote /* to /media/backup</span></div></li><li style="font-weight: normal; vertical-align:top;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">rsync <span style="color: #660033;">--delete</span> avze <span style="color: #c20cb9; font-weight: bold;">ssh</span> servername:<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/</span>backup<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;</span>rsync-backup.err</div></li></ol></pre>
</p>
<p>
 You might ask why I didn't backup to the disk of the virtual machine directly. Doing it this way allows me to exchange the virtual machine without the data getting lost (the machine could even refuse to boot, and the data would still be there).
</p>
			]]>
		</content>
	</entry>
	
	<entry>
		<title>GeSHify update</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/geshify&#45;update/" />
		<id>tag:neverpanic.de,2008-08-05:/blog/single/geshify-update/#3.65</id>
		<published>2008-08-05T16:05:47Z</published>
		<updated>2009-07-25T13:19:48Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Web Development"
				scheme="/site/category/web-development/"
				label="Web Development" />
		
			<category
				term="PHP"
				scheme="/site/category/php/"
				label="PHP" />
		<content type="html">
			<![CDATA[
				<div class="icon"><img src="/images/icons/w75/shield.png" alt="escutcheon" width="75" height="74" title="GeSHify update" /></div><p>I updated my <a href="http://www.neverpanic.de/blog/single/geshify-a-geshi-syntax-highlighting-extension-for-expression-engine/" title="ExpressionEngine extension GeSHify on neverpanic.de">ExpressionEngine extension GeSHify</a>. New features are a French translation (thanks to <a href="http://feub.net/">Fabien Amann</a>) and a German translation (which I did myself). Packaged with GeSHify 0.3.6.1 are GeSHi 1.0.7.22 and GeSHi 1.1.2alpha4dev (both checked out from the release branches of GeSHi&#8217;s SourceForge.net Subversion repository).<br />
Since I switched from getting the releases of GeSHi manually to using svn:externals definitions I no longer have to download the GeSHi releases manually — they will be pulled from the SourceForge Subversion servers on every update. Using this technique it is <em>technically</em> possible to automate building new GeSHify packages as soon as a new GeSHi version is released (and I will probably set this up soon).<br />
<a href="/blog/single/geshify-a-geshi-syntax-highlighting-extension-for-expression-engine/">Proceed to download</a>.
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>I took it! And so should you</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/i&#45;took&#45;it&#45;and&#45;so&#45;should&#45;you/" />
		<id>tag:neverpanic.de,2008-07-29:/blog/single/i-took-it-and-so-should-you/#3.64</id>
		<published>2008-07-29T15:14:57Z</published>
		<updated>2009-05-19T18:54:58Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Personal"
				scheme="/site/category/personal/"
				label="Personal" />
		
			<category
				term="Web Development"
				scheme="/site/category/web-development/"
				label="Web Development" />
		<content type="html">
			<![CDATA[
				<p><a href="http://alistapart.com/">A List Apart</a> has published the 2008 survey for people who make websites. If you work in the web business, you should go ahead and <a href="http://alistapart.com/articles/survey2008">take the survey</a> as well.</p>
<p>
 <img src="/images/uploads/i-took-the-2008-survey.gif" width="180" height="46" alt="A List Apart Survey banner 2008" title="I took the ALA 2008 survey" style="margin: 5px auto; display: block;" />
</p> 
			]]>
		</content>
	</entry>
	
	<entry>
		<title>Thunderbird IMAP push email</title>
		<link rel="alternate" type="text/html" href="http://www.neverpanic.de/blog/single/thunderbird&#45;imap&#45;push&#45;email/" />
		<id>tag:neverpanic.de,2008-07-12:/blog/single/thunderbird-imap-push-email/#3.63</id>
		<published>2008-07-12T10:18:49Z</published>
		<updated>2010-03-23T23:10:50Z</updated>
		<author>
			<name>Clemens Lang</name>
			<email>neverpanic@gmail.com</email>
			<uri>http://www.neverpanic.de/about-me</uri>		</author>
		
			<category
				term="Development"
				scheme="/site/category/development/"
				label="Development" />
		
			<category
				term="Web Development"
				scheme="/site/category/web-development/"
				label="Web Development" />
		
			<category
				term="Personal"
				scheme="/site/category/personal/"
				label="Personal" />
		<content type="html">
			<![CDATA[
				<p><a href="http://www.ietf.org/rfc/rfc2177.txt" title="RFC 2177 defining IMAP4 IDLE command">RFC 2177</a> defines IDLE, an extension to the IMAP protocol allowing mail clients to change into an idle mode while keeping the TCP-connection open. This allows the servers to notify the clients of new mails on arrival (the so-called push e-mail).</p>
<p>Not all e-mail providers support IMAP IDLE, though – you should check whether your mail provider supports it by opening a telnet connection to the IMAP server (standard port for IMAP is 143) and sending <code>001 capability</code>. If the answer contains „IDLE” your server supports IMAP IDLE.<br />
GMail for example answers<br />
<code>* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST CHILDREN XYZZY<br />
001 OK Thats all she wrote!</code></p>
<p><s>There's one thing to look out for, though – Thunderbird only sends the IDLE command (effectively enabling push e-mail) if you disable the „check for new mail every <var>n</var><sup>th</sup> minute”-option. I could not find any documentation on that feature – however using Help » Mozilla Thunderbird Help causes a 404 File Not Found error for me anyway (using the German version of Thunderbird).</s></p>
<p>Steve Jobs would say: „Exchange for the rest of us” – using GMail, IMAP and Thunderbird.</p> 
			]]>
		</content>
	</entry>
	
</feed>