<?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>amazing development &#187; Computer</title>
	<atom:link href="http://amazing-development.com/archives/category/all/computer/feed/" rel="self" type="application/rss+xml" />
	<link>http://amazing-development.com</link>
	<description>ruby, java and the rest</description>
	<lastBuildDate>Wed, 07 Mar 2012 19:34:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Unblock-us for Mac OS</title>
		<link>http://amazing-development.com/archives/2012/03/07/unblock-us-for-mac-os/</link>
		<comments>http://amazing-development.com/archives/2012/03/07/unblock-us-for-mac-os/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 19:32:04 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=540</guid>
		<description><![CDATA[I&#8217;ve been using unblock-us for some time and took only a few precautions like not signing in to any service but hulu.com while using this other DNS service. Yesterday Damon wrote a great article on how to secure your system for unblock-us and I followed his lead. My only machine runs Mac OS, so I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a href="http://unblock-us.com">unblock-us</a> for some time and took only a few precautions like not signing in to any service but <a href="http://hulu.com">hulu.com</a> while using this other DNS service.</p>
<p>Yesterday Damon wrote a great article on <a href="http://www.damonkohler.com/2012/03/unblock-us-security.html">how to secure your system for unblock-us</a> and I followed his lead.</p>
<p>My only machine runs Mac OS, so I had to do a bit of research&#8230;<span id="more-540"></span></p>
<h5>Step 1: run bind</h5>
<p>Following <a href="http://www.macshadows.com/kb/index.php?title=How_To:_Enable_BIND_-_Mac_OS_X's_Built-in_DNS_Server">these instructions</a>:</p>
<p><code><br />
sudo -s<br />
rndc-confgen -b 256 > /etc/rndc.conf<br />
head -n5 /etc/rndc.conf | tail -n4 > /etc/rndc.key<br />
</code></p>
<p>Make sure the ports match.</p>
<p><code><br />
launchctl load -w /System/Library/LaunchDaemons/org.isc.named.plist<br />
echo "launchctl start org.isc.named" >> /etc/launchd.conf<br />
</code></p>
<h5>Step 2: configure</h5>
<p>I didn&#8217;t need any fancy setup, so I pasted everything into <tt>/etc/named.conf</tt>:</p>
<p><code><br />
//<br />
// Include keys file<br />
//<br />
include "/etc/rndc.key";</p>
<p>// Declares control channels to be used by the rndc utility.<br />
//<br />
// It is recommended that 127.0.0.1 be the only address used.<br />
// This also allows non-privileged users on the local host to manage<br />
// your name server.</p>
<p>//<br />
// Default controls<br />
//<br />
controls {<br />
  inet 127.0.0.1 port 54 allow {any;}<br />
  keys { "rndc-key"; };<br />
};</p>
<p>options {<br />
  forwarders {<br />
    8.8.8.8;<br />
    8.8.4.4;<br />
  };</p>
<p>  listen-on-v6 { ::1; };<br />
  listen-on { 127.0.0.1; };<br />
};</p>
<p>zone "hulu.com" {<br />
  type forward;<br />
  forwarders {<br />
    208.122.23.22;<br />
    208.122.23.23;<br />
  };<br />
};<br />
zone "unblock-us.com" {<br />
  type forward;<br />
  forwarders {<br />
    208.122.23.22;<br />
    208.122.23.23;<br />
  };<br />
};<br />
</code></p>
<h5>Step 3: verify</h5>
<p>Check for typos in the configuration:<br />
<code><br />
named-checkconf /etc/named.conf</p>
<p>and check if we get new results. Before <tt>nslookup</tt> returned:<br />
</code><code><br />
$ nslookup hulu.com<br />
Server:		10.255.255.4<br />
Address:	10.255.255.4#53</p>
<p>Non-authoritative answer:<br />
Name:	hulu.com<br />
Address: 63.150.131.26<br />
Name:	hulu.com<br />
Address: 63.150.131.11<br />
</code></p>
<p>Now I get:<br />
<code><br />
# nslookup hulu.com<br />
Server:		127.0.0.1<br />
Address:	127.0.0.1#53</p>
<p>Non-authoritative answer:<br />
Name:	hulu.com<br />
Address: 184.154.113.147<br />
Name:	hulu.com<br />
Address: 50.22.86.53<br />
Name:	hulu.com<br />
Address: 173.208.155.19<br />
Name:	hulu.com<br />
Address: 173.208.170.19<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2012/03/07/unblock-us-for-mac-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to set up your own dyndns server (simple!)</title>
		<link>http://amazing-development.com/archives/2012/02/13/how-to-set-up-your-own-dyndns-server-simple/</link>
		<comments>http://amazing-development.com/archives/2012/02/13/how-to-set-up-your-own-dyndns-server-simple/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 21:03:25 +0000</pubDate>
		<dc:creator>schlumpf</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=524</guid>
		<description><![CDATA[Last week I was asked whether I knew how to set up a dyndns server. Well, I didn&#8217;t at that time, but I did some research. This is what I found. First, problem description. At home,you have a FritzBox or similar DSL router that lets you specify a dnydns server. For some reason, you don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I was asked whether I knew how to set up a dyndns server. Well, I didn&#8217;t at that time, but I did some research. This is what I found.<span id="more-524"></span></p>
<p>First, problem description. </p>
<ul>
<li>At home,you have a FritzBox or similar DSL router that lets you specify a dnydns server.</li>
<li>For some reason, you don&#8217;t want to use one of the predefined services, e.g. dyndns.org. </li>
<li>But you have a webserver somewhere in the internet with a domain and some webspace where you can run PHP scripts.</li>
<li>You don&#8217;t care whether the real DNS entry (domain name service) is changed, as long as your customers or whoever gets to see the right page. So this is not going to be a real dynamic DNS entry, but just some sophisticated redirect mechanism. </li>
</ul>
<p>My FritzBox allows to specify a user-defined server to use for DynDNS. But I didn&#8217;t know how it would notify this server about my home IP address. I couldn&#8217;t find any documentation about this anywhere. So I wrote a script to print all the information about the request into a log file. This is what I found: </p>
<ul>
<li>The FritzBox lets you specify username and password for the dyndns server, but neither is transmitted in the request parameters (GET or POST). This led me to think of HTTP authentication instead (authentification is needed if you want to control <em>who</em> can set the IP address for dyndns).</li>
<li> Also, the FritzBox&#8217;s IP address is not transmitted in the request parameters, but this is superfluous as you can get it from the server parameters ($_SERVER["REMOTE_ADDR"] in PHP). </li>
</ul>
<p>So what do you need?</p>
<p>First, a .htaccess file to specify authentication for the dyndns script:</p>
<pre>
# put the name of the PHP script you're about to write here:
&lt;Files "dyndns.php">
   AuthType Basic
   AuthName "Authentication for clients that want to connect to this dyndns server."
   # the name of the password file (see below):
   # Specify the absolute path, or the path relative to the server root!
   AuthUserFile /full/path/my-passwords
   # the username of your choice:
   require user dyndnsuser
&lt;/Files>
</pre>
<p>You need to create the my-passwords file using the htpasswd utility that comes with the apache webserver installation. To create a password file called &#8220;my-passwords&#8221; with a user &#8220;dyndnsuser&#8221;, use this command on the shell command line:<br />
<code><br />
htpasswd -c my-passwords dyndnsuser<br />
</code><br />
It will let you type a password. </p>
<p>Now only clients with the correct username/password authentication will be able to call the dnydns.php script. Such as your DSL router. </p>
<p>Then, the script itself, here called dyndns.php: </p>
<pre>
&lt;?php
# this include file contains some helper functions:
include("dns-functions.inc");    

if ( readIpFromFile() == getIpFromRequest()) {
  header("HTTP/1.1 304 IP address didn't change", true, 304);
  message("no change in IP, address is " . getIpFromRequest() . "\\n");
} else {
  if (writeIpToFile()){
    header("HTTP/1.0 200 OK", true, 200);
    message("change successful, new address is " . getIpFromRequest() . "\\n");
  } else {
    header("HTTP/1.0  500 Error writing file or similar", true, 500);
    message("error writing file or other.\\n");
    exit;
  }
}
?>
</pre>
<p>The dns-functions.inc include file with the helper functions:</p>
<pre>
&lt;?php
# name of the file where the IP address will be stored:
$ip_file = "./ip";

# write debug stuff to a logfile
function message($text) {
  $file = fopen("dyndns.log", "a");
  fwrite($file, $text);
  fclose($file);
}

# get IP address from request parameter, or if none is given,
# from the REMOTE_ADDR parameter
function getIpFromRequest() {
  # just in case the IP _is_ in the request parameters, you never know:
  if (isset($_GET["ip"])) {
    return $_GET["ip"];
  }
  if (isset($_POST["ip"])) {
    return $_POST["ip"];
  }
  # if it's not, we get it from the remote address parameter:
  return $_SERVER["REMOTE_ADDR"];
}

# read the IP address from the file.
function readIpFromFile() {
  global $ip_file;
  if(file_exists($ip_file)) {
    if(filesize($ip_file)>0) {
      $file = fopen($ip_file, "r");
      $ip = fread($file, filesize($ip_file));
      fclose($file);
      return $ip;
    }
  }
}

# write the IP to the file. will return 'false' if there is a problem.
function writeIpToFile()     {
  global $ip_file;
  $file = fopen($ip_file, "w");
  $result = fwrite($file, getIpFromRequest());
  fclose($file);
  return result;
}
?>
</pre>
<p>This PHP stuff was inspired by <a href="http://www.michis-homepage.net/en/scripting_dyndns.php" title="Michi" target="_blank">Michi&#8217;s dyndns script</a>. </p>
<p>You may want to add the following to your .htaccess file to prevent people from spying out your setup:</p>
<pre>
&lt;Files "dns-functions.inc">
  deny from all
&lt;/Files>

&lt;Files "ip">
  deny from all
&lt;/Files>

&lt;Files "my-passwords">
  deny from all
&lt;/Files>
</pre>
<p>All the stuff you have written so far can be placed anywhere on your webspace, as long as you specify the complete URL path to the dyndns.php script as the &#8220;update URL&#8221; in the Fritzbox Dyndns configuration. </p>
<p>So now the FritzBox can pass it&#8217;s IP address to your webserver. In my FritzBox&#8217;s log file, there was no message if this process was successful, I only saw log entries if  something went wrong (in which case I had to look at the dyndns.log file the script writes on the webserver to check what happened). </p>
<p>But what then? How do we set up the webserver to actually direct requests to the FritzBox&#8217;s IP? You will need a directory and/or a subdomain on your server which to use for the redirect, so you can type something like fritzbox.mywebserver.com or myserver.com/fritzbox to be redirected to your FritzBox. </p>
<p>There are several possibilites to do the redirect. </p>
<p>1. Return a &#8220;Location&#8221; header informing the client that the document he&#8217;s looking for is somewhere else.<br />
to do this, you&#8217;ll have to create an index.php script in the directory or at the subdomain that looks like this:</p>
<pre>
&lt;?php
# specify complete path to the include file if it's in another directory:
include("dns-functions.inc");
$newurl= "http://" . readIpFromFile();
header("Location: $newurl");
?>
</pre>
<p>Whenever a client goes to fritzbox.mywebserver.com, it will be redirected to your FritzBox&#8217;s current IP address (URL in the browser&#8217;s location bar will change). </p>
<p>2. Use a frame redirect. This is a little bit more subtle since the IP address will not show up in the browser&#8217;s location bar, but on the other hand, if the client navigates within the page, the browser&#8217;s location bar will not show that, either. It will always just show the main domain: fritzbox.mywebserver.com</p>
<p>In this case, the index.php needs to look like this:</p>
<pre>
&lt;?php
include("dns-functions.inc");
$newurl="http://" . readIpFromFile();
?>
&lt;html>
&lt;frameset rows="100%">
  &lt;frame src="&lt;? echo $newurl; ?>">
&lt;/frameset>
&lt;noframes>
  &lt;body>Please follow &lt;a href="&lt;?echo $newurl; ?>">link&lt;/a>!&lt;/body>
&lt;/noframes>
&lt;/html>
</pre>
<p>3. Use Rewrite Rules. This will make the forwarding look most professional as the client/browser will only see the main domain and the redirect will happen on the webserver (like with a proxy). Drawback is that POST parameters are not passed on. </p>
<p>For the Rewrite Rules to work, you&#8217;ll have to adapt the dyndns.php script to make a change to the .htaccess file whenever a new IP is set. I haven&#8217;t tried this yet but I&#8217;ll let you know as soon as I figured it out <img src='http://amazing-development.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2012/02/13/how-to-set-up-your-own-dyndns-server-simple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cups and duplex banner pages</title>
		<link>http://amazing-development.com/archives/2011/07/26/cups-and-duplex-banner-pages/</link>
		<comments>http://amazing-development.com/archives/2011/07/26/cups-and-duplex-banner-pages/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 23:43:09 +0000</pubDate>
		<dc:creator>schlumpf</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=511</guid>
		<description><![CDATA[After a system update on my computer (Gentoo linux), CUPS (version 1.4.6-r2) suddenly decided it was a good idea to print the banner pages before each printing job double-sided, i.e. with the banner text on both sides of the page. This is annoying because it ruins the usefulness of the blank side of the banner [...]]]></description>
			<content:encoded><![CDATA[<p>After a system update on my computer (Gentoo linux), CUPS (version 1.4.6-r2) suddenly decided it was a good idea to print the banner pages before each printing job double-sided, i.e. with the banner text on both sides of the page. This is annoying because it ruins the usefulness of the blank side of the banner page as scribbling paper. </p>
<p>So how to get rid of this? </p>
<p>There is no simple solution like checking a box somewhere in the CUPS settings. But there is an easy solution nonetheless: you can define your own banner page as described <a href="http://www.cups.org/articles.php?L204+TFAQ+Q">in the CUPS FAQ</a>. </p>
<p>Mine is now a plain text file and looks like this: </p>
<pre>

           Job Name: {?job-name}

          From User: {?job-originating-user-name}

       Printer Name: {?printer-name}

      Creation Time: {?time-at-creation}
</pre>
<p>You can also use a postscript file, though I haven&#8217;t tried how the {?parameter} thingies work there. </p>
<p>This file needs to go into <tt>/usr/share/cups/banner/</tt>, then you need to restart the cups-demon, and then you can select the new banner page in the CUPS settings at  http://localhost:631, go to Printers->Administration->Default Settings->Banner. </p>
<p>This is then printed single-sided as it should be. </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2011/07/26/cups-and-duplex-banner-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pgrep or pkill sometimes do not find process</title>
		<link>http://amazing-development.com/archives/2009/10/15/pgrep-or-pkill-do-not-find-process/</link>
		<comments>http://amazing-development.com/archives/2009/10/15/pgrep-or-pkill-do-not-find-process/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 10:07:33 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=415</guid>
		<description><![CDATA[The usual problem: you want to kill a process. $ ps aux &#124; grep randomprocessname psycho 20429 0.0 0.0 11824 1580 pts/7 S+ 12:00 0:00 /bin/bash ./randomprocessname psycho 20528 0.0 0.0 4188 740 pts/17 R+ 12:00 0:00 grep randomprocessname $ pkill -9 randomprocessname WTF? Kill that sucker! $ pkill -9 randomprocessname No typo... Am I [...]]]></description>
			<content:encoded><![CDATA[<p>The usual problem: you want to kill a process.</p>
<p><code>$ ps aux | grep randomprocessname<br />
psycho   20429  0.0  0.0  11824  1580 pts/7    S+   12:00   0:00 /bin/bash ./randomprocessname<br />
psycho   20528  0.0  0.0   4188   740 pts/17   R+   12:00   0:00 grep randomprocessname<br />
$ pkill -9 randomprocessname<br />
<font color="red">WTF? Kill that sucker!</font><br />
$ pkill -9 randomprocessname<br />
<font color="red">No typo... Am I crazy?</font><br />
$ pgrep randomprocessname<br />
<font color="red">What's wrong?</font><br />
$ pgrep randomprocessna<br />
20429<br />
$ pkill -9 randomprocessna</code></p>
<p>For some arcane reason <code>pgrep/pkill</code> matches only the first 15 characters.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2009/10/15/pgrep-or-pkill-do-not-find-process/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android G1 gprs setup for simyo with 1gb data plan</title>
		<link>http://amazing-development.com/archives/2009/03/03/android-g1-gprs-setup-for-simyo-with-1gb-data-plan/</link>
		<comments>http://amazing-development.com/archives/2009/03/03/android-g1-gprs-setup-for-simyo-with-1gb-data-plan/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 08:52:38 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=382</guid>
		<description><![CDATA[Last week I added the 1gb data plan to my Simyo contract to use the SIM with my Christmas G1. I tried a few configurations I found online for simyo but they did not work for me. After some frustration I tried an eplus configuration and this one finally worked for me: Name: does not [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/modenadude/3299053044/"><img class="alignright" src="http://static.amazing-development.com/blog_images/09/g1_black.jpg"/></a>Last week I added the 1gb data plan to my Simyo contract to use the SIM with my Christmas G1. I tried a few configurations I found online for simyo but they did not work for me. After some frustration I tried an eplus configuration and this one finally worked for me:</p>
<p><code><br />
<b>Name:</b> does not matter<br />
<b>APN:</b> internet.eplus.de<br />
<b>Proxy:</b> &lt;empty&gt;<br />
<b>Port:</b> &lt;empty&gt;<br />
<b>Username:</b> eplus<br />
<b>Password:</b> &lt;empty&gt;<br />
<b>Server:</b> &lt;empty&gt;<br />
<b>MMSC:</b> &lt;empty&gt;<br />
<b>MMS proxy:</b> &lt;empty&gt;<br />
<b>MMC:</b> 262<br />
<b>MNC:</b> 03<br />
<b>APN type:</b> &lt;empty&gt;<br />
</code></p>
<p><i>Update:</i></p>
<p>The recommended configuration is:</p>
<p><code><br />
<b>Name:</b> does not matter<br />
<b>APN:</b> internet.eplus.de<br />
<b>Proxy:</b> &lt;empty&gt;<br />
<b>Port:</b> &lt;empty&gt;<br />
<b>Username:</b> <font color="red">simyo</font><br />
<b>Password:</b> <font color="red">simyo</font><br />
<b>Server:</b> &lt;empty&gt;<br />
<b>MMSC:</b> &lt;empty&gt;<br />
<b>MMS proxy:</b> &lt;empty&gt;<br />
<b>MMC:</b> 262<br />
<b>MNC:</b> 03<br />
<b>APN type:</b> &lt;empty&gt;<br />
</code></p>
<p>After the initial success with the eplus configuration, I had some problems with it, too. But I guess these errors were internal eplus network hiccups because they were gone without me changing anything and now both configs work.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2009/03/03/android-g1-gprs-setup-for-simyo-with-1gb-data-plan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tab + Firefox on OS X</title>
		<link>http://amazing-development.com/archives/2009/02/26/tab-firefox-on-os-x/</link>
		<comments>http://amazing-development.com/archives/2009/02/26/tab-firefox-on-os-x/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 17:19:30 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=377</guid>
		<description><![CDATA[A few days ago I finally upgraded my (== my employer&#8217;s) Macbook Pro from Tiger to Leopard. Everything worked flawless except for one crazy problem: I could not use to tab key the way I used to in forms. My usual routine of quickly entering username, tab, password, tab, hit return did not work anymore. [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I finally upgraded my (== my employer&#8217;s) Macbook Pro from Tiger to Leopard. Everything worked flawless except for one crazy problem: I could not use to tab key the way I used to in forms. My usual routine of quickly entering username, tab, password, tab, hit return did not work anymore. I searched through the Firefox settings but couldn&#8217;t find the &#8220;Drive psycho crazy&#8221;-option.</p>
<p><img class="alignright" src="http://static.amazing-development.com/blog_images/09/tab_osx.png"/>But thanks to the omniscient internet I found <a href="http://bjkeefe.blogspot.com/2006/03/yaroct-macfirefox-tab-key-nav.html">a solution</a>. At the bottom of the &#8220;Keyboard &#038; Mouse&#8221; preferences page is a setting which allows you to navigate only between text boxes or between all controls. I don&#8217;t know who came up with the great idea that the default should be &#8220;text boxes and lists only&#8221;, but I guess the mighty Steve knows what he is doing.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2009/02/26/tab-firefox-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pair Programming killed the Uber-coder&#8230;</title>
		<link>http://amazing-development.com/archives/2009/02/21/pair-programming-killed-the-uber-coder/</link>
		<comments>http://amazing-development.com/archives/2009/02/21/pair-programming-killed-the-uber-coder/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 20:49:22 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=347</guid>
		<description><![CDATA[I stumbled over a great essay on pair-programming (via James Shore). Rod Hilton explains it much better than I could ever do, why you should Pair-Program. But I haven&#8217;t heard about the &#8220;ping-pong pairing&#8221;: When doing Test-Driven Development, one of the things we do is called “ping-pong pairing”. So the other developer will write a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/indi/116404571/"><img class="alignright" src="http://static.amazing-development.com/blog_images/09/keyboard.jpg"/></a>I stumbled over a <a href="http://www.nomachetejuggling.com/2009/02/21/i-love-pair-programming/">great essay on pair-programming</a> (via <a href="http://jamesshore.com/Blog/Whats-Pair-Programming-Really-Like.html">James Shore</a>).</p>
<p>Rod Hilton explains it much better than I could ever do, why you should Pair-Program. But I haven&#8217;t heard about the &#8220;ping-pong pairing&#8221;:</p>
<blockquote><p>When doing Test-Driven Development, one of the things we do is called “ping-pong pairing”. So the other developer will write a test, then make it compile but fail. Then he passes the keyboard to me. I implement the feature just enough to make the test pass, then I write another failing test and pass it back.</p></blockquote>
<p>I have to try this on Monday&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2009/02/21/pair-programming-killed-the-uber-coder/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Drop all tables from a mysql database</title>
		<link>http://amazing-development.com/archives/2009/01/31/drop-all-tables-from-a-mysql-database/</link>
		<comments>http://amazing-development.com/archives/2009/01/31/drop-all-tables-from-a-mysql-database/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 19:19:45 +0000</pubDate>
		<dc:creator>schlumpf</dc:creator>
				<category><![CDATA[all]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=335</guid>
		<description><![CDATA[Sometimes you want to reset a database to its virgin state, without actually deleting and re-creating the whole database (perhaps because your user doesn&#8217;t have the right to create a database). There are a lot of links out there that give you a quick answer on how to drop all tables from a database in [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you want to reset a database to its virgin state, without actually deleting and re-creating the whole database (perhaps because your user doesn&#8217;t have the right to create a database). There are a lot of links out there that give you a quick answer on how to drop all tables from a database in a single-line shell script. Some examples:</p>
<ul>
<li><a href="http://www.thingy-ma-jig.co.uk/blog/10-10-2006/mysql-drop-all-tables">http://www.thingy-ma-jig.co.uk/blog/10-10-2006/mysql-drop-all-tables</a></li>
<li><a href="http://www.cyberciti.biz/faq/how-do-i-empty-mysql-database/">http://www.cyberciti.biz/faq/how-do-i-empty-mysql-database/</a></li>
<li><a href="http://knaddison.com/technology/mysql-drop-all-tables-database-using-single-command-line-command">http://knaddison.com/technology/mysql-drop-all-tables-database-using-single-command-line-command</a></li>
</ul>
<p>However this does not work if there are foreign key constraints between the tables (because the tables constraining others need to be deleted first). Here&#8217;s the advanced version that solves this problem: </p>
<pre>
#!/bin/bash
USERNAME=myUser
PASSWORD=myPassword
HOSTNAME=dbHost
DATABASE=mydb
while (true) ; do
    TABLES=`mysql -h $HOSTNAME -u $USERNAME -D $DATABASE --password=$PASSWORD \
                  --batch -e "show tables" | grep -v Tables_in`
    if [ -z $TABLES ] ; then break; fi
    for i in $TABLES ; do
        mysql -h $HOSTNAME -u $USERNAME -D $DATABASE --password=$PASSWORD  -e "drop table $i"
    done
done
</pre>
<p>I agree this is not <em>nice</em> because it&#8217;s a brute force approach &#8211; but hey, it works! And resetting a database is most probably not a performance-critical task anyway. </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2009/01/31/drop-all-tables-from-a-mysql-database/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Javascript &#8220;close hook&#8221; for browser window</title>
		<link>http://amazing-development.com/archives/2008/11/25/javascript-close-hook-for-browser-window/</link>
		<comments>http://amazing-development.com/archives/2008/11/25/javascript-close-hook-for-browser-window/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 21:38:32 +0000</pubDate>
		<dc:creator>schlumpf</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=333</guid>
		<description><![CDATA[Today I wanted to implement something that would prevent me from accidentally closing the browser window while I was doing stuff in my webapp. I&#8217;m no javascript expert, so I checked some newsgroups and found more and more complex solutions the longer the threads were. Here&#8217;s what works for me: &#60;script type="text/javascript"> window.onbeforeunload = function(){ [...]]]></description>
			<content:encoded><![CDATA[<p>Today I wanted to implement something that would prevent me from accidentally closing the browser window while I was doing stuff in my webapp. I&#8217;m no javascript expert, so I checked some newsgroups and found more and more complex solutions the longer the threads were. <span id="more-333"></span></p>
<p>Here&#8217;s what works for me: </p>
<pre>
&lt;script type="text/javascript">
  window.onbeforeunload = function(){
    return "Did you save your stuff?"
  }
&lt;/script>
</pre>
<p>I have no idea why this behaves as it does, it must be one of those &#8220;very interesting ideas&#8221; Frank mentioned about javascript. </p>
<p>What it does is this: When the user presses the browser&#8217;s &#8220;x&#8221; to close the window, this dialog box is shown:<br />
<center><img src="http://ujap.de/external/javascript-close-hook.png" width="497" height="175" alt="confirm dialog box" style="border: 1pt solid black"/></center></p>
<p>If the user presses Cancel, the box disappears and the browser window remains open, and if she presses Okay, the browser window closes (who&#8217;d have guessed). So far, so good. Unfortunately the message is displayed even if the user clicks on a link or submits a form (to do something within the webapp) . </p>
<p>So how do I fix this? The newsgroups said that I could add a condition to check if I really want to warn the user about closing, like this: </p>
<pre>
&lt;script type="text/javascript">
  var hook=true;
  window.onbeforeunload = function() {
    if (hook) {
      return "Did you save your stuff?"
    }
    // no return value obviously means no dialog box.
  }
  function unhook() {
     hook=false;
  }
&lt;/script>
</pre>
<p>The default is to use the hook, and I can use the <code>unhook()</code> function to disable the hook. How does this help? How do I know when I want the hook disabled? Frank knew the solution, and it&#8217;s really very simple: I want to disable the hook whenever the user clicks on one of my own links or buttons within the webapp.  This can be done by adding an <code>onClick</code> event to each link or button like this: </p>
<pre>
&lt;a href="..." onClick="unhook()">Some link within my app&lt;/a>
</pre>
<p>At first it looks a bit cumbersome to change all the links and buttons, but in a webapp, most of the links will be written by some application code anyway so it&#8217;s not much trouble to change them all at once. </p>
<p>It&#8217;s a bit strange because what I&#8217;m doing here is programming some general behaviour (the hook) and then exclude all the common use-cases (internal links, by calling unhook()) because I can&#8217;t make javascript react to the few exceptions (browser close button) directly. </p>
<p>The final page looks something like this: </p>
<pre>
&lt;html>
  &lt;head>
    &lt;script type="text/javascript">
      var hook = true;
      window.onbeforeunload = function() {
        if (hook) {
          return "Did you save your stuff?"
        }
      }
      function unhook() {
        hook=false;
      }
    &lt;/script>
  &lt;/head>
  &lt;body>
    &lt;!-- this will ask for confirmation: -->
    &lt;a href="http://google.com">external link&lt;/a>

    &lt;!-- this will go without asking: -->
    &lt;a href="anotherPage.html" onClick="unhook()">internal link, un-hooked&lt;/a>
  &lt;/body>
&lt;/html>
</pre>
<p>Closing or re-loading the window will display the confirm box, too.<br />
<script type="text/javascript">
    var hook = true;
    window.onbeforeunload = function(){
    if (hook) {
        return "Hope you like it."
    }
    }
    function unhook() {
    hook=false;
    }
</script><br />
Use the following links to check that it works:<br />
<a href="http://google.com">Don&#8217;t leave for Google</a> before you <a href="#respond" onClick="unhook()">leave a comment</a>.<br />
You shouldn&#8217;t be able to close this page without warning, either. </p>
<p>There&#8217;s one small problem left: if you click on the &#8220;leave a comment&#8221; link, the page will not be re-loaded because it&#8217;s just a page-internal link, and after that, the hook variable will be false and you won&#8217;t be asked for confirmation if you click on the google link again. But thankfully I don&#8217;t have these page-internal links in my webapp&#8230; </p>
<p><strong>Addendum:</strong> <a href="http://blog.formatvorlage.de/" target="_blank">Claus Augusti</a> directed my attention to two official documentation sites about the <tt>onbeforeunload</tt> event. Thanks you! The documentation in the <a href="https://developer.mozilla.org/En/DOM/Window.onbeforeunload" target="_blank">Mozilla Developer Center</a> explains that one should not just return a string, but should assign a value to the <tt>returnValue</tt> property of the <tt>onbeforeunload</tt> event (browser-dependent), like this: </p>
<pre>
window.onbeforeunload = function (e) {
  var e = e || window.event;
  if (e) {   // For IE and Firefox
    e.returnValue = 'Any string';
  }
  return 'Any string';   // For Safari
};
</pre>
<p>This is contradictory to the example given in <a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx">Microsoft&#8217;s documentation</a> (returning a string is sufficient), and contrary to my experience with Firefox, but at least it helps to understand why this works at all. </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/11/25/javascript-close-hook-for-browser-window/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Chumby goes i18n &#8211; soon available outside US?</title>
		<link>http://amazing-development.com/archives/2008/06/02/chumby-goes-i18n-soon-available-outside-us/</link>
		<comments>http://amazing-development.com/archives/2008/06/02/chumby-goes-i18n-soon-available-outside-us/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 16:52:30 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=323</guid>
		<description><![CDATA[I just stumbled over a this ad for someone to do the internationalization for (probably) chumby.com. I hope this means that they will start selling the chumby outside the US soon Title: Ruby On Rails I18N Developer Skills: I18N, Ruby on Rails, mySQL &#8230; Job description: &#8230; Chumby Industries is looking for a Ruby On [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/chrys/1417766186/"><img class="alignright" src="http://static.amazing-development.com/blog_images/i18n.jpg"/></a><br />
I just stumbled over a <a href="http://seeker.dice.com/jobsearch/servlet/JobSearch?op=101&#038;dockey=xml/0/5/050b4c618eb4054c49cc0ff296a4fe3a@endecaindex&#038;c=1&#038;source=21">this  ad</a> for someone to do the internationalization for (probably) <a href="http://chumby.com">chumby.com</a>. I hope this means that they will start selling the chumby outside the US soon <img src='http://amazing-development.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<blockquote><p>
Title: Ruby On Rails I18N Developer<br />
Skills: I18N, Ruby on Rails, mySQL<br />
<i>&#8230;</i><br />
Job description:<br />
<i>&#8230;</i><br />
    Chumby Industries is looking for a Ruby On Rails/I18N Contractor to deliver results for the internationalization (I18N) effort on the server.<br />
    This candidate would be responsible for externalizing all the text strings (both static and dynamically generated) that the website uses so that Chumby could later change the language of the site based on location.</p>
<p>    Skills required:<br />
    Previous I18N efforts on browser-based platforms<br />
    Strong web-based development experience<br />
    Ruby on Rails experience<br />
    mySQL database experience<br />
    Familiarity of layout issues involved with I18N
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/06/02/chumby-goes-i18n-soon-available-outside-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chumbytime</title>
		<link>http://amazing-development.com/archives/2008/05/16/chumbytime/</link>
		<comments>http://amazing-development.com/archives/2008/05/16/chumbytime/#comments</comments>
		<pubDate>Fri, 16 May 2008 16:50:07 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=322</guid>
		<description><![CDATA[Two days I got my chumby. Chumby Industries tries really hard to keep foreigners from buying one of their nice toys: they only accept US credit cards and shipping only to a US address. But I&#8217;m lucky, one of my colleagues from Mountain View ordered one for me. My experience so far was great. Step [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/mikelutz/2210100213/"><img alt="mikelutz chumby pic from flickr" class="alignright" src="http://static.amazing-development.com/blog_images/chumby.jpg"/></a>Two days I got my chumby. Chumby Industries tries really hard to keep foreigners from buying one of their nice toys: they only accept US credit cards and shipping only to a US address. But I&#8217;m lucky, one of my colleagues from Mountain View ordered one for me.</p>
<p>My experience so far was great.</p>
<p><b>Step one: configure WiFi</b><br />
It detected my local network without a problem. I had to enter the password and was ready to go.</p>
<p><b>Step two: activate chumby</b><br />
Create an account at <a href="http://chumby.com">chumby.com</a> and click on &#8220;activate chumby&#8221;. It shows a 4&#215;4 matrix of dots you have to copy to your chumby to connect you account with your device. This is a nice idea. It&#8217;s very simple, easy to use but effective. And surprisingly that&#8217;s it.</p>
<p><b>Step three: add widgets</b><br />
Just one click. Sometimes the widgets need a some configuration but everything is explained right there.</p>
<p><b>Minor annoyances</b></p>
<ul>
<li>only two brightness settings: high &amp; low</li>
<li>you have to press pretty hard on the touchscreen</li>
</ul>
<p><b>Plans:</b><br />
Find a German power supply (should be easy) and start coding a widget <img src='http://amazing-development.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/05/16/chumbytime/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Girl&#8217;s day in the office</title>
		<link>http://amazing-development.com/archives/2008/04/25/girls-day-in-the-office/</link>
		<comments>http://amazing-development.com/archives/2008/04/25/girls-day-in-the-office/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 09:20:02 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=318</guid>
		<description><![CDATA[Yesterday was Girl&#8217;s day and our office hosted a few girls from schools in and around Munich. We used Kara to teach them a little bit about programming. You can create finite state machines to control a bug which runs around and tries to solve different problems. The girls did much better than I expected [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="Google had a special doodle for the Girl's day" class="alignright" src="http://static.amazing-development.com/blog_images/girlsday08.gif"/><br />
Yesterday was <a href="http://www.girls-day.de/">Girl&#8217;s day</a> and our office hosted a few girls from schools in and around Munich.<span id="more-318"></span></p>
<p>We used <a href="http://www.swisseduc.ch/compscience/karatojava/">Kara</a> to teach them a little bit about programming. You can create finite state machines to control a bug which runs around and tries to solve different problems. The girls did much better than I expected and finished all the exercises we thought would be enough for a whole day before lunch. </p>
<p><img alt="Kara screenshot" class="alignright" src="http://static.amazing-development.com/blog_images/kara-worldeditor.gif"/></p>
<p><img alt="Kara for Ruby Logo" class="alignleft" src="http://static.amazing-development.com/blog_images/rubykara-small.png"/></p>
<p>Without much preparation I decided to teach them a little about &#8220;real&#8221; programming and Ruby because there is <a href="http://www.swisseduc.ch/informatik/karatojava/">a Ruby version of Kara</a> which lets you write Ruby code to control the bug.</p>
<p>The experiment was very successful. The girls solved all the problems again, this time in Ruby and from their feedback they really enjoyed it. </p>
<p>A couple of years ago I taught a programming course for kids at the Volkshochschule in Karlsruhe. At that time I used Perl (it was a loooong time ago and I didn&#8217;t know Ruby then) but if I ever do this again I will use RubyKara. </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/04/25/girls-day-in-the-office/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Darling, I shrinked the menu</title>
		<link>http://amazing-development.com/archives/2008/03/30/darling-i-shrinked-the-menu/</link>
		<comments>http://amazing-development.com/archives/2008/03/30/darling-i-shrinked-the-menu/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 14:54:18 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=315</guid>
		<description><![CDATA[Yesterday I installed version 2.5 of WordPress (which is great!) but the menu in the admin interface uses up a lot of screen estate. That&#8217;s why I just patched wp-admin.css to save some of this precious space in the admin interface. Just follow the above link and replace your version found in wp-admin/ if you [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I installed <a href="http://wordpress.org/development/2008/03/wordpress-25-brecker/">version 2.5 of WordPress (which is great!)</a> but the menu in the admin interface uses up a lot of screen estate. That&#8217;s why I just patched <a href="http://amazing-development.com/wp-admin/wp-admin.css">wp-admin.css</a> to save some of this precious space in the admin interface. Just follow the above link and replace your version found in wp-admin/ if you think the menu is too big.<span id="more-315"></span></p>
<p>The changes are really simple. Here are the diffs:</p>
<pre>
&#45;&#45;&#45; wordpress/wp&#45;admin/wp&#45;admin.css 2008&#45;03&#45;29 08&#58;21&#58;12.000000000 +0100
+++ ../amazing&#45;development.com/wp&#45;admin/wp&#45;admin.css        2008&#45;03&#45;30 16&#58;47&#58;22.000000000 +0200
@@ &#45;573,8 +573,8 @@

 #wphead #viewsite {
        position&#58; absolute;
&#45;   margin&#45;top&#58; 12px;
&#45;   margin&#45;left&#58; 10px;
+       margin&#45;top&#58; 3px;
+       margin&#45;left&#58; 3px;
 }
 #wphead #viewsite a {
        font&#58; 12px &quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Tahoma, Verdana, sans&#45;serif;
@@ &#45;590,8 +590,8 @@
 }

 #wphead h1 {
&#45;   font&#58; normal 36px Georgia, &quot;Times New Roman&quot;, Times, serif;
&#45;   padding&#58; 11px 170px 16px 12px;
+       font&#58; normal 18px Georgia, &quot;Times New Roman&quot;, Times, serif;
+       padding&#58; 11px 170px 20px 13px;
        margin&#58; 0;
        margin&#45;right&#58; 15%;
 }
@@ &#45;635,9 +635,9 @@
 }

 #adminmenu a {
&#45;   font&#45;size&#58; 16px;
+       font&#45;size&#58; 12px;
        padding&#58; 5px 7px;
&#45;   line&#45;height&#58; 30px;
+       line&#45;height&#58; 20px;
 }

 #adminmenu a.current, #sidemenu a.current {
@@ &#45;770,7 +770,7 @@
 }

 #submenu li {
&#45;   font&#45;size&#58; 14px;
+       font&#45;size&#58; 10px;
 }

 #minisub { /* for empty submenus */
@@ &#45;961,6 +961,14 @@
        text&#45;decoration&#58; underline;
 }

+#wpbody h2 {
+  font&#45;size&#58; 12pt;
+}
+
+#titlediv h3 {
+  display&#58; none;
+}
+
 #poststuff h2 {
        margin&#45;top&#58; 20px;
        font&#45;size&#58; 1.5em;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/03/30/darling-i-shrinked-the-menu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>One Laptop Per Child Germany</title>
		<link>http://amazing-development.com/archives/2008/03/06/one-laptop-per-child-germany/</link>
		<comments>http://amazing-development.com/archives/2008/03/06/one-laptop-per-child-germany/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 20:50:20 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/archives/2008/03/06/one-laptop-per-child-germany/</guid>
		<description><![CDATA[I just stumbled over an announcement about OLPC Germany. Last Tuesday was my first chance to play with an OLPC laptop. Everything but the keyboard feels incredibly solid and well made. The only thing I didn&#8217;t like was the user interface. I found it quite non-intuitive but perhaps this gets better if I spend a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://static.amazing-development.com/blog_images/olpc-deutschland.png"/>I just stumbled over <a href="http://www.heise.de/newsticker/meldung/104668">an announcement</a> about <a href="http://olpc-deutschland.de/">OLPC Germany</a>. Last Tuesday was my first chance to play with an OLPC laptop. Everything but the keyboard feels incredibly solid and well made. The only thing I didn&#8217;t like was the user interface. I found it quite non-intuitive but perhaps this gets better if I spend a little more time with it. And if not: I can always <a href="http://www.olpcnews.com/software/operating_system/how_to_ubuntu_on_xo_laptop.html">put Ubuntu on it</a>.</p>
<p>One thing is for sure: as soon as these laptops become available in Germany, I will buy one.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/03/06/one-laptop-per-child-germany/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Should I buy a TS-409 Pro Turbo NAS?</title>
		<link>http://amazing-development.com/archives/2008/02/15/should-i-buy-a-ts-409-pro-turbo-nas/</link>
		<comments>http://amazing-development.com/archives/2008/02/15/should-i-buy-a-ts-409-pro-turbo-nas/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 10:04:37 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>

		<guid isPermaLink="false">http://amazing-development.com/archives/2008/02/15/should-i-buy-a-ts-409-pro-turbo-nas/</guid>
		<description><![CDATA[I was thinking about buying a NAS (network attached storage) server for some time and looked at different products. My requirements are low power consuption, RAID support, and disk encryption. My current favorite is the TS-409 Pro Turbo NAS. It has: low power consuption (ok, sleep mode: 18.8W; in operation: 44.6W) RAID support (way more [...]]]></description>
			<content:encoded><![CDATA[<p>I was thinking about buying a NAS (network attached storage) server for some time and looked at different products. My requirements are low power consuption, RAID support, and disk encryption.</p>
<p>My current favorite is the <a href="http://www.qnap.com/pro_detail_feature.asp?p_id=85">TS-409 Pro Turbo NAS</a>. It has:</p>
<ul>
<li>low power consuption (ok, sleep mode: 18.8W; in operation: 44.6W)</li>
<li>RAID support (way more features than I would ever need: Single disk, RAID 0 (Disk Stripping), RAID 1 (Disk Mirroring), RAID 5, RAID 5+ Hot spare, RAID 6, and JBOD (Linear Disk Volume))</li>
<li>no encryption</li>
</ul>
<p>But I couldn&#8217;t find any other NAS server with a good price (less than 500€) and this combination of features so I guess I have to live without encrypted disks. If you have any experience with this box or know about another box which has all these features, please leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/02/15/should-i-buy-a-ts-409-pro-turbo-nas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best apple feature EVER!</title>
		<link>http://amazing-development.com/archives/2007/10/06/best-apple-feature-ever/</link>
		<comments>http://amazing-development.com/archives/2007/10/06/best-apple-feature-ever/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 12:04:06 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://amazing-development.com/archives/2007/10/06/best-apple-feature-ever/</guid>
		<description><![CDATA[According to an article by wired Apple added a special feature to their sexy metallic keyboards: accidental touches won&#8217;t activate caps lock. It&#8217;s the first step in a process to remove this useless and annoying key from all keyboards. I&#8217;ve remove my caps-lock key from a couple of keyboards already. But I did not know [...]]]></description>
			<content:encoded><![CDATA[<p>According to an <a href="http://blog.wired.com/gadgets/2007/10/apple-keyboard-.html">article by wired</a> Apple added a special feature to their sexy metallic keyboards: accidental touches won&#8217;t activate caps lock. It&#8217;s the first step in a process to remove this useless and annoying key from all keyboards.</p>
<p>I&#8217;ve remove my caps-lock key from a couple of keyboards already. But I did not know that a campaign called <a href="http://anticapslock.com/">anticAPSLOCK</a> existed which tries to ban caps-lock from future keyboards. Nice idea!</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2007/10/06/best-apple-feature-ever/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

