<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Nat!&apos;s Web Journal</title>
      <link>http://www.mulle-kybernetik.com/weblog/</link>
      <description></description>
      <language>en</language>
      <copyright>Copyright 2012</copyright>
      <lastBuildDate>Fri, 06 Jan 2012 17:41:37 +0100</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
         <title>Using --eh-frame-header when using -fobjc-exceptions GNU/Linux: good, but not necessarily good enough</title>
         <description><![CDATA[<i>This is on Linux, with the gcc compiler (4.6). Not OS X.</i>
<p>
When you compile code with <tt>-fobjc-exceptions</tt>, you presumably do that to somewhere execute a throw. Lets say, this is my callstack:
<p>
<table border=0 cellspacing=0>
<tr><td><font color="gray"><tt>abort</tt></font></td><td>// glibc</td></tr>
<tr><td><font color="gray"><tt>objc_exception_throw</td></font></td><td>// libobjc</td></tr>
<tr><td><b><tt>-[MyClass methodThrowingAnException]</td></b></td><td>// myclass.so</td></tr>
<tr><td><b><tt>myClassMethodBouncer</td></b></td><td>// myclass.so</td></tr>
<tr><td><font color="red"><tt>function_with_a_callback</td></font></td><td>// thirdparty.so</td></tr>
<tr><td><b><tt>-[MyClass waitingForAnException]</td></b></td><td>// myclass.so</td></tr>
<tr><td><tt>main</td></td><td>// main</td></tr>
</table>
<p>
What has happened ? I compiled all the <b>MyClass</b> code with <tt>-fobjc-exceptions</tt> and even did not forget to link the resulting shared library with <tt>--eh-frame-header</tt>. So all my code and <tt>libobjc.so</tt> has <tt>PT_GNU_EH_FRAME</tt> information, which is necessary for the "modern" C++ like stack unwinding.
<p>
Still not good enough. The third party library code <font color="red"><tt>function_with_a_callback</tt></font>, was not linked with <tt>--eh-frame-header</tt> and the unwinding stops right there. No catch handler can be found and <tt>objc_exception_throw</tt> treats this as an uncaught exception.
<p>

An example for the rule, that with every increase of complexity, there is also an increase in brittleness.
]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2012/01/using_--eh-frame-header_when_u.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2012/01/using_--eh-frame-header_when_u.html</guid>
        
        
         <pubDate>Fri, 06 Jan 2012 17:41:37 +0100</pubDate>
      </item>
      
      <item>
         <title>Measuring context switches :: a small expedition. Part IV</title>
         <description><![CDATA[The results are all similiar for the other CPUs/Cores except for CPU0, where it's deterministically different each time:

<pre>(27 -&gt; 540) 0.002849s

18859 : 0
19009 : 0
19197 : 0
19306 : 0
19438 : 0
19444 : 0
19444 : 0
19600 : 0
19650 : 0
19765 : 0
19874 : 0
19903 : 0
19912 : 0
19941 : 0
19965 : 0
20441 : 0
20547 : 0
20617 : 0
20629 : 0
20880 : 0
21409 : 0
21862 : 0
23376 : 0
</pre>

First thing to notice, the program only runs for 0.0028s. That means the frequency of context switches is much higher on CPU 0. 100 times higher in this case. The duration of each context switch is also longer, lets say the average is 20000 cycles making that about 7 times longer.]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s_3.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s_3.html</guid>
        
        
         <pubDate>Fri, 02 Dec 2011 01:33:09 +0100</pubDate>
      </item>
      
      <item>
         <title>Measuring context switches :: a small expedition. Part III</title>
         <description><![CDATA[Lets see some results:

<pre>(24 -&gt; 480) 0.229874s

3356 : 18
3365 : 18
3376 : 18
3382 : 18
3388 : 18
3397 : 18
3403 : 18
3409 : 18
3412 : 18
3412 : 18
3415 : 18
3421 : 18
3429 : 18
3429 : 18
3432 : 18
3456 : 18
3479 : 18
3585 : 18
3647 : 18
3691 : 18
4471 : 18
4756 : 18
8265 : 18
</pre>

The program took about 0.23s to run, in that time it received 23 context switches. That means a context switch happened every 0.1s i.e. 10Hz. Thats not suprisingly the documented preemption time slice for Mac OS X.
<p>
A context switch on CPU 18 took on average about 3.400 cycles. One may assume at these times, that the CPU is otherwise idle.
<p>
10 times 3.400 cycles is the approximate number of cycles lost per second: 34.000 cycles. Since my CPU is running at about 3.4GHz with Turboboost, that means - in relation to 3.400.000.000 cycles - context switching lost me about 0.001 % performance.
<p>
Thinking about this opens up some interesting questions, but lets gather another CPUs results to get some more data... Next time.]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s_2.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s_2.html</guid>
        
        
         <pubDate>Thu, 01 Dec 2011 23:06:25 +0100</pubDate>
      </item>
      
      <item>
         <title>Measuring context switches :: a small expedition. Part II</title>
         <description><![CDATA[Here is the main routine, that is used for testing. Can't really say more than what's in the comments. The program will wait until a number (currently 23) context switches have hit it. It then prints out the number of seconds elapsed and a list with the durations of said context switches.

<pre>#include &lt;assert.h&gt;
#include &lt;limits.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/time.h&gt;
#include &lt;time.h&gt;


extern unsigned long long   _rdtsc();
extern unsigned int         _apicID();


typedef struct
{
   unsigned int   gap;
   unsigned int   apicID;
} context_switch_record;


static int   compare_context_switch_record( context_switch_record *a, 
                                            context_switch_record *b)
{
   return( (int) a-&gt;gap - (int) b-&gt;gap);
}


int   main( int argc, char *argv[]) 
{
   context_switch_record   infos[ 23];
   unsigned long long  a, b;
   unsigned long long  normal;
   unsigned long long  diff;
   unsigned int        i;
   struct timeval      start;
   struct timeval      stop;
   struct timeval      elapsed;
   
   gettimeofday( &amp;start, NULL);

   //
   // establish a "gap" between two rdtsc() calls, that 
   // should be considered as normal (no interrupt)
   //
   a      = _rdtsc();
   b      = _rdtsc();
   normal = (b - a) * 20;
   printf( "(%qd -&gt; %qd) ", b - a, normal);
   
   for( i = 0; i &lt; sizeof( infos) / sizeof( context_switch_record); i++)
   {
      b  = _rdtsc();
      for(;;)
      {
         a    = b;
         b    = _rdtsc();
         diff = b - a;

	 //
	 // if the delay between a and b is to large
	 // then record it
	 //
         if( diff &gt; normal)
            break;
      }
      assert( diff &lt;= INT_MAX);
      
      // 
      // record cycles spent and current cpuID
      // 
      infos[ i].gap    = diff;
      infos[ i].apicID = _apicID();
   }
   
   gettimeofday( &amp;stop, NULL);

   //
   // compute time spent waiting for n context switches
   //   
   elapsed.tv_sec  = stop.tv_sec - start.tv_sec;
   elapsed.tv_usec = stop.tv_usec - start.tv_usec;
   if( stop.tv_usec &lt; start.tv_usec)
   {
      elapsed.tv_sec -= 1;
      elapsed.tv_usec = 1000000L - start.tv_usec + stop.tv_usec;
   }
   printf( "%d.%06lds\n\n", (int) elapsed.tv_sec, (long) elapsed.tv_usec);
   
   //
   // output data and done
   //   
   qsort( &amp;infos, sizeof( infos) / sizeof( context_switch_record), 
          sizeof( context_switch_record), 
          (void *) compare_context_switch_record);
   
   for( i = 0; i &lt; sizeof( infos) / sizeof( context_switch_record); i++)
      printf( "%u : %u\n", infos[ i].gap, infos[ i].apicID);

   return( 0);
}
</pre>

Here is the <a href="/weblog/files/mulle-ctxt-switches.tgz">Xcode Project</a>.]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s_1.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s_1.html</guid>
        
        
         <pubDate>Thu, 01 Dec 2011 01:44:20 +0100</pubDate>
      </item>
      
      <item>
         <title>Measuring context switches :: a small expedition. Part I</title>
         <description><![CDATA[First up some assembler code. It just works for i386 currently. The first routine gives me the core number the code is currently executing under (see <a href="http://www.intel.com/content/www/us/en/processors/processor-identification-cpuid-instruction-note.html">Intel Application Note 485</a> for more details)

<pre>   .text
   .globl __apicID
__apicID:
   push     %ebx

   movl     $0x1,%eax
   cpuid

   mov      %ebx, %eax
   shr      $24,%eax

   popl     %ebx
   
   ret
</pre>

and the second function  returns the number of cycles elapsed since power on

<pre>	.text
.globl __rdtsc
__rdtsc:
	rdtsc
	ret
</pre>

I haven't coded i386 assembler much, it probably shows :)
]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/12/measuring_context_switches_a_s.html</guid>
        
        
         <pubDate>Thu, 01 Dec 2011 01:30:07 +0100</pubDate>
      </item>
      
      <item>
         <title>Small shell script to generate passwords</title>
         <description><![CDATA[<pre>
#! /bin/sh
#
# Coded 2011 by Nat! - Mulle kybernetiK
#
# Public Domain
#
# Creates a password with pwgen 
#
#    http://sourceforge.net/projects/pwgen
#
# Advantages of passwords generated with this
# code:
# 
# 1) are "green" in Mac OS X password security 
#    check
# 2) do not contain characters that can be 
#    easily confused with one another in 
#    non-serif fonts
# 3) do not contain z and y or any special 
#    characters, so german or english keyboard 
#    doesn't make a difference
# 
OPTS="-s -B -c -n"

LENGTH=${1:-24}
shift

USER_OPTS="$*"
if [ "$USER_OPTS" != "" ]
then
   OPTS="$USER_OPTS"
fi

pw=""

while [ "$pw" = "" ]
do
    candidate=`pwgen $OPTS -1 $LENGTH 1`
    pw=`echo "$candidate" | grep -v '[zZyY0OlI1]'`
done

echo "$pw"
</pre>]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/11/small_shell_script_to_generate.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/11/small_shell_script_to_generate.html</guid>
        
        
         <pubDate>Fri, 11 Nov 2011 12:36:39 +0100</pubDate>
      </item>
      
      <item>
         <title>UnitKit fixes updated on bitbucket.org</title>
         <description><![CDATA[I updated my <a href="http://bitbucket.org">bitbucket.org</a> project <a href="https://bitbucket.org/mulle_nat/unitkit-fixes">unitkit-fixes</a> so that UnitKit works more nicely with the current Xcode. And for me the current Xcode is 3 :)
<p>
It's one of a few experimental projects I put on <a href="http://bitbucket.org">bitbucket.org</a>. Eventually I will probably migrate it back to Mulle kybernetiK, because the added "social" doesn't really do anything for me.

]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/11/unitkit_fixes_updated_on_bitbu.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/11/unitkit_fixes_updated_on_bitbu.html</guid>
        
        
         <pubDate>Thu, 10 Nov 2011 14:53:35 +0100</pubDate>
      </item>
      
      <item>
         <title>Reminder for myself: X11 on OS X uses port 6001 (Display :1)</title>
         <description><![CDATA[So to start an <b>xterm</b> with an IP address I need to say:

<pre>xhost +
xterm -display 127.0.0.1:1 # or some other IP address
</pre>
]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/11/reminder_for_myself_x11_on_os.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/11/reminder_for_myself_x11_on_os.html</guid>
        
        
         <pubDate>Sun, 06 Nov 2011 20:08:51 +0100</pubDate>
      </item>
      
      <item>
         <title>How to build libobjc for OS X 10.6.8</title>
         <description><![CDATA[<b>This builds and links and work for me, but it hasn't been tested much so I don't make any guarantees.</b>

<p>

<H3>Preparation</H3>
<hr align="left" width="200" size=2>
Create a directory where to store all the stuff. I chose <tt>/usr/local/src/darwin-10.6.8</tt>.
<p>
<table bgcolor="#F0F0F0" border=0 cellspacing=0 cellpadding=0 width=400>
<tr bgcolor="#101010"><td><font color="white">prepare</font></td></tr>
<tr><td>
<tt><font size=2>sudo mkdir -p /usr/local/src/darwin-10.6.8<br>
sudo chmod 777 /usr/local/src/darwin-10.6.8<br>
</font></tt><br>
</font></tt><br>
</td></tr></table>

<h3>Download and Unpack</h3>
<hr align="left" width="200" size=2>
Download the following packages:
<p>
<ul>
<li><a href="http://www.opensource.apple.com/source/Libc/Libc-594.9.5/">Libc-594.9.5.z</a>
<li><a href="http://www.opensource.apple.com/source/dyld/dyld-132.13/">dyld-132.13</a>
<li><a href="http://www.opensource.apple.com/source/libauto/libauto-141.2/">libauto-141.2</a>
<li><a href="http://www.opensource.apple.com/source/libclosure/libclosure-38/">libclosure-38</a>
<li><a href="http://www.opensource.apple.com/source/libdispatch/libdispatch-84.5.5/">libdispatch-84.5.5</a>
<li><a href="http://www.opensource.apple.com/source/objc4/objc4-437.3/">objc4-437.3.</a>
<li><a href="http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/">xnu-1504.15.3</a>
</ul>

<table bgcolor="#F0F0F0" border=0 cellspacing=0 cellpadding=0 width=400>
<tr bgcolor="#101010"><td><font color="white">download</font></td></tr>
<tr><td>
<tt><font size=2>cd /usr/local/src/darwin-10.6.8/<br>
curl -O http://www.opensource.apple.com/tarballs/Libc/Libc-594.9.5.tar.gz<br>
curl -O http://www.opensource.apple.com/tarballs/dyld/dyld-132.13.tar.gz<br>
curl -O http://www.opensource.apple.com/tarballs/libauto/libauto-141.2.tar.gz<br>
curl -O http://www.opensource.apple.com/tarballs/libclosure/libclosure-38.tar.gz<br>
curl -O http://www.opensource.apple.com/tarballs/libdispatch/libdispatch-84.5.5.tar.gz<br>
curl -O http://www.opensource.apple.com/tarballs/objc4/objc4-437.3.tar.gz<br>
curl -O http://www.opensource.apple.com/tarballs/xnu/xnu-1504.15.3.tar.gz<br>
<p>
tar xfz Libc-594.9.5.tar.gz<br>
tar xfz dyld-132.13.tar.gz <br>
tar xfz libauto-141.2.tar.gz<br> 
tar xfz libclosure-38.tar.gz <br>
tar xfz libdispatch-84.5.5.tar.gz<br> 
tar xfz objc4-437.3.tar.gz <br>
</font></tt><br>
</td></tr></table>

<p>
You can also manually download stuff from <a href="http://www.opensource.apple.com/release/mac-os-x-1068/">http://www.opensource.apple.com/release/mac-os-x-1068/</a>.


<h3>Installation of Headers</h3>
<hr align="left" width="200" size=2>

Copy the needed headere into <tt>/usr/local/include/darwin-10.6.8</tt>. The versioning of the destination directory is important, otherwise you might get some strange bugs later on in life.
<p>
<table bgcolor="#F0F0F0" border=0 cellspacing=0 cellpadding=0 width=400>
<tr bgcolor="#101010"><td><font color="white">install</font></td></tr>
<tr><td>

<tt><font size=2>sudo mkdir -p /usr/local/include/darwin-10.6.8<br>
sudo chmod 777 /usr/local/include/darwin-10.6.8<br>
cd /usr/local/include/darwin-10.6.8<br>
mkdir libkern<br>
mkdir System<br>
mkdir System/i386<br>
mkdir System/ppc<br>
mkdir System/machine<br>
mkdir mach-o<br>
<br>
cd /usr/local/src/darwin-10.6.8<br>
<br>
# find . -name "OSCrossEndian.h"<br>
# find . -name "pthread_machdep.h"<br>
# find . -name "dyld_priv.h"<br>
# find . -name "cpu_capabilities.h"<br>
# find . -name Block_private.h <br>
# find . -name auto_zone.h<br>
<br>
cp ./xnu-1504.15.3/libkern/libkern/OSCrossEndian.h /usr/local/include/darwin-10.6.8/libkern/<br>
cp ./Libc-594.9.5/pthreads/pthread_machdep.h /usr/local/include/darwin-10.6.8/System/<br>
cp ./dyld-132.13/include/mach-o/dyld_priv.h /usr/local/include/darwin-10.6.8/mach-o/<br>
cp ./xnu-1504.15.3/osfmk/i386/cpu_capabilities.h /usr/local/include/darwin-10.6.8/System/i386/<br>
cp ./xnu-1504.15.3/osfmk/ppc/cpu_capabilities.h /usr/local/include/darwin-10.6.8/System/ppc/<br>
cp ./xnu-1504.15.3/osfmk/machine/cpu_capabilities.h /usr/local/include/darwin-10.6.8/System/machine/<br>
cp ./libclosure-38/Block_private.h /usr/local/include/darwin-10.6.8/<br>
cp ./libauto-141.2/auto_zone.h /usr/local/include/darwin-10.6.8/<br>
</font></tt><br>
</td></tr></table>


<H3>Change the Xcode Project of objc</H3>
<hr align="left" width="200" size=2>
<tt><font size=2>open objc4-437.3/*.xcodeproj
</font></tt>
<p>
Open the project settings in Xcode and set:
<ul>
<li><tt>HEADER_SEARCH_PATHS=/usr/local/include/darwin-10.6.8 $(inherited)</tt> for all Configurations
<li><tt>GCC_PREPROCESSOR_DEFINITIONS=$(inherited) PRIVATE</tt> for Debug and
<li><tt>GCC_PREPROCESSOR_DEFINITIONS=$(inherited) NDEBUG PRIVATE</tt> for Release
</ul>
But this isn't good enough yet. Fix the <b>objc</b> target settings by prefixing 
<tt>$(inherited)</tt> to 
<tt>HEADER_SEARCH_PATHS</tt> thusly
<ul>
<li><tt>HEADER_SEARCH_PATHS = $(inherited) $(DSTROOT)/usr/include/** $(DSTROOT)/usr/local/include/** $(CONFIGURATION_BUILD_DIR)/usr/include/** $<(CONFIGURATION_BUILD_DIR)/usr/local/include/**</tt>
</ul>

Then you should go into the <b>objc</b> target's <b>Compile sources</b> settings and move the file <tt>objc-probes.d</tt> to the top, so that it gets compiled first.
<p>
And now it should build and link without errors.
<p>
Go ahead and trash your system with the debug linked version :) 


]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/10/how_to_build_libobjc_for_os_x.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/10/how_to_build_libobjc_for_os_x.html</guid>
        
        
         <pubDate>Sat, 15 Oct 2011 13:50:33 +0100</pubDate>
      </item>
      
      <item>
         <title>Cosmic Ray destroys my work</title>
         <description><![CDATA[This is my shell history

<pre>  484  gnutar cfz MyProject.tgz MyProject
  ....
  493  rm -rf MyProject
  494  gnutar xfz MyProject.tgz 
  495  cd MyProject
  496  open MyProject.xcodeproj
  497  cd ..
</pre>

then I typed
<pre>
$ rm -rf MyProject ; !gn
</pre>

which expanded to

<pre>
rm -rf MyProject ; gnutar <b>c</b>fz MyProject.tgz MyProject
</pre>

no kidding! 

<pre>
$ gnutar xfz MyProject.tgz MyProject
gnutar: MyProject: Not found in archive
gnutar: Error exit delayed from previous errors
</pre>

What do you think ? A cosmic ray, a bug in bash or a faulty RAM ? I went with faulty RAM and installed the 12 GB I had lying around here and I always forgot to install. Lazyness is not always a virtue....
]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/10/cosmic_ray_destroys_my_work.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/10/cosmic_ray_destroys_my_work.html</guid>
        
        
         <pubDate>Mon, 10 Oct 2011 01:55:00 +0100</pubDate>
      </item>
      
      <item>
         <title>A map for Ruins (a computer game)</title>
         <description><![CDATA[For some reason (a pretty screenshot) I tried out a game called <a href="http://cardboardcomputer.com/games/ruins/">Ruins</a> from <a href="http://cardboardcomputer.com">Cardboard Computer</a>.<p>
In a way it's a little old fashioned text adventure with 3D graphics. But because you do not get any points, you don't know when you have exhausted the game or not.
<p>
Here is a little <a href="/weblog/files/ruins-map.pdf">map</a> that helps. It's not very pretty. Be aware that in the beginning and during parts of the game, you have the choice of two rabbits and so you can actually walk two paths in parallel for a while.
]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/09/a_map_for_ruins_a_computer_gam.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/09/a_map_for_ruins_a_computer_gam.html</guid>
        
        
         <pubDate>Tue, 27 Sep 2011 22:13:21 +0100</pubDate>
      </item>
      
      <item>
         <title>gcc selector warning, annoying and wrong</title>
         <description><![CDATA[Run this convenient shell script:
<table bgcolor="#F0F0F0" border=0 cellspacing=0 cellpadding=0 width=400>
<tr bgcolor="#101010"><td><font color="white">script.sh</font></td></tr>
<tr><td>
<pre>#!/bin/sh 
#
# Mulle kybernetiK 2011, coded by Nat!

cat &lt;&lt;EOF &gt; /tmp/x.m  

@interface X 
{
}

+ (void *) z;

@end


@interface Y : X
{
}

+ (void *) y;

@end


@implementation Y

+ (void *) y
{
   return( [self z]);
}

@end
EOF

gcc -Wselector -c /tmp/x.m 
</pre></td></tr></table>
<p>
it will produce the following output:
<pre>x.m:25: warning: creating selector for nonexistent method 'z'
</pre>
But why ? This looks like an obvious bug in gcc. First of all this warning shouldn't be emitted by <tt>-Wselector</tt> but by <tt>-Wundeclared-selector</tt> instead. And then of course the warning is wrong :(

]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/09/gcc_selector_warning_annoying.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/09/gcc_selector_warning_annoying.html</guid>
        
        
         <pubDate>Mon, 19 Sep 2011 21:05:50 +0100</pubDate>
      </item>
      
      <item>
         <title>The idiocy of technology and me</title>
         <description><![CDATA[I managed to run out of my office leaving the keys behind. That was
pretty stupid. But I did have my mobile phone with me, which was
good, except that it has no power left which is bad. But I did
bring my USB charger cable from home in my jacket pocket, which 
is good. Alas I have nothing to charge it with, which is bad.
<p>
By officemate has another set of keys, which is good, but he isn't
in the office that is bad. I have his number in the phone, which is
also good, but its not helping me any further, as its out of power.
<p>
I go to an internet cafe, where they have a computer with USB and
internet, which is good. I can download putty (SSH), though forbidden 
by the cafe rules, from there and run it, which is good. From there
I could access the server and get the phone number. But now comes 
the technology idiocy. Can I use it ?
<p>
A machine in an internet cafe is certainly compromised with a key
logger, so whatever account I access, is gonna get cracked. A
solution would be to change the password later from a
safe terminal, but that leaves a window of compromisabilty.
<p>
I figure out, that using <a href="http://www.hushmail.com">hushmail</a>
is probably the best bet to send out an email for help. (I used to
use googlemail for that, before they became all nosey and evil). So 
I create a new email account, but email isn't quite as often checked 
by my office-mate. SMS would be better.
<p>
I could use a free SMS service, but that probably puts him on a
SPAM list and I don't have the number (yet) anyway. Seems the best
option is to wait it out, while my mobile phone is SLOWLY charging.
The problem is, that while its in its low power status, it won't
turn on at all.
<p>
Two hours later of idle documentation reading, my office mate and dog
appear in the internet cafe with my keys from the office. I pay 2 € for 
internet access fees, for two hours. Which kind of makes me wonder 
how a business like that survives. It's even cheaper than in 3rd world 
countries.
<p>
<i>Later: another solution could have been to buy/rent/lend another phone and switch SIM cards. But I figured the internet cafe thing would be easier and quicker.
<p>
]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/08/the_idiocy_of_technology_and_m.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/08/the_idiocy_of_technology_and_m.html</guid>
        
        
         <pubDate>Mon, 15 Aug 2011 14:54:53 +0100</pubDate>
      </item>
      
      <item>
         <title>Lion : Ohne Worte</title>
         <description><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="http://www.mulle-kybernetik.com/weblog//ohne-worte-lion.png" alt="Ohne worte lion" title="ohne-worte-lion.png" border="0" width="600" height="388" />]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/07/lion_ohne_worte.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/07/lion_ohne_worte.html</guid>
        
        
         <pubDate>Tue, 26 Jul 2011 22:15:51 +0100</pubDate>
      </item>
      
      <item>
         <title>TextEdit and Lion File Versioning</title>
         <description><![CDATA[One of the most anticipated Lion feature for me is the <a href="http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars/7">automatic versioning of documents in Lion</a>. Eventually it's gonna be great (I hope) but currently it has this half-baked feel to it.
<p>
<ol>
<li>I have some of my projects in my <strong>VMware Lion</strong> mounted as a shared folder. For some reason, <strong>Xcode</strong> had the worst time getting these to open. So it is seemingly stuck forever opening these projects, so I have to "kill" Xcode.
<p>
When I restart Xcode, it tries to read these projects again, being stuck again... There is no way to break this vicious circle. What is needed is an option to launch with clearing the applications memory.
<p>
This helplessness is an amazing feeling I haven't had on OS X since quite a few years actually.
<li>I use <strong>TextEdit</strong> to write shell scripts. I often refine them in the shell with vi for small changes, but for larger edits I use TextEdit, which has the file still open.
<p>
This gave me a slew of errors:

<tt><font size=1>Jul 22 01:25:30 Lion TextEdit[770]: open on /Users/test/Desktop/patcher.sh: Operation not permitted
Jul 22 01:25:30 Lion [0x0-0x53053].com.apple.TextEdit[770]: [ERROR] genstore_storage.c:_CopyfileAddWithArchiveAndSizingCallback:665  copyfile callback got an error what=1 stage=3 src=/Users/test/Desktop/patcher.sh dst=/Users/test/Library/Containers/com.apple.TextEdit/Data/Library/Autosave Information/66455544-1790-463C-BDD9-0E408B2A2E83.genstore.noindex/.genstore_staging/5RyonsL/staged, errno 1 (Operation not permitted)
Jul 22 01:25:30 Lion [0x0-0x53053].com.apple.TextEdit[770]: [ERROR] genstore_storage.c:GSAddPathAsGeneration:980  copyfile "/Users/test/Desktop/patcher.sh" to "/Users/test/Library/Containers/com.apple.TextEdit/Data/Library/Autosave Information/66455544-1790-463C-BDD9-0E408B2A2E83.genstore.noindex/.genstore_staging/5RyonsL/staged" failed with error 1 (Operation not permitted)
Jul 22 01:25:30 Lion TextEdit[770]: NSFileVersion tried to tried to add a new generation and failed. Versioned file URL: file://localhost/Users/test/Desktop/patcher.sh, contents URL: file://localhost/Users/test/Desktop/patcher.sh, error: Error Domain=GSLibraryErrorDomain Code=1 "Der Vorgang konnte nicht abgeschlossen werden. (GSLibraryErrorDomain-Fehler 1.)" UserInfo=0x7f8038624e30 {}
Jul 22 01:25:30 Lion TextEdit[770]: NSDocument failed to preserve the old version of a document. Here's the error:
        Error Domain=GSLibraryErrorDomain Code=1 "Der Vorgang konnte nicht abgeschlossen werden. (GSLibraryErrorDomain-Fehler 1.)" UserInfo=0x7f8038624e30 {}
</font></tt>

<p>Also in TextEdit there is no "Save as" or "Save to" option anymore... In the words of John McEnroe: "<a href="http://www.youtube.com/watch?v=ekQ_Ja02gTY">You can not be serious</a>". This right there makes TextEdit now <em>unusable</em> to me.
]]></description>
         <link>http://www.mulle-kybernetik.com/weblog/2011/07/textedit_and_lion_file_version.html</link>
         <guid>http://www.mulle-kybernetik.com/weblog/2011/07/textedit_and_lion_file_version.html</guid>
        
        
         <pubDate>Fri, 22 Jul 2011 12:37:34 +0100</pubDate>
      </item>
      
   </channel>
</rss>

