<?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>Netuality &#187; Google</title>
	<atom:link href="http://www.netuality.ro/tag/google/feed" rel="self" type="application/rss+xml" />
	<link>http://www.netuality.ro</link>
	<description>Taming the big, bad, nasty websites</description>
	<lastBuildDate>Mon, 07 Nov 2011 16:36:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Comic strips and contextual advertising</title>
		<link>http://www.netuality.ro/comic-strips-and-contextual-advertising/andeverythingelse/20100613</link>
		<comments>http://www.netuality.ro/comic-strips-and-contextual-advertising/andeverythingelse/20100613#comments</comments>
		<pubDate>Sun, 13 Jun 2010 07:44:22 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.netuality.ro/?p=229</guid>
		<description><![CDATA[As seen today on Google Reader. A strip is a strip is a strip is a strip:]]></description>
			<content:encoded><![CDATA[<p>As seen today on Google Reader. A strip is a strip is a strip is a strip:</p>
<p style="text-align: center;"><img class="size-full wp-image-230 aligncenter" title="dilbert_strips" src="http://www.netuality.ro/wp-content/uploads/2010/06/dilbert_strips.jpg" alt="" width="500" height="337" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/comic-strips-and-contextual-advertising/andeverythingelse/20100613/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linkdump: Coop, HBase performance and a bit of Warcraft</title>
		<link>http://www.netuality.ro/linkdump-coop-hbase-performance-and-a-bit-of-warcraft/linkdump/20100427</link>
		<comments>http://www.netuality.ro/linkdump-coop-hbase-performance-and-a-bit-of-warcraft/linkdump/20100427#comments</comments>
		<pubDate>Tue, 27 Apr 2010 19:35:11 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Linkdump]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[Coop]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Warcraft]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.netuality.ro/?p=207</guid>
		<description><![CDATA[Riptano is to Cassandra what Cloudera is to Hadoop or Percona to MySQL. Mmmkey? A great, insightful post from Pingdom (as usual) allows us to take a peek behind the doors at largest web sites in the world, just by reading selected stuff from their respective developer blogs. Yahoo decreased data-center cooling costs compared to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://spyced.blogspot.com/2010/04/and-now-for-something-completely.html" target="_blank">Riptano</a> is to Cassandra what Cloudera is to Hadoop or Percona to MySQL. Mmmkey?</p>
<p>A great, insightful post from Pingdom (as usual) allows us to <a href="http://royal.pingdom.com/2010/04/14/peeking-behind-the-scenes-of-the-worlds-largest-sites/" target="_blank">take a peek</a> behind the doors at largest web sites in the world, just by reading selected stuff from their respective developer blogs.</p>
<p>Yahoo decreased data-center cooling costs compared to power costs from 50 cents/dollar to only one cent/dollar. This is obtained on their most recent <a href="http://www.datacenterknowledge.com/archives/2010/04/26/yahoo-computing-coop-the-shape-of-things-to-come/" target="_blank">Yahoo Computing Coop</a> data-center built in Lockport, New York.</p>
<blockquote><p>The data center operates with no chillers, and will require water for  only a handful of days each year. Yahoo projects that the new facility  will operate at a Power Usage Effectiveness (PUE) of 1.1, placing it  among the most efficient in the industry. [...]</p>
<p>If it looks like a chicken coop, it’s because some of the design  principles were adapted from …. well, chicken coops. “Tyson Foods has  done research  involving facilities with the heat source in the center  of the  facility, looking at how to evacuate the hot air,” said  Noteboom. “We applied a lot of similar  thought to our data center.”</p>
<p>The Lockport site is ideal for fresh air cooling, with a climate that  allows Yahoo to operate for nearly the entire year without using air  conditioning for its servers.</p></blockquote>
<p>High Scalability blog <a href="http://highscalability.com/blog/2010/4/27/paper-dapper-googles-large-scale-distributed-systems-tracing.html" target="_blank">dissects</a> a paper describing <strong>Dapper</strong>, Google&#8217;s tracing system used to instrument all the components of a software system in order to understand its behavior. Immensely interesting:</p>
<blockquote><p>As you might expect Google has produced and elegant and well thought out  tracing system. In many ways it is similar to other tracing systems,  but it has that unique Google twist. A tree structure, probabilistically  unique keys, sampling, emphasising common infrastructure insertion  points, technically minded data exploration tools, a global system  perspective, MapReduce integration, sensitivity to index size,  enforcement of system wide invariants, an open API—all seem very  Googlish.</p></blockquote>
<p>On my favorite blog <img src='http://www.netuality.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <a href="http://hstack.org/" target="_blank">HStack.org</a> Andrei wrote a <a href="http://hstack.org/hbase-performance-testing/" target="_blank">great post about real-life performance testing of HBase</a>:</p>
<blockquote><p>The numbers are the tip of the iceberg; things become <strong>really  interesting</strong> once we start looking under the hood, and  interpreting the results.</p>
<p>When investigating performance issues you have to assume that  “everybody lies”. It is crucial that you don’t stop at a simple capacity  or latency result; you need to investigate every layer: the performance  tool, your code, their code, third-party libraries, the OS and the  hardware. Here’s how we went about it:</p>
<p>The first potential liar is your test, then your test tool – they  could both have bugs so you need to double-check.</p></blockquote>
<p>But the most interesting distributed system of the week is World of Warcraft. Ars Technica <a href="http://arstechnica.com/gaming/news/2010/04/earning-your-sword-a-picture-tour-of-blizzards-offices.ars" target="_blank">describes a tour of the Blizzard campus</a> and here&#8217;s a peek at the best NOC screen ever:</p>
<p style="text-align: center;"><img class="size-full wp-image-208 aligncenter" title="wowactivity" src="http://www.netuality.ro/wp-content/uploads/2010/04/wowactivity.jpg" alt="" width="500" height="378" /></p>
<p style="text-align: left;">For the hooorde!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/linkdump-coop-hbase-performance-and-a-bit-of-warcraft/linkdump/20100427/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google&#8217;s Map/Reduce patent and impact on Hadoop: none expected</title>
		<link>http://www.netuality.ro/googles-mapreduce-patent-and-impact-on-hadoop-none-expected/articles/20100122</link>
		<comments>http://www.netuality.ro/googles-mapreduce-patent-and-impact-on-hadoop-none-expected/articles/20100122#comments</comments>
		<pubDate>Fri, 22 Jan 2010 16:39:02 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[Map/Reduce]]></category>
		<category><![CDATA[patent]]></category>

		<guid isPermaLink="false">http://www.netuality.ro/?p=161</guid>
		<description><![CDATA[From the GigaOm analysis: Fortunately, for them, it seems unlikely that Google will take to the courts to enforce its new intellectual property. A big reason is that “map” and “reduce” functions have been part of parallel programming for decades, and vendors with deep pockets certainly could make arguments that Google didn’t invent MapReduce at [...]]]></description>
			<content:encoded><![CDATA[<p>From the <a href="http://bit.ly/4HKsLc" target="_blank">GigaOm analysis</a>:</p>
<blockquote><p>Fortunately, for them, it seems unlikely that Google will take to the courts to enforce its new intellectual property. A big reason is that “map” and “reduce” functions have been part of parallel programming for decades, and vendors with deep pockets certainly could make arguments that Google didn’t invent MapReduce at all.</p>
<p>Should Hadoop come under fire, any defendants (or interveners like Yahoo and/or IBM) could have strong technical arguments over whether the open-source Hadoop even is an infringement. Then there is the question of money: Google has been making plenty of it without the patent, so why risk the legal and monetary consequences of losing any hypothetical lawsuit? Plus, Google supports Hadoop, which lets university students learn webscale programming (so they can become future Googlers) without getting access to Google’s proprietary MapReduce language.</p>
<p>[...]</p>
<p>A Google spokeswoman emailed this in response to our questions about why Google sought the patent, and whether or not Google would seek to enforce its patent rights, attributing it to Michelle Lee, Deputy General Counsel:</p>
<p>“Like other responsible, innovative companies, Google files patent applications on a variety of technologies it develops. While we do not comment about the use of this or any part of our portfolio, we feel that our behavior to date has been inline with our corporate values and priorities.”</p></blockquote>
<p>From <a href="http://bit.ly/67HA0e" target="_blank">Ars Technica</a>:</p>
<blockquote><p>Hadoop isn&#8217;t the only open source project that uses MapReduce technology. As some readers may know, I&#8217;ve recently been experimenting with CouchDB, an open source database system that allows developers to perform queries with map and reduce functions. Another place where I&#8217;ve seen MapReduce is Nokia&#8217;s QtConcurrent framework, an extremely elegant parallel programming library for Qt desktop applications.</p>
<p>It&#8217;s unclear what Google&#8217;s patent will mean for all of these MapReduce adopters. Fortunately, Google does not have a history of aggressive patent enforcement. It&#8217;s certainly possible that the company obtained the patent for &#8220;defensive&#8221; purposes. Like virtually all major software companies, Google is frequently the target of patent lawsuits. Many companies in technical fields attempt to collect as many broad patents as they can so that they will have ammunition with which to retaliate when they are faced with patent infringement lawsuits.</p>
<p>Google&#8217;s MapReduce patent raises some troubling questions for software like Hadoop, but it looks unlikely that Google will assert the patent in the near future; Google itself uses Hadoop for its Code University program.</p>
<p>Even if Google takes the unlikely course of action and does decide to target Hadoop users with patent litigation, the company would face significant resistance from the open source project&#8217;s deep-pocketed backers—including IBM, which holds the industry&#8217;s largest patent arsenal.</p>
<p>Another dimension of this issue is the patent&#8217;s validity. On one hand, it&#8217;s unclear if taking age-old principles of functional software development and applying them to a cluster constitutes a patentable innovation.</p></blockquote>
<p>Still nothing from the big analysts, Gartner and the gang&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/googles-mapreduce-patent-and-impact-on-hadoop-none-expected/articles/20100122/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google: sorry, but Lisp/Ruby/Erlang not on the menu</title>
		<link>http://www.netuality.ro/google-sorry-but-lisprubyerlang-not-on-the-menu/tools/20080529</link>
		<comments>http://www.netuality.ro/google-sorry-but-lisprubyerlang-not-on-the-menu/tools/20080529#comments</comments>
		<pubDate>Wed, 28 May 2008 21:35:00 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.netuality.ro/google-sorry-but-lisprubyerlang-not-on-the-menu/tools/20080529</guid>
		<description><![CDATA[Yes, language propaganda again. Ain&#8217;t it fun ? Here comes a nice quote from the latest Steve Yegge post (read it entirely if you have the time, it&#8217;s both fun and educational &#8211; at least for me). So, there: I made the famously, horribly, career-shatteringly bad mistake of trying to use Ruby at Google, for [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, language propaganda again. Ain&#8217;t it fun ?</p>
<p>Here comes a nice quote from the <a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html" target="_blank">latest Steve Yegge post</a> (read it entirely if you have the time, it&#8217;s both fun and educational &#8211; at least for me). So, there:</p>
<p><em>I made the famously, horribly, career-shatteringly bad mistake of trying to use Ruby at Google, for this project. And I became, very quickly, I mean almost overnight, the Most Hated Person At Google. And, uh, and I&#8217;d have arguments with people about it, and they&#8217;d be like Nooooooo, WHAT IF&#8230; And ultimately, you know, ultimately they actually convinced me that they were right, in the sense that there actually <strong><em>were</em> a few things</strong>. There were some taxes that I was imposing on the systems people, where they were gonna have to have some maintenance issues that they wouldn&#8217;t have. [...] But, you know, <strong>Google&#8217;s all about getting stuff done</strong>.</em></p>
<p><em>[...]</em></p>
<p><em><strong>Is it allowed at Google to use Lisp and other languages?</strong></p>
<p>No. No, it&#8217;s not OK. <strong>At Google you can use C++, Java, Python, JavaScript</strong>&#8230; I actually found a legal loophole and used server-side JavaScript for a project.</em></p>
<p>Mmmmm &#8230; key ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/google-sorry-but-lisprubyerlang-not-on-the-menu/tools/20080529/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Java going down, Python way up, and more &#8230;</title>
		<link>http://www.netuality.ro/java-going-down-python-way-up-and-more/tools/20080524</link>
		<comments>http://www.netuality.ro/java-going-down-python-way-up-and-more/tools/20080524#comments</comments>
		<pubDate>Sat, 24 May 2008 14:36:19 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.netuality.ro/java-going-down-python-way-up-and-more/tools/20080524</guid>
		<description><![CDATA[According to O&#8217;Reilly Radar, sales of Java books have declined in the last 4 years by almost 50%. C# is selling more books from year to year and will probably level up with Java in 2008. Javascript is on the rise (due to AJAX, for sure) and PHP is on a surprising decrease path (although [...]]]></description>
			<content:encoded><![CDATA[<p>According to <a href="http://radar.oreilly.com/archives/2008/03/state-of-the-computer-book-mar-23.html">O&#8217;Reilly Radar</a>, sales of Java books have <a href="http://www.theserverside.com/news/thread.tss?thread_id=49341" target="_blank">declined</a> in the last 4 years by almost 50%. C# is selling more books from year to year and will probably level up with Java in 2008. Javascript is on the rise (due to AJAX, for sure) and PHP is on a surprising decrease path (although the job statistics indicate quite the contrary).</p>
<p style="text-align: center"><img src="http://www.netuality.ro/wp-content/uploads/2008/05/languages.gif" alt="According to O’Reilly Radar, sales of Java books have declined in the last 4 years by almost 50%" /></p>
<p>In 2007, the number of sold Ruby books was larger than the number of Python books. In their article they qualify Ruby as being a &#8220;mid-major programming language&#8221; and Python as &#8220;mid-minor programming language&#8221;. However, after the announcement of <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a> the number of Python downloads from ActiveState has <strong><a href="http://blogs.activestate.com/activestate/2008/05/number-of-activ.html" target="_blank">tripled</a></strong> in May. This should become visible in the book sales statistics, pretty soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/java-going-down-python-way-up-and-more/tools/20080524/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>memcached vs tugela vs memcachedb</title>
		<link>http://www.netuality.ro/memcached-vs-tugela-vs-memcachedb/presentations/20080317</link>
		<comments>http://www.netuality.ro/memcached-vs-tugela-vs-memcachedb/presentations/20080317#comments</comments>
		<pubDate>Sun, 16 Mar 2008 21:38:38 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[memcachedb]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tugela]]></category>
		<category><![CDATA[wurbe]]></category>

		<guid isPermaLink="false">http://www.netuality.ro/memcached-vs-tugela-vs-memcachedb/presentations/20080317</guid>
		<description><![CDATA[This presentation was planned for an older Wurbe event, but as this never quite happened in the last 4 months I am publishing it now, before it becomes totally obsolete. My original contribution here is a comparison between the original memcached server from Danga and the tugela fork from the MediaWiki programmers. I&#8217;ve also tried [...]]]></description>
			<content:encoded><![CDATA[<p>This presentation was planned for an older <a href="http://wurbe.ro/" target="_blank">Wurbe</a> event, but as this never quite happened in the last 4 months I am publishing it now, before it becomes totally obsolete.</p>
<p><center><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=memcached-vs-tugela-1205702329685207-3"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=memcached-vs-tugela-1205702329685207-3" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></center></p>
<p>My original contribution here is a comparison between the <a href="http://www.danga.com/memcached/" target="_blank">original memcached serve</a>r from Danga and the <a href="http://meta.wikimedia.org/wiki/Tugela_Cache" target="_blank">tugela fork</a> from the MediaWiki programmers. I&#8217;ve also tried <a href="http://memcachedb.org/" target="_blank">memcachedb</a> but the pre 1.0 version (from Google Code) in November 2007 was quite unstable and unpredictible.</p>
<p>In a nutshell, these memcache versions are using <a href="http://www.oracle.com/technology/products/berkeley-db/index.html" target="_blank">BerkeleyDB</a> instead of memory slab allocator. There are 2 direct consequences:</p>
<ul>
<li>when the memory is large enough for the whole cache, database-backed servers will be slower (my tests shown 10-15% which might be tolerable &#8211; or not &#8211; for your app)</li>
<li>when you&#8217;ve got lots of data to cache and your server&#8217;s memory is low, relying on bdb is significantly better than letting the swap mechanism to do its job (from my benchmarks, the difference can go up to 10 times faster especially under very high concurrency conditions)</li>
</ul>
<p>Tugela will prove especially useful when running it on virtualized servers with very low memory.</p>
<p>My tests were performed with the &#8220;Tummy&#8221; Python client and Stackless for the multithreaded version. In one of the following weeks I&#8217;ll update the benchmarks for memcachedb 1.0.x &#8211; and I promise never ever to wait 4 months for a presentation, again &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/memcached-vs-tugela-vs-memcachedb/presentations/20080317/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SEO eye for the Tapestry guy</title>
		<link>http://www.netuality.ro/seo-eye-for-the-tapestry-guy/andeverythingelse/20050925</link>
		<comments>http://www.netuality.ro/seo-eye-for-the-tapestry-guy/andeverythingelse/20050925#comments</comments>
		<pubDate>Sun, 25 Sep 2005 17:21:30 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tapestry]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/seo-eye-for-the-tapestry-guy/uncategorized/20050925</guid>
		<description><![CDATA[One of my previous customers has a Jakarta Tapestry [3.0.x] based site. The site is subscription-based, but it also has a public area &#8211; if you browse each and every link you should be able to view few thousand of [dynamically generated] pages. No SEO* consulting was involved in building the site. To put it [...]]]></description>
			<content:encoded><![CDATA[<p>One of my previous customers has a Jakarta Tapestry [3.0.x] based site. The site is subscription-based, but it also has a public area &#8211; if you browse each and every link you should be able to view few thousand of [dynamically generated] pages. No SEO* consulting was involved in building the site. To put it simply : I&#8217;ve got some specs and HTML templates: developed, deployed, bugfixed and hasta la vista&#8230;</p>
<p>More than 6 months later [!], the site is still alive, which is good, but it doesn&#8217;t really spot impressive traffic figures and growth. Basically, all the traffic it gathers seems to come from existing subscribers and paid ads, very low level of organic and almost zero traffic from major engines such as Google (although it was submitted to quite a lot of engines and directories).<br />
Lo and behold, there must be something really nasty going on since a quick query on Google with <em>site:www.javaguysite.com</em>** gives only one freaking result : the home page. What means: Google has indexed ONLY the entry page &#8211; same thing happens with all the other major search indexes. And guess what : nobody is going to find the content if it isn&#8217;t even indexed by search engines.</p>
<p><strong>Making friends with your public URLs</strong></p>
<p>The problem : Tapestry URLs are too ugly for search engines. Looking at the source of my navigation menu, I found little beasts such as</p>
<p><em>http://www.javaguysite.com/b2b?service=direct/1/Home/$Border.$Header.$LoggedMenu.$CheckedMenu$1.$DirectLink&amp;sp=SSearchOffers#a<br />
</em></p>
<p>For a Tapestry programmer it is simple direct link from inside a component embedded in other components, but for search engine bots it is an overly complex link to a dynamic page, which will NOT be followed. Thus, if you want these little buggers to crawl all over your site and index all the pages, make&#8217;em think it&#8217;s a simple static site such as :</p>
<p><em>http://www.javaguysite.com/b2b/bla/bla/bla/SearchOffers.html</em></p>
<p>In SEO consultants slang, it&#8217;s called &#8220;friendly URLs&#8221;***.</p>
<p>You don&#8217;t have to make <strong>all</strong> your links friendlier. For instance, no need to touch the pages available only to subscribers as they&#8217;ll never be available for public searching. In the public area, make friendly URLs only to access those pages containing relevant content.<br />
The method is called URL rewriting. Rewriting means that the web server is transforming the request URL, behind the scenes, using regular expressions, in a totally transparent manner. Thus, the client browser or the bot &#8220;thinks&#8221; it reaches a certain URL, however a different address is sent to the servlet container. The rewriting is performed either by:</p>
<p>1. using a servlet filter such as <a href="https://urlrewrite.dev.java.net/" target="_new">urlrewrite</a>.</p>
<p>or</p>
<p>2. with <a href="http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html" target="_new">mod_rewrite</a> in Apache. <a href="http://www.netuality.ro/http-compression-filter-on-servlets-good-idea-wrong-layer/tools/20050202" target="_blank">I do use Apache as a proxy server, in order to perform transparent and efficient gzip-ing on the fly as described in one of my previous blog posts</a>. Now, I only had to add the mod_rewrite filter and I&#8217;m ready to go.</p>
<p>Only minor syntax differences exists between the regular expressions in the filter and the Apache module. I was able to seamlessly switch between the two, as I use the servlet filter in development environment and we did Apache proxying in production.</p>
<p><strong>The devil is in the details</strong></p>
<p>Now we&#8217;re sure that dynamic pages from the public area will be searchable after the Google bot crawls them. Problem is : all pages of a single category will have the same title. Like for instance &#8220;Company details&#8221; for all the pages containing &#8230; umm, company details. And when you have thousands of companies in the database, that makes helluva lot of pages with the same title ! Besides, keywords contained in the page title play an important role in the search position for the specific keyword. The conclusion: make your page titles as customised as possible: put not only the page type, but also relevant data from the page content &#8211; in our case, the company name and whynot the city where the business is located. This is easy with Tapestry:</p>
<pre>&lt;html jwcid="@Shell" title="ognl:page.pageTitle"&gt;</pre>
<p>and then define a customized</p>
<pre>public String getPageTitle();</pre>
<p>in all the Page classes (with maybe an abstract getPageTitle in the base page class, supposing you have one defined in the project, which one normally should).</p>
<p>The same type of reasoning applies for page <em>keywords</em> and <em>description</em> metatags, as they are taken into account by most of the search engines. Use them, make them dynamic and insert content-relevant data. Don&#8217;t just rely on generic keywords as the competition is huge on these: a bit of keyword <a href="http://en.wikipedia.org/wiki/Long_Tail">long tail</a> can do wonders. Don&#8217;t overdo it and don&#8217;t try to trick Google as you may have some nasty surprises in the process. And if you can afford, have some SEO consulting for the keywords and titles content.</p>
<p>There&#8217;s another rather obsolete nevertheless important HTML tag : the H1. Who on Earth needs H1 when you got CSS and can name your headings according to a coherent naming schema ? Well, apparently Google needs H1 tags, reads H1 tags and uses the content of H1 tags to compute search relevancy. So make sure to redefine H1 in your CSS and use it inside page content. People seem to believe it has something to do with a sort of HTML semantics &#8230;</p>
<p>That&#8217;s it, at least from a basic technical point of view. For a longer discussion about SEO read Roger Johansson&#8217;s <a href="http://www.456bereastreet.com/archive/200502/basics_of_search_engine_optimisation/" target="_new">Basics of search engine optimisation</a> as well as the massive amounts of freely available literature available on the web concerning this subject. Just &#8230; search for it.</p>
<p>*SEO = Search Engine Optimization.</p>
<p>**Names changed to protect the innocents.</p>
<p>***Supposedly, Tapestry 3.1, currently in alpha stage, has its URLs way friendlier than 3.0. However, don&#8217;t use an alpha API on a production site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/seo-eye-for-the-tapestry-guy/andeverythingelse/20050925/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JCS: the good, the bad and the undocumented</title>
		<link>http://www.netuality.ro/jcs-the-good-the-bad-and-the-undocumented/tools/20050217</link>
		<comments>http://www.netuality.ro/jcs-the-good-the-bad-and-the-undocumented/tools/20050217#comments</comments>
		<pubDate>Thu, 17 Feb 2005 18:30:27 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[velocity]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/jcs-the-good-the-bad-and-the-undocumented/uncategorized/20050217</guid>
		<description><![CDATA[Java Caching System is one of the mainstream opensource and free Java caches*, along with OSCache, EHCache and JbossCache. Choosing JCS may be the subject of an article by itself, since this API has a vastly undeserved reputation of being a buggy, slow cache. Exactly this reputation has motivated the development of EHCache, which is [...]]]></description>
			<content:encoded><![CDATA[<p><a HREF="http://jakarta.apache.org/turbine/jcs/" target="_new">Java Caching System</a> is one of the mainstream opensource and free Java caches*, along with <a HREF="http://www.opensymphony.com/oscache/" target="_new">OSCache</a>, <a HREF="http://ehcache.sourceforge.net/" target="_new">EHCache</a> and <a HREF="http://www.jboss.org/products/jbosscache" target="_new">JbossCache</a>. Choosing JCS may be the subject of an article by itself, since this API has a vastly undeserved reputation of being a buggy, slow cache. Exactly this reputation has motivated the development of EHCache, which is in fact a fork of JCS. But, JCS has evolved a lot lately and is now a perfectly valid alternative for production; it still has a few occasional bugs, but nothing really bothersome. I&apos;ve recently had this interesting experience of cleaning up and tuning a website powered by JCS. This dynamic Java-based site is exposed to a healthy traffic of 0.6-1.2 Mhits/day, with 12.000-25.000 unique visitors daily, and caching has greatly improved its performance. This article is a collection of tips and best practices not comprised (yet?) in the official JCS documentation.</p>
<p><strong>Where to download JCS</strong></p>
<p>This is usually the first question when one wants to use JCS. Since JCS is not a &apos;real&apos; Jakarta project, but a module of the <a HREF="http://jakarta.apache.org/turbine/" target="_new">Turbine</a> framework, there is no downloading link available on the main site. If you search on Google, this question has popped many times on different mail lists or blogs and it usually has two kinds of answers, both IMHO wrong:</p>
<ul>
<li><em>download the source of Turbine and you&apos;ll find JCS in the dependencies</em>. No, you won&apos;t, because Turbine is build with Maven, which is supposed to automagically download all the needed dependencies and bring them to you on a silver plate. Meaning: tons of useless jars hidden somehwere in the murky depths of wherever Maven thinks is a nice install location. Uhh.</li>
<li><em>build it from scratch</em>. Another sadistic advice, given that JCS is also build with Maven. So you&apos;ll not only need to checkout the sources from CVS, but also install Maven. Then try to build JCS. And eventually give up. Like for instance in my case, I installed the monster^H^H^H^H^H^H wonderful build tool, then ran &apos;maven jar&apos;. Instead of the expected result [you know, building the jar !] Maven performed a series of operations like running unit tests, washing teeth, cooking a turkey. Well, I suppose it was doing this, because I couldn&apos;t read the huge gobs of text running quickly on the screen. At the end, it miserably failed, with no logical explanations (too many explanations is the modern equivalent of unexplained). So I gave up. Again.</li>
</ul>
<p>Fortunately, some kind souls at Jakarta (think of these developers as of a sort of secret congregation) provide clandestine latest &apos;demavenized&apos; binary builds in obscure places; for JCS, the<br />
location is <a HREF="http://cvs.apache.org/viewcvs.cgi/jakarta-turbine-jcs/tempbuild/" target="_new">here</a>. I used the last 1.1 build without problems for a few weeks and I strongly recommend it.</p>
<p><strong>Using the auxiliary disk cache</strong></p>
<p>There&apos;s a common misconception that one doesn&apos;t need no stinkin&apos; disk cache. Even on <a HREF="http://www.hibernate.org/61.html" target="_new">Hibernate site</a> the example JCS configurations has the auxiliary disk cache commented out. Maybe this comes from the fact that JCS disk cache suffered from a memory leak (not true any more) or from the simplistic reasoning that disk access is inherently slower than memory access. Well it surely is, but at the same time it&apos;s probably much faster than some of the database queries, which could benefit from caching.</p>
<p>Also, it is interesting to note that incorrectly dimensioned &apos;memory&apos; caches will make the Java process overflow from main memory to the swap disk. So you&apos;ll use the disk anyway, only in an un-optimized manner !</p>
<p>I wouldn&apos;t advise you to activate the auxiliary cache on disk without limiting its size, otherwise, the cache file would grow indefinitely. Controlling cache size is done by 2 parameters (<em>MaxKeySize</em> and <em>OptimizeAtRemoveCount</em>) example:</p>
<pre>
jcs.auxiliary.DC.attributes.MaxKeySize=2500
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=2500
</pre>
<p>Only <em>MaxKeySize</em> is not enough, since it will only limit the number of keys pointing to values which are in disk cache. In fact, removing a value from the disk cache will only remove its key. But, the second (<em>OptimizeAtRemoveCount</em>) parameter will tell the cache to recreate a new file after a certain number of &apos;removes&apos;. This new cache file will keep only the cached values corresponding to the remaining keys, thus cleaning all obsolete values, and of course will replace the old cache file. The size of disk cache and the remove count is of course subject of tuning in your own environment.</p>
<p><strong>Tuning the memory shrinker</strong></p>
<p>Although one of the JCS authors specify that the shrinker &#8220;is rarely necessary&#8221;, it might come handy especially in memory constrained environments or for really big caches. With one exception: be careful and specify the <em>MaxSpoolPerRun</em> parameter (undocumented yet, but discussed on the mailing list) otherwise the shrinking process might lead to spikes in CPU usage. I am using the shrinker like that:</p>
<pre>
jcs.default.cacheattributes.UseMemoryShrinker=true
jcs.default.cacheattributes.ShrinkerIntervalSeconds=3600
jcs.default.cacheattributes.MaxSpoolPerRun=300
</pre>
<p>YMMV.</p>
<p><strong>Cache control via servlet</strong></p>
<p>Again, undocumented, but people seem to know about it. The servlet class is <em>org.apache.jcs.admin.servlet.JCSAdminServlet</em> but do not expect it to work out of the box ! This servlet uses <a HREF="http://jakarta.apache.org/velocity/" target="_new">Velocity</a> thus you&apos;ll need to :</p>
<ul>
<li>initialize Velocity before trying to access the servlet (or lazy, but you&apos;ll have to modify the servlet source)</li>
<li>copy the templates into the Velocity template location. The templates (JCSAdminServletDefault.vm and JCSAdminServletRegionDetail.vm) are not (bug ? feature ?) in the jar, so you&apos;ll have to retrieve them from the CVS repository. For the moment, they are at <a href="http://cvs.apache.org/viewcvs.cgi/jakarta-turbine-jcs/src/java/org/apache/jcs/admin/servlet/" target="_new">this</a> location.</li>
</ul>
<p>These are my findings. I would have really appreciated to have these few pieces of info before starting the cache tuning. If anybody thinks this article is useful and/or needs to be completed, write a comment, send an email, wave hands. I&apos;ll try to come up with more details.</p>
<p>*For a complete list, see the corresponding section at <a HREF="http://java-source.net/open-source/cache-solutions" target="_new">Java-source</a>.<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/jcs-the-good-the-bad-and-the-undocumented/tools/20050217/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XML descriptors in PHP frameworks &#8211; considered harmful</title>
		<link>http://www.netuality.ro/xml-descriptors-in-php-frameworks-considered-harmful/tools/20041029</link>
		<comments>http://www.netuality.ro/xml-descriptors-in-php-frameworks-considered-harmful/tools/20041029#comments</comments>
		<pubDate>Fri, 29 Oct 2004 05:53:51 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/xml-descriptors-in-php-frameworks-considered-harmful/uncategorized/20041029</guid>
		<description><![CDATA[No, I am not a seasoned PHP programmer and I do not intend to become one. But we do live in a harsh economy where all IT projects are worth considering, thus my occasional incursions in the world of of PHP-driven websites. I am not new to PHP either, but &#8211; coming from a Java [...]]]></description>
			<content:encoded><![CDATA[<p>No, I am not a seasoned PHP programmer and I do not intend to become one. But we do live in a harsh economy where all IT projects are worth considering, thus my occasional incursions in the world of of PHP-driven websites.</p>
<p>I am not new to PHP either, but &#8211; coming from a Java world &#8211; immediately felt the need of a serious MVC framework.<br />
Nobody wants to reinvent the wheel each time a new website is built. Just launch the obvious &#8220;PHP MVC framework&#8221; on Google and the results pages will be dominated by four open-source projects :</p>
<ul>
<li><a href="http://amb.sourceforge.net/" target="_new">PHPMVC</a> is probably the oldest project and implements a model 2 front controller/li>
<li><a href="http://sourceforge.net/projects/phpmvc/" target="_new">Ambivalence</a> declares itself as a simple port of<br />
Java <a href="http://mav.sourceforge.net/" target="_new">Maverick</a> project</li>
<li><a href="http://www.eocene.net/" target="_new">Eocene</a> a &#8220;simple and easy to use OO web development framework for PHP and ASP.NET&#8221;,implementing MVC and front controller</li>
<li><a href="http://phrame.sourceforge.net" target="_new">Phrame</a> is a Texas Tech University project released as LGPL, heavily inspired by Struts.</li>
</ul>
<p>The choice is not easy. There are no examples of industrial-quality sites built with either of these frameworks.<br />
(some may say there are no examples of industrial quality sites built with PHP but let&apos;s ignore these nasty people for now).</p>
<p>There are no serious comparisons of the four frameworks, neither feature-wise nor performance-wise.<br />
In the tradition of open-source projects, the documentation is rather scarce and examples are &#8220;helloworld&#8221;-isms.<br />
Yes I am a bloody bastard for pointing out these aspects &#8211; since the authors are not paid to release these projects &#8211; and perhaps I could contribute myself with some documentation. However, when under an aggressive schedule I feel it&apos;s easier to write my own framework instead of understanding other people&apos;s code and document it thoroughly.<br />
However, I have a nice hint for you. The first three frameworks are using XML files for controller initialization (call it &#8220;sitemap&#8221;, &#8220;descriptor&#8221; or otherwise; but it&apos;s just a plain dumb XML file). So you should safely ignore them in a production environment.</p>
<p>Because, the &#8220;controller&#8221; is nothing more than a glorified state machine. The succession of states and transitions (or &#8220;actions&#8221; or whatever) should be persisted somewhere. XML is probably a nice choice for Java frameworks, where the files are parsed and the application server keeps <strong>in memory</strong> a pool of controller objects.</p>
<p>But: PHP sessions are <strong>stateless</strong>. The only way of keeping state is via filesystem or database, usually based on an ad-hoc generated unique key, which is kept in the session cookie. More: PHP allows native serialization only for primitive variables; a complex object such as the controller can not be persisted easily, so it has to be retrieved from XML and fully rebuilt. Unlike in Java appservers, objects cannot be shared between multiple session, thus pooling is not an option. Thus, in PHP, the XML approach is highly un-recommended, since this means that the XML files are parsed <strong>for each page that is viewed on the site</strong>. Although PHP&apos;s parser is James Clarks&apos;s Expat, one of the fastest parsers right now (written in C), note that the DOM object must be browsed in order to create the controller object (which is becoming more and more complex as the site grows). This is called <b>heavy overhead</b>, no matter how you look at it.</p>
<p>There are a few reasons about why you need XML in a web framework, however this does NOT apply to PHP apps. Myth quicklist:
<ul>
<li>it&apos;s &#8220;human-readable&#8221;. Come on, PHP is stored is ASCII readable files and even if you use Zend products to compile and encrypt your code, why on earth would you allow readability and modification of the controller state machine on the deployment site ?</li>
<li>easier to modify than in code. This is probably true for Java and complex frameworks, but in PHP is significantly simpler than Java.</li>
<li>automatically generated from code by tools such as Xdoclet or via an IDE. If you&apos;re writing it in Java, because PHP does not have such tools.</li>
</ul>
<p>This means that the only serious candidate (between these considered here) for a PHP MVC framework is Phrame, which stores the sitemap as a multi-dimensional hashmap. Thus, you should either consider Phrame or (for small < 50 screens) sites you&apos;ll be better off writing your own mini-framework, with a state machine implemented as a hashed array of arrays and some session persistence in the database. I chose to serialize and persist an array containing primitive variables, using PHPSESSID as the primary key in order to retrieve and unserialize the array, all coupled with a simple "aging" mechanism for these users with the nasty habit of leaving the site without performing logout first.</p>
<p>Finally a last world of advice : use PEAR ! This often overlooked library of PHP classes includes a few man-years of quality work. You&apos;ll get a generic database connection layer (PEAR-DB) along with automatic generation of model classes mapped on the database schema (DB_DataObjects), a plethora of HTML tools (tables, forms, menus) and some templating systems to choose from. All in a nice easy to install and upgrade package.</p>
<p>Don&apos;t put a heavy burden on your upgrade cycle using heterogenous packages downloaded from different sites on the web, just use PEAR.</p>
<p>Or simply ignore the PHP offer and wait patiently for your next Java project. Vacations are almost over.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/xml-descriptors-in-php-frameworks-considered-harmful/tools/20041029/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>(Undocumented?) HTTP-based REST API in Jira</title>
		<link>http://www.netuality.ro/undocumented-http-based-rest-api-in-jira/tools/20040917</link>
		<comments>http://www.netuality.ro/undocumented-http-based-rest-api-in-jira/tools/20040917#comments</comments>
		<pubDate>Fri, 17 Sep 2004 13:45:14 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/undocumented-http-based-rest-api-in-jira/uncategorized/20040917</guid>
		<description><![CDATA[While the REST API is mentioned in the Top 10 Reasons to use Jira, I can hardly see any reference to such an external API in the documentation (I mean, besides XML-RPC and upcoming SOAP support) and even Google can&apos;t clear the issue. But I can confirm you, it is possible to fully(?) automate Jira [...]]]></description>
			<content:encoded><![CDATA[<p>While the REST API is mentioned in the <a HREF="http://www.atlassian.com/software/jira/learn/10reasons.jsp" target="_new">Top 10 Reasons to use Jira</a>, I can hardly see any reference to such an external API in the documentation (I mean, besides XML-RPC and upcoming SOAP support) and even Google can&apos;t clear the issue. But I can confirm you, it is possible to fully(?) automate Jira using HTTP requests.</p>
<p>Recently, I was asked to programatically login a user into Jira and open a browser with the results of an advanced search. This is part of a really slick integration between one of my employer&apos;s products and a JIRA server &#8211; mainly helping our testers to avoid bug duplication and also providing insightful statistics for QA dept.</p>
<p>I&apos;ve started doing it the hard way, trying to obtain and pass JSESSIONID and other useless stuff between my application and the browser, until I realized that Jira can be fully controlled through HTTP in a REST-like manner. Let me explain. Normally, if you are not logged into Jira and launch a browser with a carefully crafted search request (well, you know how to reverse enginner POSTs into GETs don&apos;t you ?) &#8211; then a graceful invitation to log in is everything you&apos;ll ever obtain. But, if you add at the end of your request <strong>&#8220;&#038;os_username=&#8221; + USER + &#8220;&#038;os_password=&#8221;+ PASS</strong> bang ! not only you obtain the desired search results, but you are automagically logged into Jira for the rest of the browsing session. Yes, yes yes : here I come, integration ! A couple of hours later, I am able to programatically insert bug reports, extract bug details, compute statistics and open customized advanced searches.</p>
<p>To quote a classic : <em>Jira ! Jira ! Jira !</em>. Docs would be nice, though.</p>
<p>PS I&apos;m testing this on a Jira Professional 2.6.1-#65. YMMV.<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/undocumented-http-based-rest-api-in-jira/tools/20040917/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8230; and a few lesser known Java tools</title>
		<link>http://www.netuality.ro/and-a-few-lesser-known-java-tools/tools/20040621</link>
		<comments>http://www.netuality.ro/and-a-few-lesser-known-java-tools/tools/20040621#comments</comments>
		<pubDate>Mon, 21 Jun 2004 17:14:39 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/and-a-few-lesser-known-java-tools/uncategorized/20040621</guid>
		<description><![CDATA[Very very busy lately, but I&apos;d like to share some knowledge about a few useful Java OSS gems that were not easy to find. Mr. Google, please &apos;index this&apos;: 1. Aspirin is a self-contained SMTP server (send only) written in Java, open-sourced and free. It simplifies configuration and deployment by allowing your app server to [...]]]></description>
			<content:encoded><![CDATA[<p>Very very busy lately, but I&apos;d like to share some knowledge about a few useful Java OSS gems that were not easy to find. Mr. Google, please &apos;index this&apos;:<br/></p>
<p>
<strong>1.</strong> <a HREF="https://aspirin.dev.java.net/" target="_new">Aspirin</a> is a self-contained SMTP server (send only) written in Java, open-sourced and free. It simplifies configuration and deployment by allowing your app server to send emails without passing through an external SMTP server. The project is heavily inspired from Apache James code (thus its licencing terms). The few problems I see right now are : possible performance issues when sending big volumes of mail, behavior still erratic (sometimes sending fails without plausible reason), failure reports which do not provide reasons of failure. However, the thingie works pretty well and is a big time saver because, well, configuration is not the most pleasant part of a complex server.
</p>
<p>
<strong>2.</strong> If you produce a lot of reports and want to send them automatically on a remote printing server you may use <a HREF="http://www.lohndirekt.de/software/jipsi_quickstart_drucksoftware.html" target="_new">JIPSI</a> (quickstart in English, but site in German) which implements <a HREF="http://www.cups.org/" target="_new">CUPS</a> as a Java Print Service API. This little beauty was found by one of my coworkers and the &apos;report guys&apos; seem to be making good use of it.
</p>
<p>
<strong>3. </strong>You&apos;re in for some serious processing on OpenOffice documents using the freely available DTD&apos;s (downloadable from the OOo CVS server) ? Then hold your horses ! I&apos;ve tried to make sensible use of them and failed abruptly. Let&apos;s just say that those DTDs are a big pain in the a**: to begin with, no tool is able to transform them into a schema. I&apos;ve tried XmlSpy and a few other exotic softwares, without success. Even basic stuff like parsing with a validating parser does not work. So much for the usefulness of open standards. Eventually, I have ended up by using the excellent <a HREF="http://www.hj-gym.dk/~hj/writer2latex/" target="_new">Writer2Latex</a>. Don&apos;t be fooled by the name, you may do all sorts of conversions with it, including Writer to XHTML, which I was interested in. You can even write your own plugin to boot some exotic formats, because Writer2Latex is built around a modified version of <a HREF="http://xml.openoffice.org/xmerge/" target="_new">XMerge</a>. Officially, XMerge is the solution for visualizing documents on &apos;Small Devices&apos;, but it really is a fancy plugin-based document converter. Most probably (too lazy to check the sources), SAX-based with a nonvalidating parser. Go figure.
</p>
<p>
<strong>4.</strong> The Eclipse download site has now links to a BitTorrent <a HREF="http://194.100.97.250:6969/" target="_new">tracker</a>. I just used it succesfully in order to download RC3 at a reasonable download rate (anyway, being on wifi right now I wasn&apos;t expecting blazing speed). I found interesting that all the other peers were using <a HREF="http://azureus.sourceforge.net/" target="_new">Azureus</a>, a torrent client written in Java+SWT. Azureus is a fantastic source of knowledge, choke full of tips and techniques for writing professional-looking and very responsive SWT apps. But not only : Azureus is also a great example about how to write a plugin-ready app, which performs automatic updates from the net. Not bad, at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/and-a-few-lesser-known-java-tools/tools/20040621/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rebuttal : What&apos;s Wrong with the Eclipse Plugin Infrastructure?</title>
		<link>http://www.netuality.ro/rebuttal-whats-wrong-with-the-eclipse-plugin-infrastructure/articles/20040512</link>
		<comments>http://www.netuality.ro/rebuttal-whats-wrong-with-the-eclipse-plugin-infrastructure/articles/20040512#comments</comments>
		<pubDate>Wed, 12 May 2004 18:49:09 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/rebuttal-whats-wrong-with-the-eclipse-plugin-infrastructure/uncategorized/20040512</guid>
		<description><![CDATA[Mr. Philipp K. Janert, author of What&apos;s Wrong with the Eclipse Plugin Infrastructure? Version 1.1 (2004/03/13 06:44:12) All rights reserved hasn&apos;t answered my email sent 6 weeks ago, nor modified a single word of his article. Well, with such a long delay, I presume he is in a well-deserved retirement in Bahamas. Thus, given his [...]]]></description>
			<content:encoded><![CDATA[<p>Mr. Philipp K. Janert, author of <a HREF="http://www.beyondcode.org/articles/eclipse-plugins.html" target="_new">What&apos;s Wrong with the Eclipse Plugin Infrastructure?</a> <em>Version 1.1 (2004/03/13 06:44:12) All rights reserved</em> hasn&apos;t answered my email sent 6 weeks ago, nor modified a single word of his article. Well, with such a long delay, I presume he is in a well-deserved retirement in Bahamas. Thus, given his absence and inability to correct erroneous informations in his site, someone else (me, for instance !) has to correct the errors displayed in the article. I strongly encourage everybody else who thinks that Eclipse plugin architecture is not as &apos;wrong&apos; as Philipp thinks to write a few words by email, maybe (when he comes back from Bahamas) he&apos;ll manage to fix the problems with his document.</p>
<p>Here we go:
</p>
<p>
Dear Philipp,<br/><br />
Unfortunately, most of the points from your article &#8220;What&apos;s Wrong with the Eclipse Plugin Infrastructure?&#8221; are wrong :<br/><br />
1. There is a way (albeit, undocumented) allowing you to keep the locally installed plugins between different Eclipse installs. It is covered in some weblogs and <a HREF="http://www.blueskyonmars.com/archives/2004/01/13/vasanth_dharmaraj_keeping_eclipse_plugins_separate.html" target="_new">this</a> is one of them.<br/><br />
2. Using the workaround described at point 1 you can partially solve point 2 via multiple links to local plugins directory for each user.<br/><br />
3. Is already adressed in 3.0M8 and will be fixed in 3.0 final<br/><br />
4. Is a design choice, also explained by 5<br/><br />
5. Plugins are radically different from simple libraries. The corresponding class hierarchies are loaded (and will be unloaded) on an as-is basis by a special Eclipse classloader. Thus, putting the plugin artifacts in the jvm classpath is not useful in this case.<br/><br />
6. Yes, there is a difference. Please please document thoroughly before writing an article with public exposure.<br/><br />
7. Valid point, will be adressed before 3.0final<br/><br />
8. and 9. are plugin developers issue. Eclipse team do have their naming conventions for plugins, however they cannot enforce it upon external plugin developers.<br/><br />
10. If a plugin has a corresponding feature, you may use the help/software updates/manage configuration page.<br/><br />
11. Again, this is plugin developers responsibility. Each plugin should have a &apos;welcome&apos; page detailing its functionality. This is clearly stated in the Eclipse guides.<br/><br />
12. See 11<br/><br />
13. Please use the &apos;Error log&apos; view from &apos;PDE Runtime&apos;. I have to repeat that documentation, contrary to the public opinion, is a useful thing.<br/>
</p>
<p>Please make the necessary corrections in your article. The site has a decent Google PageRank and is referenced in some news weblogs, thus it has an important public exposure.
</p>
<p>Sincerely,<br/><br />
Adrian Spinei<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/rebuttal-whats-wrong-with-the-eclipse-plugin-infrastructure/articles/20040512/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

