<?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; review</title>
	<atom:link href="http://dow.ngra.de/category/review/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>What I saw at Devops Talks Back event in London</title>
		<link>http://dow.ngra.de/2011/07/27/what-i-saw-at-devops-talks-back-event-in-london/</link>
		<comments>http://dow.ngra.de/2011/07/27/what-i-saw-at-devops-talks-back-event-in-london/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 08:57:44 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=1482</guid>
		<description><![CDATA[Just had a great evening at the Devops Talks Back event in London. My smartphone was dumb enough not to update its timezone information on arrival to UK and I was 2 hours early. Luckily the event took place at a mini Google like office from the Forward guys, besides coffee and drinks I was [...]]]></description>
			<content:encoded><![CDATA[<p>Just had a great evening at the <a href="https://londondevops.eventwax.com/devops-talks-back">Devops Talks Back event</a> in London. My smartphone was dumb enough not to update its timezone information on arrival to UK and I was 2 hours early. Luckily the event took place at a mini Google like office from the <a href="http://www.forward.co.uk/">Forward</a> guys, besides coffee and drinks I was asked if I needed a laptop to kill time :)</p>
<p>I chatted with the early arrived organizer and speakers about Ruby, Java deployments and British comedy sketches (<a href="http://en.wikipedia.org/wiki/Big_Train">Big Train</a>, <a href="http://en.wikipedia.org/wiki/Little_britain">Little Britain</a> and <a href="http://en.wikipedia.org/wiki/Alan_Partridge">Alan Partridge</a>).<br />
<span id="more-1482"></span><br />
The event had 2 presentations. One was about the <a href="http://aframe.com/">Aframe</a>, doing quite a niche stuff, they build a system for online video production (editing, transcoding, tagging). The presenter, <a href="http://twitter.com/#!/jonlives">John Cowie</a> went over the technical hurdles that they have had to cross to get their product out the door. Also he had a positive story to tell that it is possible to shorten the gap between the ops and dev and thanks to that he is abe to take vacations without having interruptions as he used to (the London underground still told me to Mind the Gap).</p>
<p>The next presenter, <a href="http://twitter.com/#!/johnleach">John Leach</a> talked about the <a href="http://ceph.newdream.net/">Ceph</a> project. A posix compliant distributed network storage and filesystem (think of HDFS, GFS) that happens to be OSS and is quickly maturing. We also got a fun history of the network storage stack. I was lucky enough to have read <a href="http://borthakur.com/ftp/RealtimeHadoopSigmod2011.pdf">Apache Hadoop Goes Realtime at Facebook</a> quite recently and was able to chime in couple of comments at later discussions.</p>
<p>After the presentations there were random chats and we visited a local pub. It was a great no pressure event where you can meet people with similar interest, either technical, comedy wise or board game wise (met a 9kyu <a href="http://en.wikipedia.org/wiki/Go_(game)">Go</a> player). The venue was really comfy and cosy.</p>
<p>PS. It was the second office I&#8217;ve seen so far that has a Go set, the first is <a href="http://www.zeroturnaround.com/">ZeroTurnaround</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2011/07/27/what-i-saw-at-devops-talks-back-event-in-london/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MailChimp &#8211; No More Bananas for You</title>
		<link>http://dow.ngra.de/2011/06/03/mailchimp-no-more-bananas-for-you/</link>
		<comments>http://dow.ngra.de/2011/06/03/mailchimp-no-more-bananas-for-you/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 15:05:52 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[rant]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=1437</guid>
		<description><![CDATA[I have not ranted for some time but I just heard and saw so much crap about MailChimp that I just had to open up a draft here and let some steam out. MailChimp was my choice of newsletter software years ago and it worked fine if you leave out some quirks here and there. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://dow.ngra.de/wp-content/uploads/2011/06/noMoreBananas.jpg" alt="" title="No More Bananas" width="238" height="136" class="alignright size-full wp-image-1440" style="margin-left:10px"/>I have not ranted for some time but I just heard and saw so much crap about <a href="http://mailchimp.com/">MailChimp</a> that I just had to open up a draft here and let some steam out. MailChimp was my choice of newsletter software years ago and it worked fine if you leave out some quirks here and there. As the usage has grown it has been brought to my attention that this software does not scale. Throughout the conversations I’ve also discovered a way how to block any account on MailChimp. So lets start.<br />
<span id="more-1437"></span></p>
<h2>Scaling</h2>
<p>Throughout the years you’ve built multiple lists. Your data has grown. You have a big announce to make and you would like to send everyone a message. You make a campaign, duplicate this to the lists and hit send on all of them. You get couple of angry replies that they received multiple messages. Oh, okay, they were on multiple lists, I&#8217;m sure there is a solution for this.</p>
<p>The chimp says that use groups instead of lists. Have a master list with multiple groups and then you won&#8217;t have the problem of people receiving multiple emails of the campaign. Okay, lets give it a try. You create the list, you create the groups, you populate the groups. Some people are on a single group, some are on multiple groups. You send out a master campaign and you see that couple of people unsubscribed.  Thats cool. Then you find out that they were unsubscribed from all the groups and unsubscription did not even let them choose a group. WTF?</p>
<p>You ask the chimp for help and they say that this is a feature. Choose one, a granular approach or bazooka but not both. </p>
<h2>Blocking Any Account at MailChimp</h2>
<p>Scenario: you are a happy chimp and sending out campaigns, everything is fun and cool until one day you are unable to log into your account. You get a message that your account has been blocked because you’re most probably a spammer. Wow, how did that happen?</p>
<p>You send an email to their support and find out that they found your address from <a href="http://www.stopforumspam.com/">stopforumspam.com</a> and they block your account automatically. It does not matter how you ended up on that website ( in this case you have not even registered a forum account with this email address for ages ). You send them one more email and ask what provider do they recommend to use now that this bad luck hit you. They kindly reinstate your account. Weeehah!</p>
<p>So if you want to block somebody from MailChimp, get their email address to one of these stop spam sites.  For quickest results see <a href="http://www.stopforumspam.com/add">stopforumspam.com/add</a> You can be sure that they can’t do anything for 48 hours.</p>
<h2>Conclusions</h2>
<p>Besides the two scenarios that I’ve mentioned I’ve had many more smaller issues with MailChimp. From not being able to call them, not being able to bulk delete people from large groups, not being able to remove email header images, not seeing email addresses of shared accessees etc. </p>
<p>The lists are dumb and cannot talk to each other without extensive scripts from infra wizards. Likewise, even if you are a dummy yourself, you cannot actually communicate with anyone at MC (they do not use telephone technology at all) except via email or Live Chat. Also, you frequently get signed out every 30 minutes whether you are in the middle of typing an email campaign or just sitting there wondering why you chose MC all those years ago&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2011/06/03/mailchimp-no-more-bananas-for-you/feed/</wfw:commentRss>
		<slash:comments>6</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>COBOL blog platform</title>
		<link>http://dow.ngra.de/2008/04/01/cobol-blog-platform/</link>
		<comments>http://dow.ngra.de/2008/04/01/cobol-blog-platform/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 11:59:42 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[review]]></category>
		<category><![CDATA[cobol]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javarebel]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/2008/04/01/cobol-blog-platform/</guid>
		<description><![CDATA[Several weeks ago, while working on JavaRebel AI Module, we accidentally gave it access to our web server. Before we found out it rewritten all of our blog platform in COBOL. We are not sure where did it learn to program that, but when we tried the new platform, it was excellent. Not only is [...]]]></description>
			<content:encoded><![CDATA[<p>Several weeks ago, while working on <a href="http://www.zeroturnaround.com/blog/javarebel-goes-ai/">JavaRebel AI Module</a>, we accidentally gave it access to our web server. Before we found out it rewritten all of our blog platform in <a href="http://en.wikipedia.org/wiki/COBOL">COBOL</a>. We are not sure where did it learn to program that, but when we tried the new platform, it was excellent. Not only is it a SOA-based RIA, but it&#8217;s fully written using REST, JSON and CAPS. </p>
<p>In fact it is now our firm belief that with technologies like that COBOL will make a return and become the language of choice for web development. I mean who needs local variables, recursion, dynamic memory allocation, or structured programming constructs when we have a language that reads like plain English. All the real programmers know, how important is to have code that reads well, and our new blog platform provides twice the scalability of Java on half the hardware to boot.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/04/01/cobol-blog-platform/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mozilla Prism gets an overhaul</title>
		<link>http://dow.ngra.de/2008/03/22/mozilla-prism-gets-an-overhaul/</link>
		<comments>http://dow.ngra.de/2008/03/22/mozilla-prism-gets-an-overhaul/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 22:11:47 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[review]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/2008/03/22/mozilla-prism-gets-an-overhaul/</guid>
		<description><![CDATA[Although two weeks late, I finally noticed that Mozilla Prism has been updated. Mozilla Prism is a &#8220;One Site Browser&#8221;, which is to say a browser started from your desktop tied to one particular web site. I have been using it since the first release, mainly to separate the Google Mail, Reader and Calendar windows [...]]]></description>
			<content:encoded><![CDATA[<p>Although two weeks late, I finally noticed that <a href="http://labs.mozilla.com/2008/03/major-update-to-prism-first-prototype-of-browser-integration/">Mozilla Prism has been updated</a>. Mozilla Prism is a &#8220;One Site Browser&#8221;, which is to say a browser started from your desktop tied to one particular web site. I have been using it since the first release, mainly to separate the Google Mail, Reader and Calendar windows from the rest of my browsing experience.</p>
<p>The new version is a significant reworking of Prism. First of all you no longer have to install a 6.6 Mb application in addition to Firefox. Now you can just download a 500 Kb Firefox extension, which will start Prism as a particular Firefox profile. And you can create the desktop shortcuts to your web site in one click using &#8220;Tools -> Convert Website to Application&#8221;.</p>
<p>Secondly Prism will finally pick up the favicons that the website is using and use it both as shortcut icon and (drumroll!) the application window icon! Before you had to download the icons manually and it still would use the Prism icon in the taskbar, which made it much harder to distinguish the windows. Having the GMail icon in the taskbar is just what I&#8217;ve been waiting for. <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=420661">Now, if only it would change on new mail&#8230;</a></p>
<p>However, no matter the changes, I&#8217;m still stuck with a major annoyance &#8212; no Firefox shortcuts work. And since half the sites on Internet do not optimize for 1680&#215;1050, my first reaction in Firefox is often Ctrl+, to increase the font size. Well, hopefully they hit it in the next release, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=424578">you hear that, Mozilla?</a></p>
<p>P.S. I&#8217;m making this post from my nifty dow.ngra.de admin browser app, <a href="http://images.google.com/images?q=downgrade+filetype%3Aico">now where do I find an icon for that?</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/03/22/mozilla-prism-gets-an-overhaul/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin Format</title>
		<link>http://dow.ngra.de/2008/03/19/wordpress-plugin-format/</link>
		<comments>http://dow.ngra.de/2008/03/19/wordpress-plugin-format/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 12:20:12 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[opinion]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[php wordpress gsoc]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/2008/03/19/wordpress-plugin-format/</guid>
		<description><![CDATA[WP plugins (like the others already have — FF extensions, Eclipse plugins, Google Gadgets, WARs …) should have a solid structure so that the management of the plugins could be automated. One click install, update notifications or automatic updates, public repositories and other cool features can be built upon this.]]></description>
			<content:encoded><![CDATA[<p>Google Summer of Code has announced this years&#8217; OSS projects that have been accepted to the program. While going through the list I stumbled upon some features that I would really like to have in WordPress, like <a href="http://wordpress.org/extend/ideas/topic.php?id=30">Plugin Update Notification</a>, <a href="http://wordpress.org/extend/ideas/topic.php?id=31">One-click installation of themes/plugins</a> and <a href="http://wordpress.org/extend/ideas/topic.php?id=891">this</a>, <a href="http://wordpress.org/extend/ideas/topic.php?id=129">that</a> and <a href="http://wordpress.org/extend/ideas/topic.php?id=702">this</a>. They all have something in common, they all require a better plugin format!</p>
<p>There are tons of plugins out there and only a couple support these features. Why? Well, if you look at the <a href="http://codex.wordpress.org/Writing_a_Plugin">Writing a Plugin</a> documentation you see that a plugin can be packaged absolutely in any possible way.</p>
<p>Plugins can be zip, rar, gz, bz2 etc. archives. They can contain any number of subdirectories that the administrator has to copy to certain other folders and the requirement of meta information is quite relaxed. The automation of installation, upgrade, deletion, versioning for all the plugins is impossible with such relaxed rules.</p>
<p>WP plugins (like the others already have &#8212; FF extensions, Eclipse plugins, Google Gadgets, WARs &#8230;) should have a solid structure so that the management of the plugins could be automated. One click install, update notifications or automatic updates, public repositories and other cool features can be built upon this.</p>
<p>Besides all the other great ideas already posted I&#8217;ve submitted <a href="http://wordpress.org/extend/ideas/topic.php?id=1265">one that would try to address these problems from more ground up</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/03/19/wordpress-plugin-format/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aptana Jaxer or sliced bread?</title>
		<link>http://dow.ngra.de/2008/02/19/aptana-jaxer/</link>
		<comments>http://dow.ngra.de/2008/02/19/aptana-jaxer/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 16:45:51 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[review]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/2008/02/19/aptana-jaxer/</guid>
		<description><![CDATA[Sometimes a technology appears that is just so damn cool you are amazed. More often than not the ideas behind it can be quite simple. Aptana Jaxer is exactly such a technology. There is nothing new about having a server-side API. There is nothing new about building applications in HTML and JavaScript. The genius part [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes a technology appears that is just so damn cool you are amazed. More often than not the ideas behind it can be quite simple.</p>
<p><a href="http://www.aptana.com/jaxer">Aptana Jaxer</a> is exactly such a technology. There is nothing new about having a server-side API. There is nothing new about building applications in HTML and JavaScript. The genius part is running <a href="http://en.wikipedia.org/wiki/Gecko_(layout_engine)">Mozilla engine</a> on the server-side and having access to full server resources from the browser via a controlled environment with no extra layers.</p>
<p>As far as I understood the communication between server and client is done by:</p>
<ul>
<li>DOM updates are seamlessly propagated from the server to the client</li>
<li>Function calls can be proxied to call to the server. All marshalling is done automagically</li>
</ul>
<p>This pretty much means that code runs seamlessly in a mixed, secure environment.</p>
<p>Although the &#8220;runat&#8221; attribute that controls whether code is run server-side or client-side can be <a href="http://www.aptana.com/node/260">a bit unlogical at first</a>, the setup can allow to build powerful applications with only one (count it, one) technology &#8212; HTML and JavaScript. And this is the technology you have to use anyway to even deploy something on the web.</p>
<p>Of course &#8220;the one technology&#8221; suffers from being dynamically typed and generally known for its quirkiness, but with <a href="http://www.ecmascript.org/es4/spec/overview.pdf">JavaScript 2.0</a> support on the way to Mozilla and good IDE support (which Aptana is in a good position to provide) this technology might yet give a fresh meaning to the word web application.</p>
<p>An interesting question I&#8217;d like to ask from the <a href="http://www.aptana.com/blog">Aptana developers</a> is if we can add a third environment to the mix &#8212; desktop applications? Having the same API to use on the server, in the browser and (with less restrictions) on the desktop could give Adobe AIR a run for their money. </p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/02/19/aptana-jaxer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

