<?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>dow.ngra.de &#187; report</title>
	<atom:link href="http://dow.ngra.de/category/report/feed/" rel="self" type="application/rss+xml" />
	<link>http://dow.ngra.de</link>
	<description>no buzzwords allowed</description>
	<lastBuildDate>Sun, 22 Jan 2012 14:52:41 +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>Spinning off with style (pictorial report)</title>
		<link>http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/</link>
		<comments>http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 10:13:28 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[report]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=1106</guid>
		<description><![CDATA[ZeroTurnaround is a spin-off of Webmedia (fastest growing software development company in the Baltic States since 2000). Before JRebel (our flagship product) we worked in the R&#038;D team of Webmedia. Then came JRebel, JSPWeaver, ZeroTurnaround and now we&#8217;ve spinned off and are at a new office. A spin-off is a new organization or entity formed [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zeroturnaround.com">ZeroTurnaround</a> is a <a href="http://en.wikipedia.org/wiki/Spin-off">spin-off</a> of <a href="http://www.webmedia.eu">Webmedia</a> (fastest growing software development company in the Baltic States since 2000). Before JRebel (our flagship product) we worked in the R&#038;D team of Webmedia. Then came JRebel, JSPWeaver, ZeroTurnaround and now we&#8217;ve spinned off and are at a new office.</p>
<blockquote style="font-size:9pt;color:grey"><p>A spin-off is a new organization or entity formed by a split from a larger one, such as television series based on a pre-existing one, or a new company formed from a university research group or business incubator.</p></blockquote>
<p>Moving is work, getting stuff into boxes, moving the boxes and getting the stuff out of the boxes. We were able to add a fun factor to the process. The evening before the move our team was having beers at a <a href="http://www.bcplace.ee/">local bar</a> and one thing lead to another and the next moment we were at the old office with a <b>knife</b>, <b>pillow</b> and <b>3 eggs</b> and it was 1AM.</p>
<p><img src="http://dow.ngra.de/wp-content/uploads/post.png" alt="Knife, pillow and 3 eggs" title="Knife, pillow and 3 eggs" width="476" height="77" class="aligncenter size-full wp-image-1122" /></p>
<p>So in the middle of the night, at the office, 3 guys with the mentioned equipment and a plan! The plan was simple. Webmedia CEO&#8217;s name is <b>Eagle</b> (at least in the Estonian language) and what if we prep his office for a proper leaving. Stage it as <b>birdies</b> leaving the <b>nest</b>, <b>feathers</b>, <b>egg-shells</b>. Awesome plan from just 4 beers!</p>
<p>Pictures follow.<br />

<a href='http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/img_0351/' title='Entering the office'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2009/11/img_0351-150x150.jpg" class="attachment-thumbnail" alt="Entering the office" title="Entering the office" /></a>
<a href='http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/img_0350/' title='Step by step'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2009/11/img_0350-150x150.jpg" class="attachment-thumbnail" alt="Step by step" title="Step by step" /></a>
<a href='http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/img_0349/' title='One step closer'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2009/11/img_0349-150x150.jpg" class="attachment-thumbnail" alt="One step closer" title="One step closer" /></a>
<a href='http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/img_0348/' title='Closer look at the desk'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2009/11/img_0348-150x150.jpg" class="attachment-thumbnail" alt="Closer look at the desk" title="Closer look at the desk" /></a>
<a href='http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/img_0347/' title='The message'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2009/11/img_0347-150x150.jpg" class="attachment-thumbnail" alt="The message" title="The message" /></a>
</p>
<ul>
<li>The sign says <em>ZeroTurnaround guys have left the nest. Thanks!</em></li>
<li>Yeah, all the feathers come from a single pillow</li>
<li>Yes, I&#8217;m missing a pillow</li>
<li>Yes, we had to clean it up (well, just me, because everybody else supposedly had more important tasks at hand).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2009/11/04/spinning-off-with-style-pictorial-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A PHB + a startup + dilbert = SALES are up!</title>
		<link>http://dow.ngra.de/2009/10/31/a-phb-a-startup-dilbert-sales-are-up/</link>
		<comments>http://dow.ngra.de/2009/10/31/a-phb-a-startup-dilbert-sales-are-up/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 14:35:13 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[report]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=1083</guid>
		<description><![CDATA[Looking at the numbers I can say that it is working but wearing the extra nose is not as easy as it seems.]]></description>
			<content:encoded><![CDATA[<p>Looking at the numbers I can say that it is working but wearing the extra nose is not as easy as it seems.</p>
<p><a href="http://dow.ngra.de/wp-content/uploads/2009/10/71290strip.gif"><img src="http://dow.ngra.de/wp-content/uploads/2009/10/71290strip-300x93.gif" alt="Dilbert strip" title="Dilbert strip" width="300" height="93" class="aligncenter size-medium wp-image-1086" /></a></p>
<p><a href="http://dow.ngra.de/wp-content/uploads/2009/10/photo.jpg"><img src="http://dow.ngra.de/wp-content/uploads/2009/10/photo-300x225.jpg" alt="Making sales" title="Making sales" width="300" height="225" class="aligncenter size-medium wp-image-1089" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2009/10/31/a-phb-a-startup-dilbert-sales-are-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft acquires ZeroTurnaround for undisclosed amount</title>
		<link>http://dow.ngra.de/2009/04/01/microsoft-acquires-zeroturnaround-for-undisclosed-amount/</link>
		<comments>http://dow.ngra.de/2009/04/01/microsoft-acquires-zeroturnaround-for-undisclosed-amount/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 09:21:30 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[report]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=854</guid>
		<description><![CDATA[ZeroTurnaround Ltd., a developer of Java development productivity tools, announced today that it has been acquired by Microsoft Corp. Financial terms weren&#8217;t disclosed. ZeroTurnaround will stop any further developments of JavaRebel and JSPWeaver and will buy back all the licenses sold so far. &#8220;The deal fits with Microsoft’s strategy of migrating Java developers to the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zeroturnaround.com">ZeroTurnaround</a> Ltd., a developer of Java development productivity tools, announced today that it has been acquired by Microsoft Corp. Financial terms weren&#8217;t disclosed. ZeroTurnaround will stop any further developments of <a href="http://www.zeroturnaround.com/javarebel">JavaRebel</a> and <a href="http://www.zeroturnaround.com/jsp-weaver">JSPWeaver</a> and will buy back all the licenses sold so far.</p>
<p>&#8220;The deal fits with Microsoft’s strategy of migrating Java developers to the .NET platform and will increase the <a href="http://news.cnet.com/8301-13505_3-9884500-16.html">conversion rate</a> greatly&#8221; said Alain Crozier, Corporate Vice President and CFO, from Sales, Marketing and Services Group of Microsoft Corp. &#8220;We saw ZeroTurnaround as a threat to our .NET development platform, enabling Java developers to be as productive as the developers on modern platforms. We had to put a stop to it.&#8221;</p>
<p>Rumours say that this can severly affect the IBM and SUN deal and will send Java development back as far as the Stone Age.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2009/04/01/microsoft-acquires-zeroturnaround-for-undisclosed-amount/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Random observations from Devoxx 2008</title>
		<link>http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/</link>
		<comments>http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 08:42:35 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[creative]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[devoxx]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=507</guid>
		<description><![CDATA[Pictorial report from Devoxx 2008. Does Bruce Willis work for IBM? Which app server is evil? How popular has Spring App Platform become?]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://www.devoxx.com">Devoxx</a> is an annual European Java conference with a total of 3200 attendees from 35 countries and again has been completely sold out. The place is packed. Lots of people, lots of movement and too little internet.</em></p>
<p>Second day at Devoxx and it is going well. I&#8217;ve attended three sessions so far, it is not so much me being lazy but more about being at the <a href="http://www.zeroturnaround.com">JavaRebel</a> booth most of the time. Still I&#8217;ve seen many cool things here. Random ramblings will follow.</p>
<p><img src="http://dow.ngra.de/wp-content/uploads/2008/12/wearethesheep-237x300.jpg" alt="Monitoring tools" title="Monitoring tools" width="237" height="300" class="alignleft size-medium wp-image-512"  style="margin-right:5px"/>The conference passes have embedded RFID chip and every movement (hopefully not) is being tracked. From the local paper I read that they will measure session popularity by how many attended the talks, how many left early and so on.</p>
<p>Don&#8217;t know if they&#8217;ll realease any of it to public (probably not) but it will be great input at least for the next devoxx. The information is said to be anonymous, although I would like to see if and which sessions did the speakers themselves visit.</p>
<p>I presume we are being monitored by these devices that are present on any entrance of the session halls.</p>
<p><img src="http://dow.ngra.de/wp-content/uploads/2008/12/coolscreens1-300x225.jpg" alt="Cool Screens" title="Cool Screens" width="300" height="225" class="alignleft size-medium wp-image-515" style="margin-right:5px" />The venue is just excellent, having the cinema as the location means that the seating at the sessions is excellent. You have even cup holders and room for popcorn:). The screens are huuuuge and they have added live video of the speaker to the screen.<br />
<br/></p>
<p><strong>Which application server is the most popular?</strong></p>
<p><img src="http://dow.ngra.de/wp-content/uploads/2008/12/whichappserverisevil-300x207.jpg" alt="Which app server is evil?" title="Which app server is evil?" width="300" height="207" class="alignleft size-medium wp-image-510" style="margin-right:5px"/>Besides <strong>Websphere</strong> being <strong>evil</strong> we see that <strong>Spring App Platform</strong> has now managed to get two users! Depending on the interpretation of the study I would say Tomcat is in the lead!</p>
<p><img src="http://dow.ngra.de/wp-content/uploads/2008/12/tables1-300x209.jpg" alt="Tables to chill at" title="Tables to chill at" width="300" height="209" class="alignleft size-medium wp-image-513" style="margin-right:5px" />Something that I really like compared to all the other conferences I&#8217;ve attended this year are the tables with the power cords. You don&#8217;t have to worry about your laptop&#8217;s battery dying.</p>
<p>But! when compared to the other conferences where your battery actually died you were able to use the internet. Write emails, read news, hack on projects and all the other stuff until you ran out of juice. Here at certain times you have internet, most of the time you don&#8217;t. Even if you have it, some domains don&#8217;t resolve on certain occasions and it is dead slow if it works.</p>
<p><strong>Is Bruce Willis working for IBM?</strong> Sure, he was in a movie <a href="http://www.imdb.com/title/tt0314353/">Tears of the Sun</a>.</p>
<p>
<a href='http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/whichspeakers/' title='Which speakers would be cool to listent to?'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/12/whichspeakers-150x150.jpg" class="attachment-thumbnail" alt="Which speakers would be cool to listent to?" title="Which speakers would be cool to listent to?" /></a>
<a href='http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/whichappserverisevil/' title='Which app server is evil?'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/12/whichappserverisevil-150x150.jpg" class="attachment-thumbnail" alt="Which app server is evil?" title="Which app server is evil?" /></a>
<a href='http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/wearethesheep2/' title='Monitoring tools'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/12/wearethesheep2-150x150.jpg" class="attachment-thumbnail" alt="Monitoring tools" title="Monitoring tools" /></a>
<a href='http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/wearethesheep/' title='Monitoring tools'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/12/wearethesheep-150x150.jpg" class="attachment-thumbnail" alt="Monitoring tools" title="Monitoring tools" /></a>
<a href='http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/tables1/' title='Tables to chill at'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/12/tables1-150x150.jpg" class="attachment-thumbnail" alt="Tables to chill at" title="Tables to chill at" /></a>
<a href='http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/coolscreens1/' title='Cool Screens'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/12/coolscreens1-150x150.jpg" class="attachment-thumbnail" alt="Cool Screens" title="Cool Screens" /></a>
<a href='http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/bruceisworkingforibm1/' title='Bruce Is Working for IBM'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/12/bruceisworkingforibm1-150x150.jpg" class="attachment-thumbnail" alt="Bruce Is Working for IBM" title="Bruce Is Working for IBM" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/12/10/random-observations-from-devoxx-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script kiddies have awesome tools</title>
		<link>http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/</link>
		<comments>http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 16:05:08 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=413</guid>
		<description><![CDATA[About 10 years ago a friend of mine showed me an exploit. It was written in C and it tried to spawn a shell at a remote host. It seemed pretty cool. I did not understand the code but the mere idea that almost anybody equipped with a script like that could deface a webpage [...]]]></description>
			<content:encoded><![CDATA[<p>About 10 years ago a friend of mine showed me an exploit. It was written in C and it tried to spawn a shell at a remote host. It seemed pretty cool. I did not understand the code but the mere idea that almost anybody equipped with a script like that could deface a webpage seemed scary.</p>
<p>You did have to compile the c file, have the right devel packages installed and use the correct flags. And then you had to figure out how to use it. A 14yr old could do it.</p>
<p>Today I spent many hours grepping logs, checking the filesystem for new/changed files to figure out how an old WordPress instance was hacked and what had the hacker done there.</p>
<p>Going through the changed files I stumbled upon a php file which had some code prepended. The script had a very long line that started like this:<br />
[PHP]<br />
eval(gzinflate(base64_decode(&#8216;FJ3HcqPsFkUf&#8230;&#8230;..<br />
[/PHP]</p>
<p>Ok, lets check what does the script do. Lets assign the long string to a variable and base64 decode it and inflate the compression.<br />
[PHP]<br />
$script =  base64_decode($script);<br />
$script = gzinflate($script);<br />
echo $script;<br />
[/PHP]</p>
<p>The output was not what I expected.<br />
[PHP]<br />
eval(gzinflate(base64_decode(&#8216;FJ3HjqPcGkUf57&#8230;&#8230;..<br />
[/PHP]</p>
<p>The strings looked similar and I was already looking for an error in my code. Nope, code is correct. There <strong>is</strong> a <strong>slight</strong> change in the string. It seems it was compressed and encoded couple of times. Wow, it means I can have many evals inside evals. Fun!<br />
[PHP]<br />
do {<br />
  // extract the first 28 characters<br />
  // the eval(gzinflate(base64_decode part<br />
  $start =  substr($string, 0, 28);<br />
  // remove the first 30 chars, the eval(gzinflate(base64_decode(&#8216; part<br />
  $string = substr($string, 30);<br />
  // remove the last )));<br />
  $string = substr($string, 0, strlen($string)-4);</p>
<p>  $string =  base64_decode($string);<br />
  $string = gzinflate($string);<br />
  echo &#8220;Iteration:&#8221;.$i++.&#8221;\n&#8221;;<br />
  // iterate as long as we get a eval(gzinflat start<br />
} while ($start == &#8220;eval(gzinflate(base64_decode&#8221;);<br />
[/PHP]</p>
<p>After <b>11</b> iterations I got the code. Kind of reminded me a challenge that was posted to a mailing list and the question was what was the output of the program. That time it was more difficult: base64 encoded perl, that outputted base64 encoded bytecode, that outputted Java source file with a byte array that was byte code for the class file of the solution.</p>
<p>Anyways the 11 iterations gave me this (shot is made from my home computer).<br />
<a href="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies001.png"><img border="0" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies001-300x199.png" alt="Wow!" title="Script Kiddie Console" width="300" height="199" class="size-medium wp-image-419" /></a></p>
<p>Lets see the functionality that it has to offer:</p>
<ul>
<li>Full blown file manager</li>
<li>Quick menu for</li>
<ul>
<li>Finding all suid files</li>
<li>Finding all sgid files</li>
<li>Finding all htaccess files</li>
<li>Finding all writeable folders</li>
<li>&#8230;</li>
</ul>
<li>Interface for the UNIX tool find</li>
<li>Input field for executing commands as webserver user</li>
<li>Tools for installing a backdoor</li>
<ul>
<li>Perl/C flavoured programs that are downloaded from a Singapore server</li>
<li>Compiled/Interpreted &#8211; depending what is available</li>
</ul>
<li>Processes viewer</li>
<li>FTP brute force cracker using users from <em>/etc/passwd</em></li>
<li>System info (CPU, Memory, installed binaries, passwd file, configuration files)</li>
<li>SQL dump utility</li>
<li>Interface for executing PHP code</li>
<li>Self removal</li>
<li>Adding a password for the script</li>
<li>Fancy design!</li>
</ul>
<p>I&#8217;m just amazed. This is way too eazy. So this is how it works:</p>
<ul>
<li>Lets scan the internet for WordPress installation (automated)</li>
<li>Look for vulnerable versions (automated)</li>
<li>Exploit (in this case themes were filled with hidden links &#8211; semi automated)</li>
<li>PROFIT! (automated)</li>
</ul>
<p>How to avoid being hacked:</p>
<ul>
<li>Keep an eye on your WordPress installations</li>
<li>Subscribe to WordPress release emails/RSS and upgrade when needed</li>
<li>Monitor for changed files (for example <a href="http://www.geocities.com/fcheck2000/fcheck.html">fcheck</a>)</li>
<li>Run Apache in chroot to minimize the available software for the Apache user</li>
<li>Any other ideas?</li>
</ul>
<p>PS. The script is 2500 lines of code, supports Windows and Linux and looks great :)</p>
<p>
<a href='http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/scriptkiddies001/' title='Script Kiddie Console'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies001-150x150.png" class="attachment-thumbnail" alt="Script Kiddie Console" title="Script Kiddie Console" /></a>
<a href='http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/scriptkiddies003/' title='Find Wrapper'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies003-150x150.png" class="attachment-thumbnail" alt="Find Wrapper" title="Find Wrapper" /></a>
<a href='http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/scriptkiddies004/' title='Backdoor installation'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies004-150x150.png" class="attachment-thumbnail" alt="Backdoor installation" title="Backdoor installation" /></a>
<a href='http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/scriptkiddies005/' title='FTP Brute Force'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies005-150x150.png" class="attachment-thumbnail" alt="FTP Brute Force" title="FTP Brute Force" /></a>
<a href='http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/scriptkiddies006/' title='System Information'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies006-150x150.png" class="attachment-thumbnail" alt="System Information" title="System Information" /></a>
<a href='http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/scriptkiddies007/' title='Process viewer'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies007-150x150.png" class="attachment-thumbnail" alt="Process viewer" title="Process viewer" /></a>
<a href='http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/scriptkiddies008/' title='Self Removal'><img width="150" height="150" src="http://dow.ngra.de/wp-content/uploads/2008/11/scriptkiddies008-150x150.png" class="attachment-thumbnail" alt="Self Removal" title="Self Removal" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/11/04/script-kiddies-have-awesome-tools/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Case study: Is PHP embarrasingly slower than Java?</title>
		<link>http://dow.ngra.de/2008/08/04/optimizing-ip2c-php-implementation/</link>
		<comments>http://dow.ngra.de/2008/08/04/optimizing-ip2c-php-implementation/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 08:50:03 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=140</guid>
		<description><![CDATA[IP2C is a small library that provides IP to country resolution. It uses the free ip-to-country database. IP2C takes the database CSV file that is about 4mb and converts it into a ~600kb binary format and provides PHP and Java frontend to query the database. The library is great, easy to convert an ip to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://firestats.cc/wiki/ip2c">IP2C</a> is a small library that provides IP to country resolution. It uses the free <a href="http://ip-to-country.webhosting.info/">ip-to-country</a> database. IP2C takes the database CSV file that is about 4mb and converts it into a ~600kb binary format and provides PHP and Java frontend to query the database.</p>
<p>The library is great, easy to convert an ip to a country and when using the <a href="http://firestats.cc/browser/trunk/easy_ip2country/flags">country flags</a> from it&#8217;s side project you could spice up your statistics with the country information. This a lot faster than using reverse DNS lookup.</p>
<p>The problem. The PHP implementation is a lot slower. Embarrassingly slower. Without any caching the Java version is able to do ~6000 queries per second. The PHP counterpart can push through ~850 queries. The implementations are the same. The stats provided by the author of the library are 8000 vs 1200. So about the same as my measurements.</p>
<p>I like PHP, I don&#8217;t use it that much anymore but I still care when I see such embarrassing numbers. I took the implementation and started profiling it. Spent the night running different tests and trying to optimize.</p>
<p>General outline of the algorithm is as follows. We take the dotted string IP and convert it to an IPv4 Internet network address (e.g. 69.55.232.153 becomes 1161291929). The DB holds sorted ranges of these addresses. A binary search will happen on these addresses and we have a country for the ip. Take a look at the <a href="http://firestats.cc/browser/trunk/ip2c/php/ip2c.php">implementation</a>.</p>
<p><div id="attachment_159" class="wp-caption alignleft" style="width: 160px"><a href="http://dow.ngra.de/wp-content/uploads/2008/08/vanilla1.png"><img src="http://dow.ngra.de/wp-content/uploads/2008/08/vanilla-150x150.png" alt=" " title="Vanilla Profiling Results" width="150" height="150" class="size-thumbnail wp-image-159" /></a><p class="wp-caption-text"> </p></div><br />
Lets see where the vanilla version of IP2C spends its time at. The results are based on 1000 iterations with <a href="http://xdebug.org/">Xdebug</a> enabled and visualized by <a href="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi">KCacheGrind</a>. It processed about 210 IP addresses during this time.</p>
<p>IO part is surprisingly low. The internal <a href="http://php.net/fseek">fseek</a>, <a href="http://www.php.net/fread">fread</a> constitute to 2% of the execution time. On the other hand the user level fseek which is just a wrapper alone uses 5%. readShort and readInt take 20% of the execution time.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> readShort<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #990000;">unpack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'n'</span><span style="color: #339933;">,</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">m_file</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$a</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> readInt<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$a</span> <span style="color: #339933;">=</span><span style="color: #990000;">unpack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'N'</span><span style="color: #339933;">,</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">m_file</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$a</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> seek<span style="color: #009900;">&#40;</span><span style="color: #000088;">$offset</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">fseek</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">m_file</span><span style="color: #339933;">,</span> <span style="color: #000088;">$offset</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p><div id="attachment_166" class="wp-caption alignleft" style="width: 160px"><a href="http://dow.ngra.de/wp-content/uploads/2008/08/inlinedfunctions2.png"><img src="http://dow.ngra.de/wp-content/uploads/2008/08/inlinedfunctions2-150x150.png" alt=" " title="Inlined Functions" width="150" height="150" class="size-thumbnail wp-image-166" /></a><p class="wp-caption-text"> </p></div> Functions calls are expensive. Lets eliminate them. readInt, readShort, fseek are now inlined. Recursion changed to iteration (e.g. 14 000 less function calls). Able to process 400 queries per second compared to the previous 210.</p>
<p>We see that the latest profiling results have twice the number of freads and unpacks than fseeks. It seems that fseek is used to seek out the right position, read two numbers with <a href="http://www.php.net/unpack">unpacking</a> them. The implementation confirms that. Luckily we could just read once (2 bytes more) and unpack once (2 unpackings with one invocation).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$a</span> <span style="color: #339933;">=</span><span style="color: #990000;">unpack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'N'</span><span style="color: #339933;">,</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">m_file</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$np</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ip'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$a</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$a</span> <span style="color: #339933;">=</span><span style="color: #990000;">unpack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'n'</span><span style="color: #339933;">,</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">m_file</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$np</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'key'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$a</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// this can be changed to</span>
<span style="color: #000088;">$np</span> <span style="color: #339933;">=</span><span style="color: #990000;">unpack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Nip/nkey'</span><span style="color: #339933;">,</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">m_file</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>How does this version stack up to the Java version? Lets disable profiling and run 100 000 iterations. Vanilla version processes ~850 IPs, when functions are inlined the number is around 1400. Java version can still do 6000.</p>
<p>Lets try caching. Peeking at the Java <a href="http://firestats.cc/browser/trunk/ip2c/java/src/net/firefang/ip2c/input/RandomAccessBuffer.java">implementation</a> shows that Java caching version (whopping 141 242 IPs per second &#8211; yup 141k) uses just a byte[] array and makes lookups from there instead of seeking and reading from file. Easy, lets do the same in PHP.</p>
<p>We read everything into a string and instead of fread with access the string elements with the offset. For fseek with just set the offset. We are using 600kb more memory but can increase the throughput to ~2800.</p>
<p>As it seems I&#8217;ve just wasted a night, I just should have checked the <a href="http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&#038;lang=php&#038;lang2=javaclient">Computer Language Benchmarks</a>. PHP in the sense of execution speed is uncomparable to Java.</p>
<p>The upside, we can still take the library, eliminate recursions, double unpacks and add caching. A small gain is still a gain.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/08/04/optimizing-ip2c-php-implementation/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>TSSJS Prague Afterthoughts</title>
		<link>http://dow.ngra.de/2008/06/21/tssjs-prague-afterthoughts/</link>
		<comments>http://dow.ngra.de/2008/06/21/tssjs-prague-afterthoughts/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 11:23:20 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[report]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=127</guid>
		<description><![CDATA[The event is over and I&#8217;m heading back home for another five days. This was my second time on TSSJS and it definitely felt different. Last time it was in Barcelona and we weren&#8217;t exhibiting (in fact ZeroTurnaround didn&#8217;t even exist yet). Also this year had a lot of changes for TheServerSide, with a bunch [...]]]></description>
			<content:encoded><![CDATA[<p>The event is over and I&#8217;m heading back home for another five days. This was my second time on TSSJS and it definitely felt different. Last time it was in Barcelona and we weren&#8217;t exhibiting (in fact ZeroTurnaround didn&#8217;t even exist yet). Also this year had a lot of changes for TheServerSide, with a bunch of new people on the team and a bunch of old people leaving.</p>
<p>The conference content this year was great. Unfortunately I didn&#8217;t get to sit in on much talks, but I heard other participants discuss them and I know that the speakers who were there always deliver. There was quite a range of topics and none of the sponsored bullshit (there were sponsored keynotes, but apparently they were decently technical instead of unrefined marketing).</p>
<p>From a speaker perspective it was quite nice as well. I got to hang out with really cool dudes and had loads of fun in the evenings. Also my talks were surprisingly well attended this year, so I couldn&#8217;t be happier! The only hiccup was the &#8220;Special Appreciation Dinner&#8221; to which only half the speakers were invited. That wasn&#8217;t very well communicated and the choice of invitees was also very weird. Kudos to Brian for handling the situation and inviting everyone in the end.</p>
<p>However from a vendor perspective I was rather disappointed. The vendor space was hard to access and very dark, and the breaks between sessions were extremely short. The dedicated &#8220;vendor networking&#8221; time was put in the early morning before sessions and noone bothered coming. Perhaps for vendors who only need to make a few sales it was better, but for us numbers count. Luckily one of the (well attended) talks was (among others) about JavaRebel so in the end it played out OK for us. But I do think that next year TSS guys should either improve the situation considerably or do the conference without a trade show. </p>
<p>Finally I want to thank Geert, who was kind enough to record both my talks on his spanking new HD camcorder. I&#8217;m not sure at the moment if and when I could publish them (one recording takes more than 3 Gb at the moment), but at the very least I can make a podcast from the Fireside Chat we did with Geert and Guilaume.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/06/21/tssjs-prague-afterthoughts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Live: Stephan Janssen TSSJS Keynote on RIA</title>
		<link>http://dow.ngra.de/2008/06/18/live-stephan-janssen-tssjs-keynote-on-ria/</link>
		<comments>http://dow.ngra.de/2008/06/18/live-stephan-janssen-tssjs-keynote-on-ria/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 06:59:16 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[report]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=124</guid>
		<description><![CDATA[What is RIA? &#8220;Old body with a new face&#8221; &#8212; just a new client slammed on top of the same old applications server. The obligatory Wikipedia quote is &#8220;too vague&#8221; :) The spectrum of RIA apparently includes &#8220;Internet-enabled client&#8221;, &#8220;Smart client&#8221; and &#8220;Web 2.0&#8243;. Turns out the &#8220;Smart client&#8221; refers to the JavaFX ability to [...]]]></description>
			<content:encoded><![CDATA[<p>What is RIA? &#8220;Old body with a new face&#8221; &#8212; just a new client slammed on top of the same old applications server. The obligatory Wikipedia quote is &#8220;too vague&#8221; :) The spectrum of RIA apparently includes &#8220;Internet-enabled client&#8221;, &#8220;Smart client&#8221; and &#8220;Web 2.0&#8243;.</p>
<p>Turns out the &#8220;Smart client&#8221; refers to the JavaFX ability to be dragged from the applet in the browser to become a desktop app. AFAIK this wasn&#8217;t even demoed for JavaFX specially, but for 1.6u10 applets, so this one misses the target for me. And as for the JavaFX &#8220;unified deployment model&#8221; we&#8217;ll see <em>that</em> when it actually gets there. Until then I&#8217;ll remain skeptical.</p>
<p>The keynote will present same case study for AIR, JavaFX, Flex and GWT. A Silverlight demos exists, but isn&#8217;t included in the talk.</p>
<p>Going through the data exchange formats: HTML, XML, JSON and binary. <a href="http://www.caucho.com/resin-3.0/protocols/hessian.xtp">Caucho Hessian</a> gets a mention as the binary protocol that works over HTTP. Also Adobe <a href="http://www.onflex.org/ted/2007/11/abcs-of-amf.php">AMF</a>. Apparently <a href="http://www.exadel.com/web/portal/flamingo">Flamingo</a> exposes existing services via binary protocol in the Adobe space. Doesn&#8217;t binary have 4/3 overhead on top of HTTP? Is it really worth it?</p>
<p>Now going through communication strategies: RPC, WS-*, REST and JMS. In Servlets 2.0 you can use JAX-RS to expose your POJOs via REST (wow! doesn&#8217;t RoR do that since, like, forever?). Spring folks have their own solution, seems like they now ignore the Sun folks altogether. JMS isn&#8217;t really a comm protocol, so I don&#8217;t get how it fits here. Apparently just to mention that <a href="http://labs.adobe.com/technologies/blazeds/">Adobe BlazeDS</a> supports JMS. Everyone else would use Comet.</p>
<p>The case study is (of course!) <a href="http://www.parleys.com/display/PARLEYS/Home#page=Home">Parlleys.com</a>. </p>
<p>The first version was done in AJAX. Problems with that included:</p>
<ul>
<li>Back-button support. People do get used to its quirks nowadays.</li>
<li>Cross platform/browser support. JavaScript on Internet Explorer sucks, especially on Macs.</li>
<li>Securing AJAX. Someone voted 100 stars on one of the talks by calling the server-side directly. This isn&#8217;t really a problem with AJAX, man :) That will come with any server-side application.</li>
</ul>
<p>The next variant is still AJAX, but using GWT. Lots of sliding in and sliding out, prettier interface. The GWT experience:</p>
<ul>
<li>It&#8217;s Java! Woohoo!</li>
<li>Back button works. Might have mentioned that you have to define the back actions pretty much manually. Also problems on Internet Explorer.</li>
<li>Works on different browsers out-of-the-box. As long as you don&#8217;t need something arcane :)</li>
<li>Sucks: GWT sites not indexed by Google. Supposedly fixed in GWT 1.5.</li>
</ul>
<p>Flex is next. Demo looks identical to GWT. The big difference is that Flash can go full screen (erm, you can go full screen with a browser as well, what&#8217;s up with that?). As soon as the AIR application is launched the browser app will change to accommodate the extra desktop settings. You can download the talks for playing offline and so on. Pretty fancy.</p>
<ul>
<li>Flex/AIR just works</li>
<li>Lot&#8217;s of different animations available</li>
<li>Lots of UI components</li>
<li>Bookmark and history support</li>
<li>Good Eclipse support</li>
<li>Bad: Hard to do unit tests</li>
<li>Bad: Different deployment strategies for desktop and web.</li>
<li>Bad: Not Google friendly. Hacks possible, but not too easy.</li>
<li>Bad: No socket listeners so couldn&#8217;t implement P2P.</li>
</ul>
<p>Stephan obviously likes Adobe products a lot and it feels in the talk. E.g. one could likely develop a quite similar offline support for downloading and playing talks on top of GWT with Google Gears, but that&#8217;s not mentioned in the talk. However I&#8217;m yet to see the JavaFX demo.</p>
<p>The JavaFX demo looks slightly cooler. JavaFX will have native support for Flash video codec, good stuff. Strongly typed and Java-like. Swing, Java2D and Java3D APIs available. Animation and effect library on top of that. Would be much cooler if all this stuff wouldn&#8217;t be just one paper&#8230; No mentions of the offline functionality as well. Obviously possible, but would be interesting to know how transition from applet to desktop and from online to offline works. Don&#8217;t think that anyone outside Sun knows that yet :)</p>
<p>In the end a very cool demo of the actual talk publishing using Parleys. You can add both the video and slides and likely audio and arrange them on a usual timeline. Can&#8217;t do that with a web client :)</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/06/18/live-stephan-janssen-tssjs-keynote-on-ria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Days at the Great Indian Developer Summit</title>
		<link>http://dow.ngra.de/2008/05/20/first-days-in-india/</link>
		<comments>http://dow.ngra.de/2008/05/20/first-days-in-india/#comments</comments>
		<pubDate>Tue, 20 May 2008 08:55:19 +0000</pubDate>
		<dc:creator>Rein Raudjärv</dc:creator>
				<category><![CDATA[report]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/2008/05/20/first-days-in-india/</guid>
		<description><![CDATA[This is a guest post by Rein Raudjärv, who at the moment is with Toomas Römer at the Great Indian Developer Summit. Edited by Jevgeni Kabanov for brevity and to fit with other blog content. Our trip started after a big birthday party. I slept in (my phone battery ran out of power) and got [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is a guest post by Rein Raudjärv, who at the moment is with Toomas Römer at the Great Indian Developer Summit. Edited by Jevgeni Kabanov for brevity and to fit with other blog content.</em></p>
<p>Our trip started after a big birthday party. I slept in (my phone battery ran out of power) and got no time for breakfast or anything. There were almost 25 extra kilos of luggage and with a re-check-in to a local Indian airline in Delhi we decided to leave our back wall and some T-shirts in the Tallinn office. We got to Finland quickly and easily.</p>
<p>The flight to Delhi took about 7 hours. The landing at about midnight was delayed because of the thunderstorm above the airport. The first impression of India was high temperature (above 30 degrees Celsius). There already were guys waiting at the airport waiting to carry your luggage to the nearest (his cousin&#8217;s) taxi. We had to use the taxi to get to the next airport. People were sleeping outside the building &#8212; we didn&#8217;t understand why they were not allowed to enter. Inside most of people including the personal was sleeping as well.</p>
<p>We got to the flight to Bangalore (officially named Bangaluru) in the second morning. The taxi trip to the hotel illustrates the Indian traffic in the daylight. The number of lanes is very dynamic. They have lot of scooters and 3-wheel drives. I also saw a cow sleeping on the sidewalk. Nobody was interrupting the holy animal. In general India is not so clean. At the same time people are quite friendly and happy to help us.</p>
<p>The first day at the conference started with several hours setting up the booth. We had only a table, a chair and a title &#8220;ZEROTU<strong>M</strong>AROUND&#8221; waiting for us and no WiFi in sight. We asked for extra tables and a plasma TV. Trying out different things we finally came up with the final booth layout. The title and WiFi got fixed during the day.  Except for the slow network connection, hotness (felt like 30 degrees inside) and lacking of toilette paper everything went really well.  During the day there were several folks enjoying our cartoon and giving some fliers in front of our booth.</p>
<p><img src="http://zeroturnaround.com/~rein/pub/india/IMG_3158.JPG" alt="Great Indian Developer Summit" height="375" width="500" /></p>
<p><img src="http://zeroturnaround.com/~rein/pub/india/IMG_3161.JPG" alt="Our initial booth" height="375" width="500" /></p>
<p><img src="http://zeroturnaround.com/~rein/pub/india/IMG_3173.JPG" alt="Our booth that is ready" height="375" width="500" /></p>
<p><img src="http://zeroturnaround.com/~rein/pub/india/IMG_3176.JPG" alt="Indian girls with fliers in front of us" height="375" width="500" /></p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/05/20/first-days-in-india/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scala to get binary compatibility</title>
		<link>http://dow.ngra.de/2008/05/08/scala-to-get-binary-compatibility/</link>
		<comments>http://dow.ngra.de/2008/05/08/scala-to-get-binary-compatibility/#comments</comments>
		<pubDate>Thu, 08 May 2008 03:21:40 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[report]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/2008/05/08/scala-to-get-binary-compatibility/</guid>
		<description><![CDATA[I sat down with Martin Odersky yesterday and talked about the issues that bothered me in Scala. Turns out that the main reason for the lack of binary compatibility between releases are the concrete methods in traits. At the moment Scala compiler needs to generate stubs in every class mixing in those traits, which means [...]]]></description>
			<content:encoded><![CDATA[<p>I sat down with Martin Odersky yesterday and talked about the issues that <a href="http://dow.ngra.de/2008/03/04/where-is-scala-heading/">bothered me</a> in Scala. Turns out that the main reason for the lack of binary compatibility between releases are the concrete methods in traits. At the moment Scala compiler needs to generate stubs in every class mixing in those traits, which means that adding a fresh concrete method requires a full recompile against the trait. </p>
<p>However this can be solved by adding a runtime postprocessor that inserts the stub into class bytecode during classloading. Hopefully this functionality will be enabled in some next version of Scala and we can look forward to distributing the Scala libraries in JARs. I am glad to say that Martin is a great guy and is really committed to making Scala language stable so that the community can build on it without being afraid of breaking changes.</p>
<p>Martin also said that the latest version of Scala implements the stable naming of closure classes that <a href="http://www.nabble.com/Stable-naming-of-anonymous-classes-td14342902.html#a14342902">David requested</a> some time ago. This means that JavaRebel can now reload even more changes to Scala programs. Kudos to the Scala team.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/05/08/scala-to-get-binary-compatibility/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

