<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>amazing development &#187; Work</title>
	<atom:link href="http://amazing-development.com/archives/category/all/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://amazing-development.com</link>
	<description>ruby, java and the rest</description>
	<lastBuildDate>Wed, 07 Mar 2012 19:34:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How to set up your own dyndns server (simple!)</title>
		<link>http://amazing-development.com/archives/2012/02/13/how-to-set-up-your-own-dyndns-server-simple/</link>
		<comments>http://amazing-development.com/archives/2012/02/13/how-to-set-up-your-own-dyndns-server-simple/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 21:03:25 +0000</pubDate>
		<dc:creator>schlumpf</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[PHP]]></category>

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

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://amazing-development.com/?p=495</guid>
		<description><![CDATA[For the last 3 years I was working in an area called Engineering Productivity at Google. This group builds internal tools for other engineers but sadly there is very little I can talk about, except for the obvious facts: it&#8217;s challenging, fun and at a scale I hadn&#8217;t seen before. Well, a few weeks ago [...]]]></description>
			<content:encoded><![CDATA[<p>For the last 3 years I was working in an area called Engineering Productivity at Google. This group builds internal tools for other engineers but sadly there is very little I can talk about, except for the obvious facts: it&#8217;s challenging, fun and at a scale I hadn&#8217;t seen before.</p>
<p>Well, a few weeks ago I switched projects and focus areas. Now for the first time in my career<a href="#1">[1]</a> at Google I work on a customer facing product: the <a href="http://google.com/dashboard">Google Privacy dashboard</a>. Obviously I can&#8217;t write about upcoming launches, but I can assure you that there are many cool new features in the making.</p>
<p><a name="1">[1]</a> This is not 100% true. A little over two years ago I did some 20% work on the dashboard, so there is already a tiny little bit of code online that yours truly wrote. In case you are curious, it&#8217;s the logic that makes sure you get to see the privacy statement for your country, e.g. <a href="http://www.google.com/chrome/intl/en/privacy.html">http://www.google.com/chrome/intl/en/privacy.html</a> or <a href="http://www.blogger.com/privacy?hl=en">http://www.blogger.com/privacy?hl=en</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2011/04/13/new-project-at-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Customize Chrome Omnibar</title>
		<link>http://amazing-development.com/archives/2010/05/20/customize-chrome-omnibar/</link>
		<comments>http://amazing-development.com/archives/2010/05/20/customize-chrome-omnibar/#comments</comments>
		<pubDate>Thu, 20 May 2010 06:31:13 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=453</guid>
		<description><![CDATA[I love Chrome! But one thing drove me crazy: we have numerous internal web-apps running on different hosts. From Firefox was easy to get to these tools by just typing the toolname (not the FQDN) in the url bar. Chrome knows it better and assumes that I want to search for toolname. A moment later [...]]]></description>
			<content:encoded><![CDATA[<p>I love Chrome! But one thing drove me crazy: we have numerous internal web-apps running on different hosts. From Firefox was easy to get to these tools by just typing the toolname (not the <a href="http://en.wikipedia.org/wiki/Fully_qualified_domain_name">FQDN</a>) in the url bar. Chrome knows it better and assumes that I want to search for toolname. A moment later it asked me if I meant toolname/ and remebers this choice (at least it annoys me only once per tool).</p>
<p>Yesterday I I got an idea and tryed a snippet of javascript as a search engine and was happy to see that it worked as intended. A few minutes of javascript hacking later the omnibar behaved the way I like it:</p>
<ul>
<li>multiple words are a search query</li>
<li>single words are URLs, even without the trailing slash, always!</li>
<li>fix broken http at the start of an URL (happens to me sometimes when I cut&#8217;n'paste)</li>
</ul>
<p>This is the current version of my default search engine, feel free to criticize, I&#8217;m a JS noob:<br />
<code>javascript:query="%s"; if (query.search(/\\s/) != -1) { window.location="http://www.google.com/search?q=" + query; } else { query = query.replace(/^h?t?t?p?:\/\//, ""); window.location="http://"+query; } </code></p>
<p>Enjoy and let me know if you have other ideas on how to improve this!</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2010/05/20/customize-chrome-omnibar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Buzz&#8230;</title>
		<link>http://amazing-development.com/archives/2010/02/10/buzz/</link>
		<comments>http://amazing-development.com/archives/2010/02/10/buzz/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 14:35:16 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=439</guid>
		<description><![CDATA[This is mainly a test to see how adding this blog to my Buzz account works. Additionally I want to say how thrilled I am to finally buzz with people outside work]]></description>
			<content:encoded><![CDATA[<p>This is mainly a test to see how adding this blog to my Buzz account works. Additionally I want to say how thrilled I am to finally buzz with people outside work <img src='http://amazing-development.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2010/02/10/buzz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JRuby on appengine with Ubuntu</title>
		<link>http://amazing-development.com/archives/2010/01/06/jruby-on-appengine-with-ubuntu/</link>
		<comments>http://amazing-development.com/archives/2010/01/06/jruby-on-appengine-with-ubuntu/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 11:09:20 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[appengine]]></category>
		<category><![CDATA[JRuby]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=426</guid>
		<description><![CDATA[Overall the instructions on code.google.com are really good, so this is just a dump to remind me of the Ubuntu specific stuff I did on a pristine Ubuntu installation&#8230; sudo apt-get install sun-java6-jdk sudo apt-get install ruby-full rubygems This installs only rubygems 1.3.1 but appengine needs 1.3.5. ERROR: Error installing google-appengine: bundler requires RubyGems version [...]]]></description>
			<content:encoded><![CDATA[<p>Overall the instructions on <a href="http://code.google.com/p/appengine-jruby/wiki/Introduction">code.google.com</a> are really good, so this is just a dump to remind me of the Ubuntu specific stuff I did on a pristine Ubuntu installation&#8230;</p>
<p><code><br />
sudo apt-get install sun-java6-jdk<br />
sudo apt-get install ruby-full rubygems<br />
</code></p>
<p>This installs only rubygems 1.3.1 but appengine needs 1.3.5.</p>
<blockquote><p>
ERROR:  Error installing google-appengine:<br />
	bundler requires RubyGems version >= 1.3.5
</p></blockquote>
<p><code><br />
sudo gem install rubygems-update<br />
sudo /var/lib/gems/1.8/bin/update_rubygems<br />
sudo gem install google-appengine<br />
</code></p>
<p>Et voilà! Ten minutes later I have a running hello world in the cloud <img src='http://amazing-development.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2010/01/06/jruby-on-appengine-with-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pgrep or pkill sometimes do not find process</title>
		<link>http://amazing-development.com/archives/2009/10/15/pgrep-or-pkill-do-not-find-process/</link>
		<comments>http://amazing-development.com/archives/2009/10/15/pgrep-or-pkill-do-not-find-process/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 10:07:33 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Work]]></category>

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

		<guid isPermaLink="false">http://amazing-development.com/?p=396</guid>
		<description><![CDATA[Quite some time has passed since the last time I wrote something on this blog, mostly because I did little non-work related worth mentioning. But last week I helped Damon to finally support JRuby on his Android Scripting Environment (ASE). Downloaded JRuby sources (jruby&#45;1.2.0RC1) from http&#58;//www.jruby.org/download. Patched the build.xml to not include doc/index.html from dynalang.jar [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://static.amazing-development.com/blog_images/09/ASE.jpg"/><a href="http://www.flickr.com/photos/dino_olivieri/391541320/"><img class="alignright" src="http://static.amazing-development.com/blog_images/09/robot_red_planet.jpg"/></a>Quite some time has passed since the last time I wrote something on this blog, mostly because I did little non-work related worth mentioning.</p>
<p />
But last week I helped <a href="http://damonkohler.com/">Damon</a> to finally support JRuby on his <a href="http://code.google.com/p/android-scripting/">Android Scripting Environment (ASE)</a>. </p>
<ul>
<li>Downloaded JRuby sources (jruby&#45;1.2.0RC1) from <a href="http://www.jruby.org/download">http&#58;//www.jruby.org/download</a>.</li>
<li>Patched the <tt>build.xml</tt> to not include <tt>doc/index.html</tt> from <tt>dynalang.jar</tt> otherwise dx will complain about an HTML page in the ruby&#45;complete.jar.<br />
<br clear="all"/></p>
<pre>$ diff &#45;r jruby&#45;1.2.0RC1 jruby&#45;1.2.0RC1.patched/
Only in jruby&#45;1.2.0RC1.patched/&#58; build
diff &#45;r jruby&#45;1.2.0RC1/build.xml jruby&#45;1.2.0RC1.patched/build.xml
42c42
&lt;
&#45;&#45;&#45;
&gt;
238c238,240
&lt;         &lt;zipfileset src=&quot;${build.lib.dir}/dynalang&#45;0.3.jar&quot;/&gt;
&#45;&#45;&#45;
&gt;         &lt;zipfileset src=&quot;${build.lib.dir}/dynalang&#45;0.3.jar&quot;&gt;
&gt;           &lt;exclude name=&quot;**/doc/index.html&quot;/&gt;
&gt;         &lt;/zipfileset&gt;
268c270,272
&lt;         &lt;zipfileset src=&quot;${build.lib.dir}/dynalang&#45;0.3.jar&quot;/&gt;
&#45;&#45;&#45;
&gt;         &lt;zipfileset src=&quot;${build.lib.dir}/dynalang&#45;0.3.jar&quot;&gt;
&gt;           &lt;exclude name=&quot;**/doc/index.html&quot;/&gt;
&gt;         &lt;/zipfileset&gt;
387c391,393
&lt;         &lt;zipfileset src=&quot;${build.lib.dir}/dynalang&#45;0.3.jar&quot;/&gt;
&#45;&#45;&#45;
&gt;         &lt;zipfileset src=&quot;${build.lib.dir}/dynalang&#45;0.3.jar&quot;&gt;
&gt;           &lt;exclude name=&quot;**/doc/index.html&quot;/&gt;
&gt;         &lt;/zipfileset&gt;</pre>
</li>
<li>Downloaded the JSON sources from <a href="http://rubyforge.org/frs/?group_id=953 and put them in lib/ruby/1.8/json/">http&#58;//rubyforge.org/frs/?group_id=953 and put them in <tt>lib/ruby/1.8/json/</tt></a></li>
<li>Copied <a href="http://code.google.com/p/android-scripting/source/browse/trunk/jruby/ase/android.rb">android.rb</a> to <tt>lib/ruby/1.8/</tt>.</li>
<li>Built jar&#45;complete (<tt>ant jar-complete</tt>) and added <tt>jruby&#45;complete.jar</tt> to eclipse project.</li>
<li>Connected the bits and pieces in <a href="http://code.google.com/p/android-scripting/source/browse/#svn/trunk/android/AndroidScriptingEnvironment/src/com/google/ase/interpreter/jruby"><tt>com.google.ase.interpreter.jruby</tt></a></li>
</ul>
<ul>
<p>But beware! The new ASE apk is HUGE (4.6M) and JRuby is fairly slow. But it works <img src='http://amazing-development.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </ul>
<p><img src="http://static.amazing-development.com/blog_images/09/ase1.jpg"/><br />
<img src="http://static.amazing-development.com/blog_images/09/ase2.jpg"/></p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2009/08/04/android-scripting-environment-supports-jruby/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Code reviews work</title>
		<link>http://amazing-development.com/archives/2009/02/22/code-reviews-work/</link>
		<comments>http://amazing-development.com/archives/2009/02/22/code-reviews-work/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 20:24:50 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://amazing-development.com/?p=354</guid>
		<description><![CDATA[Seems like nowadays I only write blog posts in response to other blog articles&#8230; But I hope this is better than not writing at all. Ted Neward asks if code reviews do actually work because evidence suggests, that the scientific review process does not. Only 8% members of the Scientific Research Society agreed that &#8220;peer [...]]]></description>
			<content:encoded><![CDATA[<p>Seems like nowadays I only write blog posts in response to other blog articles&#8230; But I hope this is better than not writing at all. <a href="http://blogs.tedneward.com/2009/02/22/As+For+Peer+Review+Code+Review.aspx">Ted Neward asks if code reviews do actually work</a> because evidence suggests, that the scientific review process does not.<span id="more-354"></span></p>
<p><a href="http://en.wikipedia.org/wiki/File:Hooke-microscope.png"><img class="alignright" src="http://static.amazing-development.com/blog_images/09/microscope.png"/></a></p>
<blockquote><p>Only 8% members of the Scientific Research Society agreed that &#8220;peer review works well as it is&#8221;. (Chubin and Hackett, 1990; p.192).</p>
<p>&#8220;A recent U.S. Supreme Court decision and an analysis of the peer review system substantiate complaints about this fundamental aspect of scientific research.&#8221; (Horrobin, 2001)</p>
<p>Horrobin concludes that peer review &#8220;is a non-validated charade whose processes generate results little better than does chance.&#8221; (Horrobin, 2001). This has been statistically proven and reported by an increasing number of journal editors.</p>
<p>But, &#8220;Peer Review is one of the sacred pillars of the scientific edifice&#8221; (Goodstein, 2000), it is a necessary condition in quality assurance for Scientific/Engineering publications, and &#8220;Peer Review is central to the organization of modern science…why not apply scientific [and engineering] methods to the peer review process&#8221; (Horrobin, 2001).</p>
<p>&#8230;</p>
<p>Chubin, D. R. and Hackett E. J., 1990, Peerless Science, Peer Review and U.S. Science Policy; New York, State University of New York Press.</p>
<p>Horrobin, D., 2001, &#8220;Something Rotten at the Core of Science?&#8221; Trends in Pharmacological Sciences, Vol. 22, No. 2, February 2001. Also at <a href="http://www.whale.to/vaccine/sci.html">http://www.whale.to/vaccine/sci.html</a> and <a href="http://post.queensu.ca/~forsdyke/peerrev4.htm">http://post.queensu.ca/~forsdyke/peerrev4.htm</a> (both pages were accessed on February 1, 2009)</p>
<p>Goodstein, D., 2000, &#8220;How Science Works&#8221;, U.S. Federal Judiciary Reference Manual on Evidence, pp. 66-72 (referenced in Hoorobin, 2000)</p></blockquote>
<p>This sounds so true to me. I heard way more than one story from Ph.D. students where the professors who were supposed to review papers just forwarded this work to their slaves.</p>
<p>But the fact that academic peer reviews are possibly a failure should not be used to argue against the usefulness of code reviews.</p>
<p><b>As a reviewee</b><br />
My first project at Google was written in Python. I had never written a single line of Python before. The feedback I got from the first few reviews helped me learn a lot about Python in a very short time. I don&#8217;t know how many times I got these &#8220;Yes, this would work but if you replace these 6 lines with that short statement it would work, too&#8221; comments.</p>
<p>The same is true for my second project in C++. I have written some C++ before but this was for my Diploma thesis and the code was far from professional. Again the feedback I got from my reviewers helped me learn C++ a lot faster than I would have otherwise. This project was a lot bigger than the first one so I got a few &#8220;we already have this implemented here&#8221; comments.</p>
<p><b>As a reviewer</b><br />
I usually don&#8217;t pay that much attention to our coding conventions but my pet peeve is looking out for missing comments. Every time I have to think about a single line of code, this is a pretty good signal that a comment is missing.</p>
<p>Reviewing other people&#8217;s code makes sure that I have at least a little knowledge about the areas of our project I do not work on directly.</p>
<p><b>Conclusion</b><br />
Code reviews take time and need the proper tool support. But if it is done right, they are useful and help in a couple of different areas:</p>
<ul>
<li>Learning a new language or about new piece of code.</li>
<li>Avoiding code duplication.</li>
<li>Making sure code is documented.</li>
<li>Distribute the knowledge.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2009/02/22/code-reviews-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drop all tables from a mysql database</title>
		<link>http://amazing-development.com/archives/2009/01/31/drop-all-tables-from-a-mysql-database/</link>
		<comments>http://amazing-development.com/archives/2009/01/31/drop-all-tables-from-a-mysql-database/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 19:19:45 +0000</pubDate>
		<dc:creator>schlumpf</dc:creator>
				<category><![CDATA[all]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Work]]></category>

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

		<guid isPermaLink="false">http://amazing-development.com/?p=319</guid>
		<description><![CDATA[I am looking for an intern (more details) for later this year. I have a number of interesting ideas for projects, most of them involve Ruby (more specific JRuby), Android and Eclipse. Your skill set should include at least Java and if possible Ruby and/or Eclipse API. I&#8217;m looking for a commitment of at least [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://static.amazing-development.com/blog_images/Asok_the_intern_icon.gif" alt="Asok the intern"/>I am looking for an intern (<a href="http://www.google.com/support/jobs/bin/answer.py?hl=en&#038;answer=53681">more details</a>) for later this year. I have a number of interesting ideas for projects, most of them involve <a href="http://www.ruby-lang.org/">Ruby</a> (more specific <a href="http://jruby.codehaus.org/">JRuby</a>), <a href="http://code.google.com/android/">Android</a> and <a href="http://eclipse.org">Eclipse</a>. Your skill set should include at least Java and if possible Ruby and/or Eclipse API.</p>
<p>I&#8217;m looking for a commitment of at least three months (I would prefer six) and you should be within one or two years of receiving degree. If this sounds interesting please apply <a href="http://www.google.com/support/jobs/bin/answer.py?hl=en&#038;answer=53681">here</a> and add a note that you would like to work with Frank Spychalski in Munich.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/04/25/looking-for-an-intern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Girl&#8217;s day in the office</title>
		<link>http://amazing-development.com/archives/2008/04/25/girls-day-in-the-office/</link>
		<comments>http://amazing-development.com/archives/2008/04/25/girls-day-in-the-office/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 09:20:02 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[google]]></category>

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

		<guid isPermaLink="false">http://amazing-development.com/?p=316</guid>
		<description><![CDATA[I found the DIY page for demotivators and had to create one for Ruby. Enjoy!]]></description>
			<content:encoded><![CDATA[<p><a href="http://static.amazing-development.com/blog_images/demotivators-ruby.jpg"><img class="alignright" src="http://static.amazing-development.com/blog_images/demotivators-ruby.thumb.jpg"/></a>I found the DIY page for demotivators and had to create one for Ruby. Enjoy! </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/04/06/ruby-demotivator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EURUKO 2008 Day 2</title>
		<link>http://amazing-development.com/archives/2008/03/30/euruko-2008-day-2/</link>
		<comments>http://amazing-development.com/archives/2008/03/30/euruko-2008-day-2/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 08:42:14 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[EURUKO]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://amazing-development.com/archives/2008/03/30/euruko-2008-day2/</guid>
		<description><![CDATA[Second day has started. Today it starts with a few talks on testing&#8230; George Malamidis — „Synthesized Testing“ Already 15min behind schedule, but so far interesting. This has 4 lines of code. It is already a big ruby function. Vassilis Rizopoulos — „rutema: One test tool to rule them all“ I&#8217;m thinking on how to [...]]]></description>
			<content:encoded><![CDATA[<p>Second day has started. Today it starts with a few talks on testing&#8230;</p>
<h5>George Malamidis — „Synthesized Testing“</h5>
<p>Already 15min behind schedule, but so far interesting.</p>
<blockquote><p>
This has 4 lines of code. It is already a big ruby function.
</p></blockquote>
<h5>Vassilis Rizopoulos — „rutema: One test tool to rule them all“</h5>
<p>I&#8217;m thinking on how to write in a polite way &#8220;This talk was boring&#8221;. It was. And the tool uses XML <img src='http://amazing-development.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  Hey, this is a Ruby conference- you should use YAML or even better a cool Ruby DSL.</p>
<h5>Tomasz Stachewicz — „Sharing the load“</h5>
<p>Sounded interesting but there was a question after the talk which suggested that the guys reinvented the wheel and that BackgroundDrb is a better solution for what he has done.</p>
<h5>Petr Krontorád — „Building Rails Playground &#8211; using Ruby&#8217;s dynamic nature“</h5>
<p>Mumble, mumble, small text, cannot read the slides, mumble&#8230; Sorry I don&#8217;t have a clue what this talk is about.</p>
<h5>Tim Becker — „Lessons Learned Writing Native Extensions“</h5>
<p>Type-along tutorial on how to write C extension for Ruby. Very interesting, this could actually make me write C code again&#8230; He has started talking on cats and tigers and it seems like he wants to teach us how arrays work in C. Booooooooring. Finally he is done with this and is back on the interesting topics like conversion of data types. Overall a really interesting talk. By far the best one today so far. Tim&#8217;s <a href="http://blog.kuriositaet.de/?p=220">post with code samples and links</a>.</p>
<h5>Matt Ford — „Aspect Oriented Programming in Ruby“</h5>
<p>It&#8217;s his birthday. Happy birthday Matt! He talks about <a href="http://aquarium.rubyforge.org/">Aquarium</a> a neat aspect oriented programming solution for Ruby. Very nice. I have to play around with this when I&#8217;m back home.</p>
<h5>Dushan Wegner — „Philosophy &amp; Programming“</h5>
<p>This first lightning talk. &#8220;Imagine I&#8217;m holding a beer and put out this ideas&#8221;. &#8220;Programmers are better philosophers&#8221;. A very cool talk about the similarities of programming and practicing philosophy.</p>
<h5>Marcin Raczkowski — „Distributed programming with ruby“</h5>
<p>Hard to understand but interesting. Sadly it is impossible to read his code when he is showing examples in the editor.</p>
<h5><strike>sorry missed name and title</strike> Akira Tanaka &#8211; „IO.copy_stream“</h5>
<p>Interesting talk about IO in Ruby. Great final &#8220;status&#8221; slide:</p>
<blockquote><p>
Accepted by Matz yesterday @La fabrica<br />
Submitted today to Ruby 1.9
</p></blockquote>
<p>Wow!</p>
<h5>Gregor &#8230;  — „Context-oriented programming for Ruby“</h5>
<p>Took a long time to get to the point. Which part of lightning talk did you not understand.</p>
<h5>Florian Gilcher — „Patterns (yet another) pattern matching library“</h5>
<p>Interesting talk. Can be found at <a href="http://patterns.rubyforge.org/">patterns.rubyforge.org</a>.</p>
<h5>Raimonds Simanovskis — „Using Ruby with Oracle“</h5>
<p>Good quick talk. I never had to work with Oracle so I never had the problems he was talking about.</p>
<h5>Daniel Liszka — „One RubyStack to Rule them All“</h5>
<p>Strong accent, to much text on the slides. But sounds like a neat idea&#8230; <a href="http://www.bitnami.org/stack/rubystack/">www.bitnami.org/stack/rubystack</a></p>
<h5>Ry Dahl — „Ebb Web Server“</h5>
<p>Yet another Ruby web server, obviously it&#8217;s faster than all the others because what would be the point otherwise. <a href="http://ebb.rubyforge.org">ebb.rubyforge.org</a></p>
<h5>Wouter de Bie — „Capistrano, Webistrano“</h5>
<p>The final lightning talk. I&#8217;m hungry <img src='http://amazing-development.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  off to find some food&#8230;</p>
<h5>Dr Nic — Demo</h5>
<p>So it wasn&#8217;t the last talk. They squeezed in a short demo on how to use his gem generator. Very cool! I have to use this to play around with native C extensions.</p>
<h5>Final announcement</h5>
<p><strike>It seems like next year&#8217;s EURUKO will be in Madrid. Great! Never been there. See you next year!</strike> It&#8217;s not decided yet. Krakow and Warsaw are possible sites, too. Hm, I&#8217;m still for Madrid <img src='http://amazing-development.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h5>Sumary</h5>
<p>I think I should have slept in today like Todd and would not have missed a bit. Here are some <a href="http://www.flickr.com/photos/tags/euruko2008/">pictures from EURUKO 2008 on Flickr</a> and even <a href="http://www.flickr.com/photos/mattioikea/2370870486/sizes/o/">one with me</a>. EURUKO was great. A big &#8220;thank you!&#8221; to all the people who have organized it. I&#8217;m sure I will be back next year, no matter where.</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/03/30/euruko-2008-day-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>EURUKO 2008 Day 1</title>
		<link>http://amazing-development.com/archives/2008/03/29/euruko-2008-day1/</link>
		<comments>http://amazing-development.com/archives/2008/03/29/euruko-2008-day1/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 09:15:30 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[EURUKO]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://amazing-development.com/archives/2008/03/29/euruko-2008/</guid>
		<description><![CDATA[The first day of EURUKO 2008 is over. Yukihiro „Matz“ Matsumoto — „Keynote“ Matz talked about the future of Ruby. It was very interesting. He talked a little bit about the upcoming features (I will link to the slides when they become available) and about the design decisions behind Ruby. For me the most important [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://static.amazing-development.com/blog_images/chunky_bacon.scaled.jpg"/></p>
<p>The first day of <a href="http://www.euruko2008.org/">EURUKO 2008</a> is over.</p>
<h5>Yukihiro „Matz“ Matsumoto — „Keynote“</h5>
<p>Matz talked about the future of Ruby. It was very interesting. He talked a little bit about the upcoming features (I will link to the slides when they become available) and about the design decisions behind Ruby. For me the most important quote was:</p>
<blockquote><p>I designed Ruby not to work best but so that people can perform best</p></blockquote>
<h5>Koichi Sasada — „Ruby meets VM“</h5>
<p>Koichi explained some details of YARV but some points were lost because a few of his slides were in Japanese.</p>
<p>Favorite quote:</p>
<blockquote><p>(on his &#8220;No Ruby/No Life shirt&#8221;) for me it&#8217;s No Ruby / No Job</p></blockquote>
<h5>Charles Nutter and Thomas Enebo — „JRuby: Ready For Action!“</h5>
<p>Made me download JRuby during the talk <img src='http://amazing-development.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
<h5>David A. Black — „Per-Object Behavior in Ruby“</h5>
<p>I have to reread the slides, because I fell asleep (not due to the talk but to the fact that we are in Prague and had a few beer yesterday)</p>
<h5>Nic Williams — „Meta-Meta-Programming with Ruby“</h5>
<p>Memorable talk, very funny, <a href="http://www.agyampark.hu/euruko-2008">great final slide (see @16:35)</a></p>
<h5>Lightning talks session</h5>
<p>Two talks on an agile white board and on a Ruby to PHP compiler.</p>
<h5>VC with DHH</h5>
<p>a little boring, bad sound quality and even worse video</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/03/29/euruko-2008-day1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EURUKO 2008 — European Ruby Conference</title>
		<link>http://amazing-development.com/archives/2008/02/26/euruko-2008-%e2%80%94-european-ruby-conference/</link>
		<comments>http://amazing-development.com/archives/2008/02/26/euruko-2008-%e2%80%94-european-ruby-conference/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 20:21:02 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[EURUKO]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://amazing-development.com/archives/2008/02/26/euruko-2008-%e2%80%94-european-ruby-conference/</guid>
		<description><![CDATA[I just found out about EURUKO 2008. It will take plaze in Prague, Czech Republic, on March 29th to 30th. From what I&#8217;ve heard are EURUKOs fun events and I would like to go this year if I can find the time especially because of this announcement: 19. 02. 2008 · Matz is coming to [...]]]></description>
			<content:encoded><![CDATA[<p>I just found out about <a href="http://www.euruko2008.org/">EURUKO 2008</a>. It will take plaze in Prague, Czech Republic, on March 29th to 30th. From what I&#8217;ve heard are EURUKOs fun events and I would like to go this year if I can find the time especially because of this announcement:</p>
<blockquote><p>
19. 02. 2008 · Matz is coming to EURUKO!<br />
We are very happy to announce that Matz (most probably accompanied by Koichi) is coming to EURUKO! There are currently more than 100 people registered to attend, so thank you all! We will update the website in next couple of days with more details on program, information about sponsors and other stuff.
</p></blockquote>
<p>It has been some time since I used Ruby but it is still my favorite language by far.</p>
<p><i>Update:</i></p>
<p>I just registered for EURUKO <img src='http://amazing-development.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  I will probably go by car so if someone from the Munich area needs a ride, just leave a comment&#8230; And a bonus feature: I found this <a href="http://www.youtube.com/watch?v=oEkJvvGEtB4">Tech Talk of Matz talking about Ruby 1.9</a> today&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2008/02/26/euruko-2008-%e2%80%94-european-ruby-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JRuby on Android</title>
		<link>http://amazing-development.com/archives/2007/12/14/jruby-on-android/</link>
		<comments>http://amazing-development.com/archives/2007/12/14/jruby-on-android/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 03:43:27 +0000</pubDate>
		<dc:creator>Frank Spychalski</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://amazing-development.com/archives/2007/12/14/jruby-on-android/</guid>
		<description><![CDATA[Today I tried to run JRuby on Android. I failed. This article is more like a lab report so expect more boring details&#8230; At first I tried the easiest way and added the JRuby jar to my android project. This would have been way to easy and as I expected it did not work. Then [...]]]></description>
			<content:encoded><![CDATA[<p><img class="framedr" src="http://static.amazing-development.com/blog_images/red_robot_1.jpg" alt="a red robot"/>Today I tried to run <a href="http://jruby.codehaus.org/">JRuby</a> on <a href="http://code.google.com/android/">Android</a>. I failed. This article is more like a lab report so expect more boring details&#8230;<span id="more-303"></span></p>
<p>At first I tried the easiest way and added the JRuby jar to my android project. This would have been way to easy and as I expected it did not work. </p>
<p>Then I copied all the JRuby sources into my android project and eclipse gave me more than 100 errors. I had to remove org.jruby.javasupport.bsf.BSFExample and the whole org.jruby.demo package because of dependencies to awt and swing. Now only a single error message was left with a dependency on some class I can&#8217;t remember in java.beans. So I downloaded the Java sources and copied the class into my project which gave me a few new dependencies. So I copied the whole java.beans package into the project and removed all dependencies to awt and swing from the code. Now I needed to add only 2 more classed com.sun.beans.ObjectHandler and sun.awt.EventListenerAggregate for eclipse to stop complaining. </p>
<p><img class="framedl" src="http://static.amazing-development.com/blog_images/red_robot_2.jpg" alt="a red robot"/>At this point I encountered my first bug in Android: dx(the compiler for <a href="http://en.wikipedia.org/wiki/Dalvik_virtual_machine">Dalvik</a>) complained about the bsf.jar file which came with JRuby[1]. Fortunately I could work on with the 2.4.0 version of bsf. </p>
<p>At this point eclipse stopped complaining and dx was able to create Dalvik byte code for my test application and package the result.</p>
<p>But when I started the result on the emulator all I got was an exception&#8230; This is where I will stop for today and continue whenever I find some time. If someone out there has already successfully used JRuby on Android please leave me a comment on how you managed to do it.</p>
<p>[1] the bug was fixed less than 3h after I reported it. Kudos to the Dalvik team!</p>
]]></content:encoded>
			<wfw:commentRss>http://amazing-development.com/archives/2007/12/14/jruby-on-android/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

