<?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>Daniel Hepper</title>
	<atom:link href="http://daniel.hepper.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://daniel.hepper.net/blog</link>
	<description>Random geeky stuff</description>
	<lastBuildDate>Mon, 08 Mar 2010 22:07:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Why I decided to spam you on Twitter</title>
		<link>http://daniel.hepper.net/blog/2010/03/why-i-decided-to-spam-you-on-twitter/</link>
		<comments>http://daniel.hepper.net/blog/2010/03/why-i-decided-to-spam-you-on-twitter/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 15:43:45 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=153</guid>
		<description><![CDATA[Like almost everybody I know I despise the useless updates by apps like Fourspare and Farmvill that clutter Twitter and Facebook with useless information.
But if you follow me on Twitter, you might have noticed that I myself allowed the Hundred Pushups iPhone app to post updates to my Twitter feed. Why this change of mind?
First, [...]]]></description>
			<content:encoded><![CDATA[<p>Like almost everybody I know I despise the useless updates by apps like Fourspare and Farmvill that clutter Twitter and Facebook with useless information.</p>
<p>But if you <a title="Follow Daniel Hepper on Twitter" href="http://twitter.com/danielhepper" target="_blank">follow me on Twitter</a>, you might have noticed that I myself allowed the <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=301174591&amp;mt=8&amp;partnerId=30&amp;partnerId=30&amp;siteID=COT1sVttcJs-jYec5BkWDv2YKuFbiXabvQ" target="_blank">Hundred Pushups iPhone app</a> to post updates to my Twitter feed. Why this change of mind?</p>
<p><a href="http://www.flickr.com/photos/reidgilman/2726458105/"><img class="alignright size-full wp-image-156" title="Doing a pushup (not me)" src="http://daniel.hepper.net/blog/wp-content/pushup.jpg" alt="Doing a pushup (not me)" width="200" height="186" /></a>First, let me explain what the app does. The goal of the Hundred Pushups iPhone app is, who would have guessed, to enable you to do 100 consecutive pushups. It offers a six week training program<a href="#f1">*</a> and allows you to log your workouts. It&#8217;s definitely not the greatest app ever and has lots of room for improvement but  it gets the job done: when I started training with the app on the 25th of January, I could do 37 consecutive pushups. Today, about 6 weeks and 15 workouts later, this number has more than doubled to 77.</p>
<p>That&#8217;s all well and good, you might intervene, but why boast with these numbers on Twitter?</p>
<p>Guess how I heard about the 100 pushups app for the first time? A status update on my Twitter feed caught my interest, I googled, found <a href="http://hundredpushups.com" target="_blank">the site</a>, bought the app and started training. I don&#8217;t remember who posted that update, but I&#8217;m really glad that person decided to do so. While the mere fact that you can do 100 pushups buys you nothing, a strong upper body definitely has its benefits.</p>
<p>At first, I was reluctant to allow the app to post on Twitter, because I didn&#8217;t want to annoy my followers with useless updates. But after seeing good progress, I decided that posting my progress to Twitter might be actually of value to somebody.</p>
<p>If my tweets motivate only one of my 197 followers to complete this training program, it is well worth pissing of the other 196.</p>
<p><a name="f1"></a><span style="color: #c0c0c0;">* 100 pushups in six weeks sounds to good to be true? Well, calling it a six week program is a bit, let&#8217;s say, optimistic. It would be more accurate to call it a six level training program. The levels, which are named week 1 to 6, get more and more difficult and at some point, your progress will stagnate. I was able to keep up with the first three weeks, but I&#8217;m struggling to complete week 4. Still, a 100% increase in 6 weeks isn&#8217;t to bad and I&#8217;m confident that I&#8217;ll achieve the 100 in the not so far future.</span></p>
<p><span style="color: #c0c0c0;">Image adapted from <a style="color: #c0c0c0;" href="http://www.flickr.com/photos/reidgilman/2726458105/"> &#8220;I Knew Pushups Would Pay Off Someday&#8221;</a> by <a style="color: #c0c0c0;" title="Link to reid.gilman's photostream" rel="dc:creator cc:attributionURL" href="http://www.flickr.com/photos/reidgilman/">reid.gilman</a>, licensed under <a style="color: #c0c0c0;" href="http://creativecommons.org/licenses/by-nc/2.0/deed.en">Creative Commons BY-NC</a></span><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2010/03/why-i-decided-to-spam-you-on-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>21st Web Montag in Cologne</title>
		<link>http://daniel.hepper.net/blog/2010/01/21st-web-montag-in-cologne/</link>
		<comments>http://daniel.hepper.net/blog/2010/01/21st-web-montag-in-cologne/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 22:48:56 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[webmontag]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=149</guid>
		<description><![CDATA[Yesterday evening, the 21st Web Montag Cologne took place. The list of participants had already been growing constantly during the last days before the event, but when @fbz, @scompt and me arrived at ~19:30, I was surprised anyway how many people where already there and engaged in lively discussions. Starting from 8 o&#8217;clock, three talks [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday evening, the <a href="http://webmontag.de/location/koeln/2010-01-18">21st Web Montag Cologne</a> took place. The list of participants had already been growing constantly during the last days before the event, but when <a href="http://twitter.com/fbz">@fbz</a>, <a href="http://twitter.com/scompt">@scompt</a> and me arrived at ~19:30, I was surprised anyway how many people where already there and engaged in lively discussions. Starting from 8 o&#8217;clock, three talks were given.</p>
<p>Jörn Zaefferer (<a href="http://twitter.com/bassistance">@bassistance</a>) presented the newly released jQuery 1.4. It offers new features and also an improved performance. If you use jQuery, it might be worth upgrading, despite some backwards-imcompatibilities. A lot of work has also been done on the website and the documentation.</p>
<p>Christoph Beckmann (<a href="http://twitter.com/cbek">@cbek</a>) talked about his experiences surviving a traffic peak caused by TV appearance with the help of Amazon Web Services. The solution involved migrating the <a title="Öffentliche Toiletten finden" href="http://www.lootogo.de/">Loo2Go</a> server to a big EC2 instance and using several caching servers. While the costs were marginal, the approach seems very labour intense to me.</p>
<p>Michael presented a new <a href="http://millepondomvc.de/">MVC framework written in PHP</a> which was heavily influenced by his <a href="http://www.millepondo.de/">experiences</a> working with Ruby on Rails.</p>
<p>After the talks, the discussions continued. All in all, it was once again a very interesting evening, thanks everybody for participating.</p>
<p>The next Web Montag in Cologne will probably be on the first or second Monday in March, so mark these dates in your calendar.</p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2010/01/21st-web-montag-in-cologne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to solve the 36 Cube puzzle &#8211; hints &amp; solution</title>
		<link>http://daniel.hepper.net/blog/2010/01/how-to-solve-the-36-cube-puzzle/</link>
		<comments>http://daniel.hepper.net/blog/2010/01/how-to-solve-the-36-cube-puzzle/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 19:00:51 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=128</guid>
		<description><![CDATA[For Christmas, I got the 36 Cube puzzle. It is consists of 36 towers in 6 colors and 6 different sizes and a base plate with 6 by 6 slots to plug in the towers. These slots are of different heights. The goal is to place one towers of every color in each row and [...]]]></description>
			<content:encoded><![CDATA[<p>For Christmas, I got the <a href="http://www.amazon.com/Think-Fun-6830-36-Cube/dp/B001F7VI30/ref=sr_1_1?ie=UTF8&amp;s=toys-and-games&amp;qid=1263141791&amp;sr=8-1" target="_blank">36 Cube puzzle</a>. It is consists of 36 towers in 6 colors and 6 different sizes and a base plate with 6 by 6 slots to plug in the towers. These slots are of different heights. The goal is to place one towers of every color in each row and column. And the  towers must fit to form a level cube.</p>
<p>After some tries, I came to the conclusion that this puzzle is the work of the devil and that I should not waste more brain cycles on solving it. So I wrote a little python script to solve the puzzle for me.</p>
<p><a onclick="document.getElementById('34cube').style.display='inline';" href="javascript:void(0)">Show sourcecode</a></p>
<div id="34cube" style="display: none;">

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
COLORS = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span><span style="color: #008000;">zip</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span> <span style="color: #66cc66;">&amp;</span>lt<span style="color: #66cc66;">;&amp;</span>lt<span style="color: #66cc66;">;</span> i <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>, <span style="color: black;">&#40;</span><span style="color: #483d8b;">'P'</span>,<span style="color: #483d8b;">'Y'</span>,<span style="color: #483d8b;">'O'</span>,<span style="color: #483d8b;">'B'</span>,<span style="color: #483d8b;">'R'</span>,<span style="color: #483d8b;">'G'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
COLORS<span style="color: black;">&#91;</span><span style="color: #008000;">False</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'X'</span>
&nbsp;
used_towers = <span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
&nbsp;
cube = <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
solution = <span style="color: black;">&#91;</span><span style="color: black;">&#91;</span><span style="color: #008000;">False</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
used = <span style="color: #008000;">tuple</span><span style="color: black;">&#40;</span><span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> test_color<span style="color: black;">&#40;</span>pos, solution, used_towers, color, size<span style="color: black;">&#41;</span>:
 <span style="color: #808080; font-style: italic;">#check if tower of this size and color has already been used</span>
 <span style="color: #ff7700;font-weight:bold;">if</span> color <span style="color: #66cc66;">&amp;</span>amp<span style="color: #66cc66;">;</span> used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span>:
  <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
 <span style="color: #808080; font-style: italic;">#check if tower has already been used in row or column:</span>
 <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">if</span> color == solution<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> color == solution<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
 <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> print_solution<span style="color: black;">&#40;</span>solution<span style="color: black;">&#41;</span>:
 <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">zip</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>COLORS<span style="color: black;">&#91;</span>c<span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">for</span> c <span style="color: #ff7700;font-weight:bold;">in</span> solution<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, <span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span> - s <span style="color: #ff7700;font-weight:bold;">for</span> s <span style="color: #ff7700;font-weight:bold;">in</span> cube<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> solve<span style="color: black;">&#40;</span>pos, solution, used_towers, best<span style="color: black;">&#41;</span>:
 <span style="color: #ff7700;font-weight:bold;">if</span> pos == <span style="color: #ff4500;">36</span>: <span style="color: #ff7700;font-weight:bold;">return</span> best, solution
 size = cube<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span>
 <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span>:
  color = <span style="color: #ff4500;">1</span> <span style="color: #66cc66;">&amp;</span>lt<span style="color: #66cc66;">;&amp;</span>lt<span style="color: #66cc66;">;</span> i
  <span style="color: #ff7700;font-weight:bold;">if</span> test_color<span style="color: black;">&#40;</span>pos, solution, used_towers, color, size<span style="color: black;">&#41;</span>:
   used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> = used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> | color
   solution<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span> = color
   <span style="color: #ff7700;font-weight:bold;">if</span> pos <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span> best:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;#######&quot;</span>, pos + <span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;towers placed&quot;</span>
    print_solution<span style="color: black;">&#40;</span>solution<span style="color: black;">&#41;</span>
    best = pos
   best, solution = solve<span style="color: black;">&#40;</span>pos+<span style="color: #ff4500;">1</span>, solution, used_towers, best<span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">if</span> best <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span>= <span style="color: #ff4500;">35</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> best, solution
   solution<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span> = <span style="color: #008000;">False</span>
   used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> = used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> ^ color
 <span style="color: #ff7700;font-weight:bold;">return</span> best, solution
&nbsp;
solve<span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, solution, used_towers, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span></pre></div></div>

</div>
<p>My program quickly came up with a correct placement for 34 towers &#8211; but it failed to find the complete solution.</p>
<pre>[('P', 5), ('Y', 3), ('O', 2), ('B', 1), ('R', 4), ('G', 6)]
[('Y', 4), ('O', 1), ('P', 6), ('R', 2), ('G', 5), ('B', 3)]
[('O', 6), ('B', 5), ('R', 3), ('G', 4), ('P', 1), ('Y', 2)]
[('R', 1), ('G', 2), ('Y', 5), ('P', 3), ('B', 6), ('O', 4)]
[('B', 2), ('P', 4), ('G', 1), ('Y', 6), ('O', 3), ('R', 5)]
[('G', 3), ('R', 6), ('B', 4), ('O', 5), ('X', 2), ('X', 1)]</pre>
<p>Legend:<br />
P = Purple, Y = Yellow, O = Orange, B = Blue, R = Red, G = Green, X = Empty<br />
The number is the size of the tower.<br />
As you can see, I didn&#8217;t waste much time on making the output pretty <img src='http://daniel.hepper.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_129" class="wp-caption aligncenter" style="width: 310px"><a href="http://daniel.hepper.net/blog/wp-content/36cube_almost_solved.jpg"><img class="size-medium wp-image-129" title="36cube almost solved" src="http://daniel.hepper.net/blog/wp-content/36cube_almost_solved-300x225.jpg" alt="36cube almost solved" width="300" height="225" /></a><p class="wp-caption-text">So close and yet so far</p></div>
<p>After spending lots of time verifying that my program was working correctly, I became impatient and googled for help. I found an answer, but it revealed to much, taking all the fun.</p>
<p>Therefore, I split my solution into multiple hints. If you are stuck, reveal just one of them at a time and try to figure it out by yourself. It is way more rewarding!</p>
<p>Hint #1 <a onclick="document.getElementById('hint1').style.display='inline';" href="javascript:void(0)">(show)</a>: <span id="hint1" style="display: none;">Your assumptions are probably wrong.<br />
Now go back and try to solve it. I&#8217;m waiting here.</span></p>
<p>Hint #2 <a onclick="document.getElementById('hint2').style.display='inline';" href="javascript:void(0)">(show)</a>: <span id="hint2" style="display: none;">The assumption that all towers of the same size only differ in color is wrong.</span></p>
<p>Hint #3 <a onclick="document.getElementById('hint3').style.display='inline';" href="javascript:void(0)">(show)</a>: <span id="hint3" style="display: none;">There are two towers which do fit on slots where the other towers of the same size do not fit.</span></p>
<p>Hint #4 <a onclick="document.getElementById('hint4').style.display='inline';" href="javascript:void(0)">(show)</a>: <span id="hint4" style="display: none;">The two special towers are the orange one of heigh 5 and the red one of height 6.</span></p>
<p>Hint #5 <a onclick="document.getElementById('hint5').style.display='inline';" href="javascript:void(0)">(show)</a>: <span id="hint5" style="display: none;">The orange tower of height 5 has to go to position (1,2) and the red tower of height 6 to (3,2) in my coordinate system.</span></p>
<p>Even if you uncovered all hints, the puzzle is still far from solved. You can still tinker with it forever.</p>
<p>Spoiler alert: Don&#8217;t uncover the solution, unless your are really desperate!</p>
<p><strong>Solution</strong> <a onclick="document.getElementById('solution').style.display='inline';" href="javascript:void(0)">(show)</a>:</p>
<div id="solution" style="display: none;">After I had found the two culprits, I adjusted my program by changing the array and inserting two special conditions. Within seconds I had a complete solution of the 36 Cube:</p>
<pre>[('P', 5), ('Y', 3), ('B', 2), ('O', 1), ('R', 4), ('G', 6)]
[('B', 4), ('P', 1), ('Y', 5), ('G', 2), ('O', 5), ('R', 3)]
[('R', 6), ('G', 5), ('P', 3), ('Y', 4), ('B', 1), ('O', 2)]
[('G', 1), ('R', 2), ('O', 6), ('B', 3), ('Y', 6), ('P', 4)]
[('Y', 2), ('O', 4), ('R', 1), ('P', 6), ('G', 3), ('B', 5)]
[('O', 3), ('B', 6), ('G', 4), ('R', 5), ('P', 2), ('Y', 1)]</pre>
<div id="attachment_130" class="wp-caption aligncenter" style="width: 310px"><a href="http://daniel.hepper.net/blog/wp-content/36cube_complete_solution.jpg"><img class="size-medium wp-image-130" title="36cube complete solution" src="http://daniel.hepper.net/blog/wp-content/36cube_complete_solution-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Finally solved</p></div>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
COLORS = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span><span style="color: #008000;">zip</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span> <span style="color: #66cc66;">&amp;</span>lt<span style="color: #66cc66;">;&amp;</span>lt<span style="color: #66cc66;">;</span> i <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>, <span style="color: black;">&#40;</span><span style="color: #483d8b;">'P'</span>,<span style="color: #483d8b;">'Y'</span>,<span style="color: #483d8b;">'O'</span>,<span style="color: #483d8b;">'B'</span>,<span style="color: #483d8b;">'R'</span>,<span style="color: #483d8b;">'G'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
COLORS<span style="color: black;">&#91;</span><span style="color: #008000;">False</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'X'</span>
&nbsp;
used_towers = <span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># definition with (1,2) and (3,2) switched</span>
cube = <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
solution = <span style="color: black;">&#91;</span><span style="color: black;">&#91;</span><span style="color: #008000;">False</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
used = <span style="color: #008000;">tuple</span><span style="color: black;">&#40;</span><span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> test_color<span style="color: black;">&#40;</span>pos, solution, used_towers, color, size<span style="color: black;">&#41;</span>:
 <span style="color: #808080; font-style: italic;">#check if tower of this size and color has already been used</span>
 <span style="color: #ff7700;font-weight:bold;">if</span> color <span style="color: #66cc66;">&amp;</span>amp<span style="color: #66cc66;">;</span> used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span>:
  <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
 <span style="color: #808080; font-style: italic;">#check if tower has already been used in row or column:</span>
 <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">if</span> color == solution<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> color == solution<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
 <span style="color: #808080; font-style: italic;"># special conditions for the two special towers</span>
 <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>pos/<span style="color: #ff4500;">6</span>, pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#41;</span> == <span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> color <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">2</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
 <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>pos/<span style="color: #ff4500;">6</span>, pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#41;</span> == <span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> color <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">4</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
 <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> print_solution<span style="color: black;">&#40;</span>solution<span style="color: black;">&#41;</span>:
 <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">zip</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>COLORS<span style="color: black;">&#91;</span>c<span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">for</span> c <span style="color: #ff7700;font-weight:bold;">in</span> solution<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, <span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span> - s <span style="color: #ff7700;font-weight:bold;">for</span> s <span style="color: #ff7700;font-weight:bold;">in</span> cube<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> solve<span style="color: black;">&#40;</span>pos, solution, used_towers, best<span style="color: black;">&#41;</span>:
 <span style="color: #ff7700;font-weight:bold;">if</span> pos == <span style="color: #ff4500;">36</span>: <span style="color: #ff7700;font-weight:bold;">return</span> best, solution
 size = cube<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span>
 <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span>:
  color = <span style="color: #ff4500;">1</span> <span style="color: #66cc66;">&amp;</span>lt<span style="color: #66cc66;">;&amp;</span>lt<span style="color: #66cc66;">;</span> i
  <span style="color: #ff7700;font-weight:bold;">if</span> test_color<span style="color: black;">&#40;</span>pos, solution, used_towers, color, size<span style="color: black;">&#41;</span>:
   used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> = used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> | color
   solution<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span> = color
   <span style="color: #ff7700;font-weight:bold;">if</span> pos <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span> best:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;#######&quot;</span>, pos + <span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;towers placed&quot;</span>
    print_solution<span style="color: black;">&#40;</span>solution<span style="color: black;">&#41;</span>
    best = pos
   best, solution = solve<span style="color: black;">&#40;</span>pos+<span style="color: #ff4500;">1</span>, solution, used_towers, best<span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">if</span> best <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span>= <span style="color: #ff4500;">35</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> best, solution
   solution<span style="color: black;">&#91;</span>pos/<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>pos<span style="color: #66cc66;">%</span>6<span style="color: black;">&#93;</span> = <span style="color: #008000;">False</span>
   used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> = used_towers<span style="color: black;">&#91;</span>size<span style="color: black;">&#93;</span> ^ color
 <span style="color: #ff7700;font-weight:bold;">return</span> best, solution
&nbsp;
solve<span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, solution, used_towers, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span></pre></div></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2010/01/how-to-solve-the-36-cube-puzzle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Asus EEE PC 901 with RunCore Pro IV SSD</title>
		<link>http://daniel.hepper.net/blog/2009/11/asus-eee-pc-901-with-runcore-pro-iv-ssd/</link>
		<comments>http://daniel.hepper.net/blog/2009/11/asus-eee-pc-901-with-runcore-pro-iv-ssd/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 20:11:12 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=120</guid>
		<description><![CDATA[A couple of weeks ago, I wrote about upgrading the SSD of my EEE PC 901 and the mixed results I got. I decided to return it and wait until a faster SSD by RunCore becomes available. Today, I received my brand new RunCore Pro IV SATA 70mm Mini PCIe SSD 32 GB (what a [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, I wrote about <a title="Asus EEE PC 901 with Super Talent PCIe SSD" href="http://daniel.hepper.net/blog/2009/09/asus-eee-pc-901-ssd-upgrade/">upgrading the SSD of my EEE PC 901</a> and the mixed results I got. I decided to return it and wait until a faster SSD by RunCore becomes available. Today, I received my brand new RunCore Pro IV SATA 70mm Mini PCIe SSD 32 GB (what a name!).</p>
<p>As I already wrote in my earlier post, swapping the SSD is really easy.</p>
<ol>
<li>Backup your data. If you want to reuse your current installation, use some imaging software. I booted from an Ubuntu Live CD and used dd.</li>
<li>Turn off your EEE, remove AC and battery.</li>
<li>Loosen the two screws of the lid on the bottom and remove the lid. You might have to apply a <em>little</em> bit of force with a flat screw driver.</li>
<li>Loosen the two screws that hold the SSD in place. Make sure the don&#8217;t fall into the case. If the do, you absolutely must find them before you plug in AC or the battery, otherwise you risk a short-circuit.</li>
<li>Replace the old SSD with the new one.</li>
<li>Fix the SSD, put on the lid, restore your image. Done!</li>
</ol>
<p>If anyone asks nicely, I can take some pictures of the process, but it is really simple. The only special tool you need is a very small Philips screwdriver. There was one in the box with the SSD, but it wasn&#8217;t small enough.</p>
<p>After swapping the drive and restoring the image, I booted the device for the first time. The EEE detected the drive without problem and I noticed immediately that the system was snappier. Then I ran the benchmark:<br />
<img class="aligncenter size-full wp-image-121" title="Benchmark Runcore Pro IV SSD" src="http://daniel.hepper.net/blog/wp-content/bench_runcore_crystal.JPG" alt="Benchmark Runcore Pro IV SSD" width="406" height="352" /></p>
<p>The sequential and 512k read performance is on par with the Super Talent SSD, but the write performance is miles ahead. To be honest I expected even faster write speeds, but I&#8217;m far from disappointed. The benchmark result is 7.5 times faster than the Super Talent SSD and a ridiculous 93x better than the stock SSD. Way to go, RunCore!</p>
<p>Older benchmark results:</p>
<div id="attachment_111" class="wp-caption aligncenter" style="width: 416px"><img class="size-full wp-image-111" title="Benchmark Super Talent SSD" src="http://daniel.hepper.net/blog/wp-content/bench_new_crystal.JPG" alt="Benchmark of Super Talent SSD" width="406" height="352" /><p class="wp-caption-text">Benchmark of Super Talent SSD</p></div>
<div id="attachment_110" class="wp-caption aligncenter" style="width: 417px"><img class="size-full wp-image-110" title="Benchmark of EEE PC 901 onboard SSD" src="http://daniel.hepper.net/blog/wp-content/bench_old_crystal.JPG" alt="Benchmark of EEE PC 901 onboard SSD" width="407" height="353" /><p class="wp-caption-text">Benchmark of EEE PC 901 onboard SSD</p></div>
<p>Disclaimer: I&#8217;m not affliated with any of the companies mentioned, I&#8217;m just excited that my little EEE PC might be usable again. If you think about dumping it for a new device, consider upgrading the SSD.</p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2009/11/asus-eee-pc-901-with-runcore-pro-iv-ssd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Automatic plugin update problem in Wordpress 2.8.x</title>
		<link>http://daniel.hepper.net/blog/2009/09/automatic-plugin-update-problem-in-wordpress-2-8-x/</link>
		<comments>http://daniel.hepper.net/blog/2009/09/automatic-plugin-update-problem-in-wordpress-2-8-x/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 20:15:13 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=115</guid>
		<description><![CDATA[After upgrading Wordpress to the current version, I could no longer automatically update plugins. This is the error message I got:
Downloading update from http://downloads.wordpress.org/plugin/xxx.zip.
Unpacking the update.
Warning:  unlink(/&#8230;/wp-content/upgrade/xxx.zip) [function.unlink]: No such file or directory in /&#8230;/wp-admin/includes/class-wp-upgrader.php on line 146
Incompatible archive PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file &#8216;/&#8230;/wp-content/upgrade/wp-syntax.0.9.8.zip&#8217;
After digging through the forums I found a solution [...]]]></description>
			<content:encoded><![CDATA[<p>After upgrading Wordpress to the current version, I could no longer automatically update plugins. This is the error message I got:</p>
<blockquote><p>Downloading update from <span>http://downloads.wordpress.org/plugin/xxx.zip</span>.</p>
<p>Unpacking the update.<br />
<strong>Warning</strong>:  unlink(/&#8230;/wp-content/upgrade/xxx.zip) [<a href="function.unlink">function.unlink</a>]: No such file or directory in <strong>/&#8230;/wp-admin/includes/class-wp-upgrader.php</strong> on line <strong>146</strong></p>
<p>Incompatible archive PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file &#8216;/&#8230;/wp-content/upgrade/wp-syntax.0.9.8.zip&#8217;</p></blockquote>
<p>After digging through the forums I found a <a href="http://wordpress.org/support/topic/278788?replies=20#post-1133939">solution to the plugin autoupdate problem in the Wordpress Support forum</a>.</p>
<p>Open the file wp-config.php in the root directory of your Wordpress installation and remove the definition of the WP_TEMP_DIR variable, i.e. a line that looks like this</p>
<pre>define('WP_TEMP_DIR', ABSPATH . "wp-content/upgrade");</pre>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2009/09/automatic-plugin-update-problem-in-wordpress-2-8-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asus EEE PC 901 SSD Upgrade</title>
		<link>http://daniel.hepper.net/blog/2009/09/asus-eee-pc-901-ssd-upgrade/</link>
		<comments>http://daniel.hepper.net/blog/2009/09/asus-eee-pc-901-ssd-upgrade/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 18:02:42 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=108</guid>
		<description><![CDATA[Update: Upgrade instructions and benchmark of the EEE 901 with an even faster SSD.
Recently, I upgraded the harddisk of my EEE PC. It comes with a 4 GB onboard SSD which in quite slow, and a 8 GB SSD which is even slower. A benchmark shows just how slow it is.

After reading the test of [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:<a href="http://daniel.hepper.net/blog/2009/11/asus-eee-pc-901-with-runcore-pro-iv-ssd/"> Upgrade instructions and benchmark of the EEE 901 with an even faster SSD.</a></strong></p>
<p>Recently, I upgraded the harddisk of my EEE PC. It comes with a 4 GB onboard SSD which in quite slow, and a 8 GB SSD which is even slower. A benchmark shows just how slow it is.</p>
<p style="text-align: center;"><img class="size-full wp-image-110 aligncenter" title="Benchmark onboard SSD" src="http://daniel.hepper.net/blog/wp-content/bench_old_crystal.JPG" alt="Benchmark onboard SSD" width="407" height="353" /></p>
<p style="text-align: left;">After reading the <a href="http://jkkmobile.blogspot.com/2009/05/meet-runcore-pro-iv-really-fast-ssd.html">test of the RunCore Pro IV SSD on jkkmobile,</a> I decided it was time to upgrade. Unfortunately, the RunCore SSDs are hard to come by in Germany, so I bought a 32 GB Super Talent PCIe SSD (FPM32GLSE) for about 100 €, expecting similar performance.</p>
<p style="text-align: left;">I made an image of the old drives and upgraded the BIOS to the newest version. To my surprise, installing the drive was as simple as swapping the RAM module.</p>
<p style="text-align: left;">After restoring the images to the new drive, I ran the benchmark again.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-111" title="Benchmark Super Talent SSD" src="http://daniel.hepper.net/blog/wp-content/bench_new_crystal.JPG" alt="Benchmark Super Talent SSD" width="406" height="352" /></p>
<p style="text-align: left;">Overall, the Super Talent SSD outperforms the onboard SSD. Sequential writing is a bit slower, but sequential reading is more than 3x faster. 4k writing is about 12x faster, but the absolute value of 0.7 MB/s is still quite low. A RunCore Pro IV should get about 16 MB/s which is 20x more.</p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2009/09/asus-eee-pc-901-ssd-upgrade/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>YouTube to sevenload Bookmarklet</title>
		<link>http://daniel.hepper.net/blog/2009/05/youtube-to-sevenload-bookmarklet/</link>
		<comments>http://daniel.hepper.net/blog/2009/05/youtube-to-sevenload-bookmarklet/#comments</comments>
		<pubDate>Mon, 11 May 2009 17:53:23 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[sevenload]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=85</guid>
		<description><![CDATA[Say you find a video on YouTube and you want to share it with your friends on sevenload. Now what?
YouTube to sevenload Bookmarklet to the rescue!
Just drag the link below to your bookmark toolbar:
YT2SL
If you are watching a video on youtube.com, click the bookmarklet to get redirected to the same video on sevenload.
becomes
You can also [...]]]></description>
			<content:encoded><![CDATA[<p>Say you find a video on YouTube and you want to share it with your friends on sevenload. Now what?</p>
<p>YouTube to sevenload <a href="http://en.wikipedia.org/wiki/Bookmarklet">Bookmarklet</a> to the rescue!</p>
<p>Just drag the link below to your bookmark toolbar:</p>
<p><a href="javascript:l=document.location;m='Not a YouTube video!';if(l.host.search(/youtube.com$/)==-1){alert(m);}else{a=l.search.substr(1).split('&amp;');v='';for(var i in a){k=a[i].split('=');if(k[0]=='v'){v=k[1];break;}}}if(v==''){alert(m);}else{window.location='http://de.sevenload.com/item/yt/'+v}">YT2SL</a></p>
<p>If you are watching a video on youtube.com, click the bookmarklet to get redirected to the same video on sevenload.</p>
<div id="attachment_94" class="wp-caption aligncenter" style="width: 293px"><a href="http://daniel.hepper.net/blog/wp-content/yt1.jpg"><img class="size-medium wp-image-94" title="YouTube video" src="http://daniel.hepper.net/blog/wp-content/yt1-283x300.jpg" alt="YouTube video" width="283" height="300" /></a><p class="wp-caption-text">http://www.youtube.com/watch?v=YB1olxLwBWI</p></div>
<p style="text-align: center;">becomes</p>
<div id="attachment_93" class="wp-caption aligncenter" style="width: 293px"><a href="http://daniel.hepper.net/blog/wp-content/sl1.jpg"><img class="size-medium wp-image-93" title="sevenload Video" src="http://daniel.hepper.net/blog/wp-content/sl1-283x300.jpg" alt="http://de.sevenload.com/item/yt/YB1olxLwBWI" width="283" height="300" /></a><p class="wp-caption-text">http://de.sevenload.com/item/yt/YB1olxLwBWI</p></div>
<p>You can also manually create a bookmark with this adress (make sure to remove linebreaks):</p>
<p style="text-align: left;">javascript:l=document.location;m=&#8217;Not a YouTube video!&#8217;;if(l.host.search(/youtube.com$/)==-1){alert(m);}else{a=l.search.substr(1).split(&#8216;&amp;&#8217;);v=&#8221;;for(var i in a){k=a[i].split(&#8216;=&#8217;);if(k[0]==&#8217;v'){v=k[1];break;}}}if(v==&#8221;){alert(m);}else{window.location=&#8217;http://de.sevenload.com/item/yt/&#8217;+v}</p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2009/05/youtube-to-sevenload-bookmarklet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Slides from EuroDjangoCon</title>
		<link>http://daniel.hepper.net/blog/2009/05/slides-from-the-eurodjangocon/</link>
		<comments>http://daniel.hepper.net/blog/2009/05/slides-from-the-eurodjangocon/#comments</comments>
		<pubDate>Tue, 05 May 2009 06:57:58 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[eurodjangocon]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=71</guid>
		<description><![CDATA[These are the slides and code of talks given at the EuroDjangoCon, which is held in Prague from May 4th to May 6th. This information can also be found in the EuroDjangoCon Wiki.
Day 1:

Zed Shaw (@zedshaw): Opening Keynote
James Tauber (@jtauber): Django Patterns [PDF]
Andrew Godwin (@andrewgodwin): Migrations: whywhyhowwho?
Paul Smith (@paulsmith): The web map stack on Django
Justin [...]]]></description>
			<content:encoded><![CDATA[<p>These are the slides and code of talks given at the EuroDjangoCon, which is held in Prague from May 4th to May 6th. This information can also be found in the <a href="http://eurodjangocon.pbworks.com/Presentations">EuroDjangoCon Wiki</a>.</p>
<p><strong>Day 1:</strong></p>
<ul>
<li>Zed Shaw (<a href="http://twitter.com/zedshaw">@zedshaw</a>): <a href="http://zedshaw.com/blog/2009-05-04.html">Opening Keynote</a></li>
<li>James Tauber<span id="msgtxt1707346657" class="msgtxt en"> (<a onclick="pageTracker._trackPageview('/exit/to/jtauber')" href="http://twitter.com/jtauber" target="_blank">@jtauber</a></span>): <a href="http://eldarion.com/talks/2009/05/eurodjangocon_djangopatterns.pdf">Django Patterns [PDF]</a></li>
<li>Andrew Godwin (<a href="http://twitter.com/andrewgodwin">@andrewgodwin)</a>: <a href="http://www.aeracode.org/static/edc09slides.pdf">Migrations: whywhyhowwho?</a></li>
<li>Paul Smith (<a onclick="pageTracker._trackPageview('/exit/to/paulsmith');" href="http://twitter.com/paulsmith" target="_blank">@paulsmith</a>): <a href="http://www.slideshare.net/pauladamsmith/the-web-map-stack-on-django">The web map stack on Django</a></li>
<li>Justin Lilly (<span id="msgtxt1695888991" class="msgtxt en"><a onclick="pageTracker._trackPageview('/exit/to/justinlilly')" href="http://twitter.com/justinlilly" target="_blank">@justinlilly</a>)</span>: <a href="http://justinlilly.com/blog/2009/may/04/eurodjangocon-django-30000-feet/">Django @ 30.000 feet</a></li>
<li>Simon Willison (<span id="msgtxt1705398406" class="msgtxt en"><a onclick="pageTracker._trackPageview('/exit/to/simonw')" href="http://twitter.com/simonw" target="_blank">@simonw</a></span>): <a href="http://www.slideshare.net/simon/django-heresies">Django Heresies</a></li>
</ul>
<p><strong>Day 2:</strong></p>
<ul>
<li>Honza Kral (<a href="http://twitter.com/HonzaKral">@HonzaKral</a>): <a href="http://honzakral.com/validation.pdf ">Model Aware Validation</a></li>
<li>Mike Malone (<span id="msgtxt1705781738" class="msgtxt en"><a onclick="pageTracker._trackPageview('/exit/to/mjmalone')" href="http://twitter.com/mjmalone" target="_blank">@mjmalone</a>)</span>: <a href="http://immike.net/files/scaling_django.pdf">Scaling Django Web Apps [PDF]</a> + <a href="http://github.com/mmalone">Code on Github<br />
</a></li>
<li>Eric Holscher (<span id="msgtxt1707626602" class="msgtxt en"><a onclick="pageTracker._trackPageview('/exit/to/ericholscher')" href="http://twitter.com/ericholscher" target="_blank">@ericholscher</a>)</span>: <a href="http://www.slideshare.net/ericholscher/testing-slides-1387499">Django Testing</a></li>
<li>Peter Baumgartner, Michael Trythall (<a onclick="pageTracker._trackPageview('/exit/to/LincolnLoop');" href="http://twitter.com/LincolnLoop" target="_blank">@LincolnLoop</a>): <a href="http://lincolnloop.com/assets/Customizing_the_Django_Admin-EuroDjangoCon09.pdf">Customizing the Django Admin [PDF]</a></li>
<li>Alex Gaynor (<a onclick="pageTracker._trackPageview('/exit/to/alex_gaynor')" href="http://twitter.com/alex_gaynor" target="_blank">@alex_gaynor</a>): <a href="http://www.slideshare.net/kingkilr/forms-getting-your-moneys-worth">Forms, Getting Your Money&#8217;s Worth</a></li>
<li>Joe Stump (<a href="http://twitter.com/joestump">@joestump</a>) <a href="http://eurodjangocon.pbworks.com/f/Rethinking_the_Stack.key.zip">Rethinking the Stack</a></li>
</ul>
<p><strong>Day 3:</strong></p>
<ul style="text-align: left;">
<li>Franz Wierzbicki (<a href="http://twitter.com/fwierzbicki">@fwierzbicki</a>): <a href="http://www.slideshare.net/fwierzbicki/jython-on-django">Django on Jython</a></li>
<li>David Larlet (<a href="http://twitter.com/davidbgk">@davidbgk</a>): State of the art and future of Semantic stuff in Django (panel)</li>
<li>Leah Culver (<a href="http://twitter.com/leahculver">@leahculver</a>): The Next Big Thing</li>
<li>James Tauber <span id="msgtxt1707346657" class="msgtxt en"> (<a onclick="pageTracker._trackPageview('/exit/to/jtauber')" href="http://twitter.com/jtauber" target="_blank">@jtauber</a></span>): <a href="http://bit.ly/18bumK">State of Pinax</a></li>
<li>Joe Stump (<a href="http://twitter.com/joestump">@joestump</a>): Working with large data sets</li>
<li>Andy Smith (<a href="http://twitter.com/termie">@termie</a>): <a href="http://term.ie/data/MigratingFromLampToAppEngine.pdf">Migrating from LAMP to App Engine</a></li>
</ul>
<p>Other:</p>
<ul>
<li><a href="http://www.flickr.com/photos/dibau_naum_h/tags/eurodjangocon/">Mindmap summaries</a> by <a href="http://twitter.com/dibau_naum_h">@dibau_naum_h</a></li>
<li><a href="http://eurodjangocon.pbworks.com/Lightning-Talks">Lightning talks</a></li>
</ul>
<p>This post will be updated over time. Please leave a comment if you think something is missing.</p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2009/05/slides-from-the-eurodjangocon/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WLAN an der Uni Karlsruhe (DUKATH) mit Ubuntu 8.10</title>
		<link>http://daniel.hepper.net/blog/2008/12/wlan-an-der-uni-karlsruhe-mit-ubuntu/</link>
		<comments>http://daniel.hepper.net/blog/2008/12/wlan-an-der-uni-karlsruhe-mit-ubuntu/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 14:25:55 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[uni]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=56</guid>
		<description><![CDATA[Ubuntu hat inzwischen eine ziemlich gute WLAN-Unterstützung. Lange Zeit konnte DUKATH nur[1] mit einem VPN-Client genutzt werden, inzwischen geht das auch per WPA. Laut Anleitung des Microbit [PDF] soll man ein Skript schreiben um den Zugang zu nutzen. Unter Ubuntu geht es aber auch etwas einfacher:
Auf das Symbol des Netzwerk-Manager-Applet klicken:
Das Netzwerk dukath-??x auswählen.
?? hängt [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu hat inzwischen eine ziemlich gute WLAN-Unterstützung. Lange Zeit konnte DUKATH nur[<a href="#footnote1"><span style="color: #888888;">1</span></a>] mit einem VPN-Client genutzt werden, inzwischen geht das auch per WPA. Laut <a href="http://www.rz.uni-karlsruhe.de/download/files/Flyer_05_1_DUKATH_Wireless.pdf">Anleitung des Microbit [PDF]</a> soll man ein Skript schreiben um den Zugang zu nutzen. Unter Ubuntu geht es aber auch etwas einfacher:</p>
<p>Auf das Symbol des Netzwerk-Manager-Applet klicken:</p>
<p>Das Netzwerk dukath-??x auswählen.</p>
<p>?? hängt vom Standort ab. Beim RZ gibt es eine <a href="http://www.rz.uni-karlsruhe.de/dienste/5692.php">Übersicht über die verwendeten SSIDs</a>.</p>
<div id="attachment_62" class="wp-caption aligncenter" style="width: 432px"><a href="http://daniel.hepper.net/blog/wp-content/wlan_dukath_auswahl.jpg"><img class="size-full wp-image-62" title="wlan_dukath_auswahl" src="http://daniel.hepper.net/blog/wp-content/wlan_dukath_auswahl.jpg" alt="Auswahl DUKATH-Accesspoint" width="422" height="654" /></a><p class="wp-caption-text">Auswahl DUKATH-Accesspoint</p></div>
<p>Im darauf folgenden Dialog die richtigen Werte eintragen:</p>
<div id="attachment_63" class="wp-caption aligncenter" style="width: 510px"><a href="http://daniel.hepper.net/blog/wp-content/wlan_dukath_ubuntu_dialog.jpg"><img class="size-full wp-image-63" title="wlan_dukath_ubuntu_dialog" src="http://daniel.hepper.net/blog/wp-content/wlan_dukath_ubuntu_dialog.jpg" alt="Einstellungen DUKATH" width="500" height="512" /></a><p class="wp-caption-text">Einstellungen DUKATH</p></div>
<p>Bei Zertifikat sollte das <a href="https://www.pki.dfn.de/fileadmin/PKI/zertifikate/deutsche-telekom-root-ca-2.pem">Deutsche Telekom Root CA 2 Zertifikat</a> ausgewählt werden.</p>
<p>Benutzername und Passwort entsprechen denen bei der Verwendung von VPN.</p>
<p>Fertig!</p>
<p><a href="http://daniel.hepper.net/blog/wp-content/wlan_dukath_dhcp.jpg"><img class="aligncenter size-full wp-image-64" title="wlan_dukath_dhcp" src="http://daniel.hepper.net/blog/wp-content/wlan_dukath_dhcp.jpg" alt="" width="292" height="87" /></a></p>
<p><a name="footnote1">[1]</a> Der Zugang über das <a href="https://dukath-www.rz.uni-karlsruhe.de/">DUKATH Web-Interface</a> sollte nur in Notfällen genutzt werden, da die Verbindung nicht verschlüsselt wird und deshalb einfach abgehört werden kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2008/12/wlan-an-der-uni-karlsruhe-mit-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Features are not key to success</title>
		<link>http://daniel.hepper.net/blog/2008/12/features-are-not-key-to-success/</link>
		<comments>http://daniel.hepper.net/blog/2008/12/features-are-not-key-to-success/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 13:16:43 +0000</pubDate>
		<dc:creator>Daniel Hepper</dc:creator>
				<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://daniel.hepper.net/blog/?p=53</guid>
		<description><![CDATA[At least not for social networks. A blog by Robert Basic about new features at blepper, a German Twitter alternative, got me thinking.
What is the main feature of a social network? Connecting people! And to enable connections between people, you have to reach a critical mass of people first.
There is already a million ways to [...]]]></description>
			<content:encoded><![CDATA[<p>At least not for social networks. A blog by <a href="http://www.basicthinking.de/blog/2008/12/10/bleeper-alternative-zu-twitter/trackback/">Robert Basic about new features at blepper, a German Twitter alternative</a>, got me thinking.</p>
<p>What is the main feature of a social network? Connecting people! And to enable connections between people, you have to reach a critical mass of people first.</p>
<p>There is already a million ways to connect to other people. Facebook, Myspace, LinkedIn, Twitter, and German services like StudiVZ, WKW, XING&#8230;</p>
<p>Most of them are not perfect. But just providing a more feature-rich service than an established competitor is a recipe for disaster. <a href="http://pownce.com/">Pownce</a> had to learn this <a href="http://www.techcrunch.com/2008/12/01/pownce-deadpooled-team-moves-to-six-apart/">the hard way.</a> Facebook never really took off in Germany, because StudiVZ took the German market first. My experience is that almost every German you find on Facebook, met people abroad. She didn&#8217;t sign up for the better photo gallery, but for people.</p>
<p>StudiVZ grew big fast and then sucked for a long period of time. Lots of performance and privacy issues. People stayed.</p>
<p>Twitter  grew big fast and then sucked for a long period of time. Lots of performance issues. People stayed.</p>
<p>I simply can&#8217;t think of one example where a new social network overtook an established competitor due to features.</p>
]]></content:encoded>
			<wfw:commentRss>http://daniel.hepper.net/blog/2008/12/features-are-not-key-to-success/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
