<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:admin="http://webns.net/mvcb/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>
			CoffeeBreak
		</title>
		<link>
			http://www.neverpanic.de/blog/
		</link>
		<atom:link href="http://www.neverpanic.de/blog/rss2/" rel="self" type="application/rss+xml" />
		<description>
			CoffeeBreak, the neverpanic.de blog
		</description>
		<dc:language>
			en
		</dc:language>
		<dc:creator>
			Clemens Lang
		</dc:creator>
		<dc:rights>
			Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Germany License
		</dc:rights>
		<dc:date>
			2010-07-30T22:55:01+00:00
		</dc:date>
		<admin:generatorAgent rdf:resource="http://expressionengine.com/" />
		
		<item>
			<title>
				A Friday 13th story
			</title>
			<link>
				http://www.neverpanic.de/blog/single/a-friday-13th-story/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/a-friday-13th-story/#When:14:32:36Z
			</guid>
			<description>
				Are you superstitious? Do you believe in Murphy&#8217;s law? I usually don&#8217;t believe in such things, but sometimes you start to have doubts…
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.
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&#45;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, 13th, my provider informed me data had been lost and the server will be swapped with a new machine.
Luckily, I did remember creating backup – and it happened to be a recent one (namely from Thursday, 12th). 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&#45;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.
			</description>
			<dc:subject>
				Internal, Linux
			</dc:subject>
			<dc:date>
				2009-02-14T14:32:36+00:00
			</dc:date>
		</item>
		
		<item>
			<title>
				Up or Out: employees in IT companies quitting
			</title>
			<link>
				http://www.neverpanic.de/blog/single/up-or-out-employees-in-it-companies-quitting/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/up-or-out-employees-in-it-companies-quitting/#When:19:14:00Z
			</guid>
			<description>
				I just read an article in Alex&#8217; Soapbox on IT professionals and their motives to quit a job at a certain company. Having just finished a 6&#45;month&#45;internship at a local new media agency this article came right on time. I don&#8217;t want to judge neither the article nor the company I&#8217;ve been working at, but the theory mentioned in “Up or Out: Solving the IT turnover crisis” is absolutely worth reading if you haven&#8217;t already.
Personally I think Alex Papadimoulis&#8217; findings are a bit too black&#45;and&#45;white (as he admits near the end of the article: “Obviously, this article has painted some incredibly broad strokes, the largest being the stark dichotomy between skilled and unskilled developers, and the lack of distinction between organizations.”), but they are true nonetheless.
			</description>
			<dc:subject>
				Internal, Web Development
			</dc:subject>
			<dc:date>
				2008-04-30T19:14:00+00:00
			</dc:date>
		</item>
		
		<item>
			<title>
				The smaller the error the bigger the bug
			</title>
			<link>
				http://www.neverpanic.de/blog/single/the-smaller-the-error-the-bigger-the-bug/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/the-smaller-the-error-the-bigger-the-bug/#When:10:05:00Z
			</guid>
			<description>
				Bug tracking in software development can be a pain &#45; especially when there doesn&#8217;t seem to be any logic behind the bug.
So we had that navigation tree at work consisting out of two category levels, for simplicity let&#8217;s call them Level&#45;1&#45;Category and Level&#45;2&#45;Category. Level&#45;1&#45;Categories could contain other Level&#45;1&#45;Categories and Level&#45;2&#45;Categories, while Level&#45;2&#45;Categories could only contain Level&#45;2&#45;Categories. The navigation was built, caching was implemented, everything seemed fine from a logic viewpoint, however it behaved weird where it would sometimes display the Level&#45;2&#45;Categories in a particular Level&#45;1&#45;Category and sometimes not or in different order.
When we finally found the bug (after hours of debugging) the scales fell off our eyes:
&amp;lt;?php $cacheID = md5&#40;$level1Cat&#45;&amp;gt;id.$level2Cat&#45;&amp;gt;id&#41;; ?&amp;gt;
Now imagine what happened when you had a $level1Cat with ID 1 and a $level2Cat with ID 12, that would write it&#8217;s cache to md5(&#8216;112&#8217;); &#45; and trying to open a $level1Cat with ID 11 and a $level2Cat with ID 2 it would read the cache md5(&#8216;112&#8217;);. Unfortunately these classes did have the same interface, so no errors were thrown.
Changing the code to &amp;lt;?php $cacheID = md5&#40;$level1Cat&#45;&amp;gt;id.&#39;&#45;&#39;.$level2Cat&#45;&amp;gt;id&#41;; ?&amp;gt; resolved the bug and finally fired the closing time&#45;event for us.
			</description>
			<dc:subject>
				Internal, Web Development, PHP
			</dc:subject>
			<dc:date>
				2008-04-26T10:05:00+00:00
			</dc:date>
		</item>
		
		<item>
			<title>
				Back to Google
			</title>
			<link>
				http://www.neverpanic.de/blog/single/back-to-google/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/back-to-google/#When:22:45:01Z
			</guid>
			<description>
				Since I switched back to my domain neverpanic.de, which I lost about a year ago to a domain grabber (you can check out archive.org for my site), I&#8217;ve been waiting for Google to start indexing my site again. Unfortunately, it seemed I was out of luck &#45; even half a year after domain registration I still didn&#8217;t have any pages in the Google index.
I recently discovered a possibility to have your site reissued if you think it has been banned from the index: Google offers a request reconsideration form in their Google Webmaster Tools service. Five days after I sent in the request with an explanation what happened to the domain before it seems Google is starting to list my site again.
Evidence is quite obvious&#8230; here are two graphs from Google Webmaster Tools, the first one showing the number of pages crawled daily and the second one the amount of crawled data in KB
			</description>
			<dc:subject>
				Internal
			</dc:subject>
			<dc:date>
				2008-02-05T22:45:01+00:00
			</dc:date>
		</item>
		
		<item>
			<title>
				Keeping yourself out of your Google Analytics statistics
			</title>
			<link>
				http://www.neverpanic.de/blog/single/keeping-yourself-out-of-your-google-analytics-statistics/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/keeping-yourself-out-of-your-google-analytics-statistics/#When:20:54:22Z
			</guid>
			<description>
				Using Google Analytics and wondered how many clicks you add to your site(s) on your own? Here&#8217;s an old way to keep yourself out updated for the new Google Analytics JavaScript.
Based on Count me out on Analytics Talk I&#8217;m keeping myself out of my sites&#8217; statistics. However Google released a new version of their tracking JavaScript in December and they&#8217;re no longer adding new features to the old urchin.js. So updating is a god idea, but I still want to keep my hits out of my site statistics.

A quick glance at the Google Analytics help center told me there was a way to set custom variables in the new JavaScript, too, so I modified my keep&#45;me&#45;out files:
&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta http&#45;equiv=&amp;quot;Content&#45;Type&amp;quot; content=&amp;quot;text/html; charset=utf&#45;8&amp;quot; /&amp;gt;&amp;lt;title&amp;gt;removing you from GoogleAnalytics...&amp;lt;/title&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;	var gaJsHost = ((&amp;quot;https:&amp;quot; == document.location.protocol) ? &amp;quot;https://ssl.&amp;quot; : &amp;quot;http://www.&amp;quot;);	document.write(unescape(&amp;quot;%3Cscript src=&#39;&amp;quot; + gaJsHost + &amp;quot;google&#45;analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&amp;quot;));&amp;lt;/script&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;	var pageTracker = _gat._getTracker(&amp;quot;UA&#45;XXXXXXX&#45;X&amp;quot;);	pageTracker._initData();	pageTracker._trackPageview();&amp;lt;/script&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;function setSegment(next) {	pageTracker._setVar(&#39;someSpecialTextYoullUseInACustomFilterInGoogleAnalytics&#39;);	if (next.length &amp;gt; 0) {		document.location.href =  next;	} else {		window.close();	}}&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body onload=&amp;quot;setSegment(&#39;http://location.of/the.same.script.on.another.site.of.yours.to.redirect&#39;)&amp;quot;&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
So what is this doing? First, it loads the Google Analytics JavaScript (lines 5&#45;8), then it initializes the tracking (lines 9&#45;13) and last but not least the function (lines 14&#45;23) that sets the custom value in the tracking class and redirects if you passed another URL to it (useful for chaining all your sites). Finally in line 25, the function gets called on page load.
Combined with “dom.allow_scripts_to_close_windows” in Firefox&#8217; about:config you can add this page as a new start page tab and have it exclude you automagically every time you press the home button (and the window closes automatically after this, which keeps your tab bar clean).
			</description>
			<dc:subject>
				Internal, Web Development, JavaScript
			</dc:subject>
			<dc:date>
				2008-01-31T20:54:22+00:00
			</dc:date>
		</item>
		
		<item>
			<title>
				GeSHify: a GeSHi syntax highlighting extension for Expression Engine
			</title>
			<link>
				http://www.neverpanic.de/blog/single/geshify-a-geshi-syntax-highlighting-extension-for-expression-engine/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/geshify-a-geshi-syntax-highlighting-extension-for-expression-engine/#When:19:51:51Z
			</guid>
			<description>
				I recently wanted to post some source code on this Expression Engine&#45;powered blog &#45; I thought about some syntax highlighting to improve readability. However, after asking Google and the Expression Engine forums search it turned out there had been several attempts to integrate a syntax highlighter into Expression Engine, but these plugins or extensions were either outdated or not available anymore. *sigh*
Update: GeSHify has moved! Visit it&#39;s new home http://geshify.com/. This page is probably outdated!

So I figured out it would end as it always does (notice how I exaggerate here to keep the pathos of the text) &#45; I had to do it my way. And here it is: GeSHify for Expression Engine.
GeSHify supports the following features:

Customizable intelligent caching (this one is very important, since GeSHi is not the fastest code highlighter out there)
Supports GeSHi 1.0 and GeSHi 1.1 (currently alpha) &#45; and you can even switch between both using some clicks in the control panel
Customizable tag (in case you want to keep the original functionality of [ code ] instead of overwriting it, which is the default setting)
HTML&#45;argument&#45;style settings: you can pass something like lang=actionscript to the code tag
Default settings manageable using the control panel, so you don&#39;t have to pass all arguments each time you&#39;re pasting code


Want to see an example? Sure, no problem:
&amp;lt;?phpfunction activate_extension&#40;&#41;&#123; global $DB; $DB&#45;&amp;gt;query&#40;$DB&#45;&amp;gt;insert_string&#40;&#39;exp_extensions&#39;,  array&#40;   &#39;extension_id&#39; =&amp;gt; &#39;&#39;,   &#39;class&#39; =&amp;gt; &#39;Geshify&#39;,   &#39;method&#39; =&amp;gt; &#39;pre_typography&#39;,   &#39;hook&#39; =&amp;gt; &#39;typography_parse_type_start&#39;,   &#39;settings&#39; =&amp;gt; serialize&#40;$this&#45;&amp;gt;settings_default&#41;,   &#39;priority&#39; =&amp;gt; 8,   &#39;version&#39; =&amp;gt; $DB&#45;&amp;gt;escape_str&#40;$this&#45;&amp;gt;version&#41;,   &#39;enabled&#39; =&amp;gt; &#39;y&#39;  &#41; &#41;&#41;; $DB&#45;&amp;gt;query&#40;$DB&#45;&amp;gt;insert_string&#40;&#39;exp_extensions&#39;,  array&#40;   &#39;extension_id&#39; =&amp;gt; &#39;&#39;,   &#39;class&#39; =&amp;gt; &#39;Geshify&#39;,   &#39;method&#39; =&amp;gt; &#39;post_typography&#39;,   &#39;hook&#39; =&amp;gt; &#39;typography_parse_type_end&#39;,   &#39;settings&#39; =&amp;gt; serialize&#40;$this&#45;&amp;gt;settings_default&#41;,   &#39;priority&#39; =&amp;gt; 8,   &#39;version&#39; =&amp;gt; $DB&#45;&amp;gt;escape_str&#40;$this&#45;&amp;gt;version&#41;,   &#39;enabled&#39; =&amp;gt; &#39;y&#39;  &#41; &#41;&#41;;&#125;?&amp;gt;
If you know PHP and the Expression Engine API you might notice this is the place where the extension hooks into Expression Engine. If you don&#39;t you probably don&#39;t care either 

Read on for Documentation and Download
			</description>
			<dc:subject>
				Internal, Web Development, PHP, XHTML &amp; CSS
			</dc:subject>
			<dc:date>
				2008-01-30T19:51:51+00:00
			</dc:date>
		</item>
		
		<item>
			<title>
				Forms with WuFoo
			</title>
			<link>
				http://www.neverpanic.de/blog/single/forms-with-wufoo/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/forms-with-wufoo/#When:20:08:16Z
			</guid>
			<description>
				Do you create web forms a lot? Doing a lot of copy and paste on this task?I&#39;ve been listening to Technikw&amp;uuml;rze Podcast, Episode 104 (a german podcast about design and webstandards) and they&#39;ve been talking about WuFoo, an online service to create HTML forms. You can create forms using drag and drop on their site. If you want their server side validation, their statistics and their database power, you can purchase a paid subscription plan, but what I want to point out today is their XHTML/CSS export feature.
When you create a form, click the code&#45;button and choose &amp;ldquo;XHTML/CSS code only&amp;rdquo; on the right they&#39;ll serve you the correct XHTML and CSS code for the form you designed ready somewhat ready to include it into your web site. I moved all their CSS rules into some kind of &amp;ldquo;namespace&amp;rdquo; so they wouldn&#39;t interfere with my site&#39;s CSS rules (particularly my CSS files require the form to be in an element with class &amp;ldquo;wf&amp;rdquo; assigned to it and the IDs being used in the form are prefixed with &amp;ldquo;wf_&amp;rdquo;). I added some jQuery JavaScript for the cool eye candy&#45;effects and that&#39;s it. Now I can easily insert WuFoo&#45;generated forms in my site (and oh boy, I will).
Note that you will have to take care of form validation yourself &#45; you&#39;re not using the WuFoo guys&#39; servers and I didn&#39;t include client&#45;side validation in my JavaScript.
If you&#39;d like to use my modified CSS file and my jQuery JavaScript code scroll down for a highlighted version or get it here: CSS and jQuery JavaScript. The CSS and XHTML code has been released under a CreativeCommons Attribution 2.5 license and I&#39;m hereby releasing the jQuery code under the same license.
			</description>
			<dc:subject>
				Internal, Web Development, Design, JavaScript, XHTML &amp; CSS
			</dc:subject>
			<dc:date>
				2007-12-20T20:08:16+00:00
			</dc:date>
		</item>
		
		<item>
			<title>
				Why I&#8217;m blogging in English
			</title>
			<link>
				http://www.neverpanic.de/blog/single/why-im-blogging-in-english/
			</link>
			<guid>
				http://www.neverpanic.de/blog/single/why-im-blogging-in-english/#When:18:28:00Z
			</guid>
			<description>
				If you know me, read my about me page, followed a link from a German site or noticed my TLD is .de you probably know I&#8217;m German. So why am I blogging in English?
Since my early days in web development, which happened to start at HostingPosts, a free hosting provider, I&#8217;ve always been using English when talking about web development related topics. I quickly advanced to a moderator and later an administrator at HostingPosts, for I was trying to give something back to the community by helping other members out, when they had web development&#45;related problems. I practically never talked to my German friends about web development, probably since they were just not interested in that kind of stuff anyway.
When I got my two VPSes at HostEurope I first joined a German discussion board about web topics &#45; HostEurope&#8217;s customer board is a great place if you need help, if you have access to it (obviously only if you&#8217;re a HostEurope customer) make sure you check it out.

The decision whether to blog in English or German was a tough one, though. It took me almost two months to make the final decision, but I went with English for two main reasons:

I have some English friends, who would probably enjoy reading my blog and they obviously don&#8217;t speak German
A lot of people in Germany speak English anyway


Oh, and there&#8217;s another reason, too: I&#8217;m blogging in English, because I can  I know my English is not perfect, so you&#8217;re welcome to correct spelling mistakes (shame on me for not paying attention to Firefox&#8217; spell check plug&#45;in!) or weird grammar.
			</description>
			<dc:subject>
				Internal, Personal
			</dc:subject>
			<dc:date>
				2007-10-14T18:28:00+00:00
			</dc:date>
		</item>
		
	</channel>
</rss>