<?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; AndEverythingElse</title>
	<atom:link href="http://www.netuality.ro/category/andeverythingelse/feed" rel="self" type="application/rss+xml" />
	<link>http://www.netuality.ro</link>
	<description>Taming the big, bad, nasty websites</description>
	<lastBuildDate>Sun, 13 Jun 2010 07:44:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Looking for #3 at Roblogfest Business/Technology ?</title>
		<link>http://www.netuality.ro/looking-for-3-at-roblogfest-businesstechnology/andeverythingelse/20080315</link>
		<comments>http://www.netuality.ro/looking-for-3-at-roblogfest-businesstechnology/andeverythingelse/20080315#comments</comments>
		<pubDate>Sat, 15 Mar 2008 07:28:26 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>

		<guid isPermaLink="false">http://www.netuality.ro/looking-for-3-at-roblogfest-businesstechnology/andeverythingelse/20080315</guid>
		<description><![CDATA[If you came here from the Mediafax article, this address is wrong. The Netuality you&#8217;re looking for is hosted by Hotnews.
]]></description>
			<content:encoded><![CDATA[<p>If you came here from the Mediafax article, this address is wrong. The Netuality you&#8217;re looking for is <a href="http://spinei.hotnews.ro/" target="_blank">hosted by Hotnews</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/looking-for-3-at-roblogfest-businesstechnology/andeverythingelse/20080315/feed</wfw:commentRss>
		<slash:comments>0</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>QOTD : java.util.concurrent Kicks Ass and Takes Names</title>
		<link>http://www.netuality.ro/qotd-javautilconcurrent-kicks-ass-and-takes-names/andeverythingelse/20050319</link>
		<comments>http://www.netuality.ro/qotd-javautilconcurrent-kicks-ass-and-takes-names/andeverythingelse/20050319#comments</comments>
		<pubDate>Sat, 19 Mar 2005 13:55:29 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/qotd-javautilconcurrent-kicks-ass-and-takes-names/uncategorized/20050319</guid>
		<description><![CDATA[The java.util.concurrent package in JDK 1.5 is worth its weight in Internet porn.
From studdugie on Java
]]></description>
			<content:encoded><![CDATA[<p><strong>The java.util.concurrent package in JDK 1.5 is worth its weight in Internet porn.</strong></p>
<p>From <a href="http://www.jroller.com/page/studdugie" target="_new">studdugie</a> on Java</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/qotd-javautilconcurrent-kicks-ass-and-takes-names/andeverythingelse/20050319/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Switching jobs</title>
		<link>http://www.netuality.ro/switching-jobs/andeverythingelse/20041103</link>
		<comments>http://www.netuality.ro/switching-jobs/andeverythingelse/20041103#comments</comments>
		<pubDate>Wed, 03 Nov 2004 15:50:49 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/switching-jobs/uncategorized/20041103</guid>
		<description><![CDATA[Tomorrow is my last day here as a Senior &#8230; whatever. I&apos;ve done a lot of Java development (Eclipse plugins, SWT/JFace, various components for our proprietary framework) and even some DB work (Sap/Oracle/PostgreSQL migration, benchmarking, testing), spiced with a little bit of API design and a healthy dose of documentation writing. It was a great [...]]]></description>
			<content:encoded><![CDATA[<p>Tomorrow is my last day here as a Senior &#8230; whatever. I&apos;ve done a lot of Java development (Eclipse plugins, SWT/JFace, various components for our proprietary framework) and even some DB work (Sap/Oracle/PostgreSQL migration, benchmarking, testing), spiced with a little bit of API design and a healthy dose of documentation writing. It was a great year with lots of stuff to learn, but it&apos;s time to move on towards greater challenges. I&apos;m going back to the web business (this time not under the risky startup umbrella, but with an established company) and back to a managerial position ! Working a full year 100% on a development contract has surely taught me a thing or two about how effective management must be done. I really needed such an experience, because as a young professional (back in 1998) I became very quickly (maybe too quickly) a project manager.</p>
<p>The funny stuff is that I&apos;m going to manage a C# team which is bigger than the Java team. I&apos;m familiar with .Net notions and burning some midnight oil with VisualStudio Express, but there is a serious culture shock of coming from Java/Eclipse development environment. Although C# as a language is very neat and there are some cool MSFT APIs down there, I have the strange sensation of things being terribly <em>awkward</em>. Hope I won&apos;t be swallowed by the Dark Side [ugly grin].</p>
<p>If there&apos;s any &apos;actual future former&apos; coworker reading this blog : <strong>THANK YOU !</strong> and keep up the good work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/switching-jobs/andeverythingelse/20041103/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agressive IT Antipattern : You&apos;re Not Gonna Need It (when you&apos;ll file for Chapter 11)</title>
		<link>http://www.netuality.ro/agressive-it-antipattern-youre-not-gonna-need-it-when-youll-file-for-chapter-11/andeverythingelse/20041029</link>
		<comments>http://www.netuality.ro/agressive-it-antipattern-youre-not-gonna-need-it-when-youll-file-for-chapter-11/andeverythingelse/20041029#comments</comments>
		<pubDate>Fri, 29 Oct 2004 06:00:30 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/agressive-it-antipattern-youre-not-gonna-need-it-when-youll-file-for-chapter-11/uncategorized/20041029</guid>
		<description><![CDATA[Nice excerpt from an Inc. article :
Future Beef&apos;s real albatross, says Darrell Wilkes, was an expensive computer system that ran enormously complex software from J.D. Edwards. &#8220;We were pouring all this data in, but we could never get the data out,&#8221; says Wilkes, whose job, as the company&apos;s cattle and supply expert, was to monitor [...]]]></description>
			<content:encoded><![CDATA[<p>Nice excerpt from an <a href="http://www.inc.com" target="new">Inc.</a> article :</p>
<p><i>Future Beef&apos;s real albatross, says Darrell Wilkes, was an expensive computer system that ran enormously complex software from J.D. Edwards. &#8220;We were pouring all this data in, but we could never get the data out,&#8221; says Wilkes, whose job, as the company&apos;s cattle and supply expert, was to monitor the progress of about 300,000 head of cattle. And these weren&apos;t just any cattle. These were Future Beef cattle, raised by ranchers who met its standards for feeding and monitoring their herds. Wilkes had to keep track of which steers had been given certain region-specific mineral supplements, which had been fed their necessary doses of vitamin E, which had been measured for yields of particular tissues and fats, and what the optimum dates were for shipping each steer off to the slaughterhouse.<br/><br />
When Wilkes asked his staff for the numbers, they didn&apos;t have a clue. They had not been able to retrieve the data from the computer system.<br/><br />
&#8220;I swore a lot, and jumped up and down a lot, but it didn&apos;t do a lot of good,&#8221; he says. &#8220;We would have been better off going in there with a very simple system. At least the simple systems give you your damn yield report.&#8221;</i></p>
<p>Click <a href="http://www.inc.com/magazine/20030801/futurebeef.html" target="new">here</a> to read the whole article.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/agressive-it-antipattern-youre-not-gonna-need-it-when-youll-file-for-chapter-11/andeverythingelse/20041029/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Figure of the day : 350</title>
		<link>http://www.netuality.ro/figure-of-the-day-350/andeverythingelse/20041029</link>
		<comments>http://www.netuality.ro/figure-of-the-day-350/andeverythingelse/20041029#comments</comments>
		<pubDate>Fri, 29 Oct 2004 05:27:44 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[France]]></category>
		<category><![CDATA[Romania]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/figure-of-the-day-350/uncategorized/20041029</guid>
		<description><![CDATA[Recently, an Indian poster on a Slashdot thread (&apos;India Outsourcers Find Back Door in Canada&apos;) mentioned that:

Software Developers in India (including me) are paid 350 times the prevailing minimum wage in India.
I thought it would be interesting to make a comparison with the same data in Europe:

in a country such as France, this makes 402.640EUR/month.
in [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, an Indian poster on a <a HREF="http://politics.slashdot.org/comments.pl?sid=127396&#038;threshold=3&#038;commentsort=0&#038;tid=187&#038;tid=219&#038;mode=thread&#038;cid=10650652" target="_new">Slashdot thread</a> (&apos;India Outsourcers Find Back Door in Canada&apos;) mentioned that:
</p>
<p><strong>Software Developers in India (including me) are paid 350 times the prevailing minimum wage in India.</strong></p>
<p>I thought it would be interesting to make a comparison with the same data in Europe:</p>
<ul>
<li>in a country such as France, this makes 402.640EUR/month.</li>
<li>in one of the countries wich has recently join EU, such as Hungary, this means almost 67.000EUR/month (Hungary does not have the biggest wages in the recent wave of new EU members).</li>
<li>finally in a country such as Romania which is scheduled to join EU in 2007, 350 times the minimum wage is however close to 25.000EUR/month and rising with two figures percentage in the last couple of years, due to economic growth. Romania and Bulgaria are considered the poorest countries to join EU in the next years.</li>
</ul>
<p>Outsourcing in India is more than just a temporary industry trend &#8230; and will touch all EU as strong as it does with US. Dear US developers, would you please let us join the club ? (we&apos;d rather not, but you know &#8230;)<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/figure-of-the-day-350/andeverythingelse/20041029/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nigerian QOTD</title>
		<link>http://www.netuality.ro/nigerian-qotd/andeverythingelse/20040803</link>
		<comments>http://www.netuality.ro/nigerian-qotd/andeverythingelse/20040803#comments</comments>
		<pubDate>Tue, 03 Aug 2004 09:21:36 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/nigerian-qotd/uncategorized/20040803</guid>
		<description><![CDATA[&#8220;Sir, on behalf of this Democratic Government of Nigeria, I apologize for any delay you might have encountered in receiving your money in the past.&#8221;
Ummm, well &#8230; apologies accepted.
]]></description>
			<content:encoded><![CDATA[<p>&#8220;Sir, on behalf of this Democratic Government of Nigeria, I apologize for any delay you might have encountered in receiving your money in the past.&#8221;</p>
<p>Ummm, well &#8230; apologies accepted.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/nigerian-qotd/andeverythingelse/20040803/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Junit : it&apos;s not [only] about the API</title>
		<link>http://www.netuality.ro/junit-its-not-only-about-the-api/andeverythingelse/20040714</link>
		<comments>http://www.netuality.ro/junit-its-not-only-about-the-api/andeverythingelse/20040714#comments</comments>
		<pubDate>Wed, 14 Jul 2004 06:55:22 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/junit-its-not-only-about-the-api/uncategorized/20040714</guid>
		<description><![CDATA[
Being extremely busy lately, I arrive a bit late at the Junit destruction feast. While it is probably true that some guys with a certain gift for writing blog articles may &#8220;come up with something far more useful in a couple of days&#8221;, I think the discussion is missing an important point: there&apos;s a whole [...]]]></description>
			<content:encoded><![CDATA[<p>
Being extremely busy lately, I arrive a bit late at the <a HREF="http://www.pyrasun.com/mike/mt/archives/2004/07/10/18.43.16/index.html" target="_new">Junit destruction feast</a>. While it is probably true that some guys with a certain gift for writing blog articles may &#8220;come up with something far more useful in a couple of days&#8221;, I think the discussion is missing an important point: there&apos;s a whole ecosystem living around Junit. We have Ant integration, we have the choice between code coverage tools (both <a HREF="http://www.cenqua.com/clover/" target="_new">commercial</a> and <a HREF="http://java-source.net/open-source/code-coverage" target="_new">open-source</a>), plugins for mainstream IDEs and <a HREF="http://www.junit.org/news/extension/index.htm" target="_new">a certain number</a> of useful or less-useful extensions. We have extensive documentation and a plethora of examples to feed the small fishes. Throwing Junit down the drain means throwing all these down the drain. Or, at least: write your own Ant integration, adapt a code coverage tool and rewrite the IDE integration, rewrite documentation and examples &#8211; <strong>this</strong> is not going to be done in &#8220;a couple of days&#8221;.
</p>
<p>
Another Junit advantage is that this little simplistic API is ubicuous. I mean, every developer heard about it and knows how to use it, unless of course he/she was living under a rock for the last few years. And I don&apos;t mean every <em>Java</em> developer, but just about every developer for a language under the xunit <a HREF="http://www.xprogramming.com/software.htm" target="_new">umbrella</a>. Meaning : all the programming languages (unless you consider &#8220;languages&#8221; such as Whitespace, Brainfuck and INTERCAL).
</p>
<p>
Beck and Gamma have not only written some &#8220;crappy&#8221; classes and put the few &#8220;laughable&#8221; chunks of code on Sourceforge, they have done it <strong>first</strong>. Now, there is some well-founded <a HREF="http://www.dehora.net/journal/archives/000295.html" target="_new">criticism</a> about the lack of evolution in Junit, but one thing is undeniable : it really did fill a niche, back then in 2000. The code may not be beautiful (and <strong>this</strong> is not good coming from XPers) but it serves its purpose : to provide a simple framework for unit testing.
</p>
<p>
Competition is the key here and <a HREF="http://www.beust.com/testng/" target="_new">smart newcomers</a> on this &#8220;market&#8221; are good news for us programmers. But, it&apos;s gonna take some time and a lot of work to build a similar ecosystem, a similar mindshare and usurp Junit&apos;s kingdom. That would be of course more interesting to see than denial of four years of Junit influence in a few well-rounded, but futile phrases.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/junit-its-not-only-about-the-api/andeverythingelse/20040714/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portability is for canoes and system software &#8230;</title>
		<link>http://www.netuality.ro/portability-is-for-canoes-and-system-software/andeverythingelse/20040627</link>
		<comments>http://www.netuality.ro/portability-is-for-canoes-and-system-software/andeverythingelse/20040627#comments</comments>
		<pubDate>Sat, 26 Jun 2004 21:10:35 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/portability-is-for-canoes-and-system-software/uncategorized/20040627</guid>
		<description><![CDATA[
&#8230; at least that&apos;s what Mr. David Gristwood says in this (otherwise excellent) entry (&apos;21 Rules of Thumb &#8211; How Microsoft develops its Software&apos;) on his MSDN weblog. Davis thinks that :


Even discounting the added development burden, with the addition of each additional platform the job of QA increases substantially. While clever QA management can [...]]]></description>
			<content:encoded><![CDATA[<p>
&#8230; at least that&apos;s what Mr. David Gristwood says in <a HREF="http://blogs.msdn.com/David_Gristwood/archive/2004/06/24/164849.aspx" target="_new">this</a> (otherwise excellent) entry (&apos;21 Rules of Thumb &#8211; How Microsoft develops its Software&apos;) on his MSDN weblog. Davis thinks that :
</p>
<p><em><br />
Even discounting the added development burden, with the addition of each additional platform the job of QA increases substantially. While clever QA management can minimize the burden somewhat, the complexity of multi-platform support is beyond the reach of most development organizations. Place your bets. Demand multi-platform support from your system software vendor, then build your product on the absolute fewest number of platforms possible.<br />
</em></p>
<p>
What kind of &apos;portability&apos; are we talking about in the context of software development at Microsoft ? He is probably making allusions to software being developed simultaneously for desktop and pocket Windows, which is in fact quite a challlenge for QA and for the developer team. But if it&apos;s a tongue-in-the-cheek reference to Java WORA, I found this entry to be somewhat funny. Let&apos;s &#8211; for the sake of the argument &#8211; suppose that you develop for multiple platforms and your QA team is able to thoroughly test only one of them. Basically, this means that your product is going to work OK on the main platform and have some flaws (most probably in the GUI area) on other platforms. How is this <strong>worse</strong> than having a product which purposedly works on a <strong>single</strong> target platform ? Humm, is JVM &apos;system software&apos; after all ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/portability-is-for-canoes-and-system-software/andeverythingelse/20040627/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&apos;m amazed : I own a PC !</title>
		<link>http://www.netuality.ro/im-amazed-i-own-a-pc/andeverythingelse/20040403</link>
		<comments>http://www.netuality.ro/im-amazed-i-own-a-pc/andeverythingelse/20040403#comments</comments>
		<pubDate>Sat, 03 Apr 2004 13:32:31 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/im-amazed-i-own-a-pc/uncategorized/20040403</guid>
		<description><![CDATA[Two interesting predictions:
&#8220;McNealy also predicted that five years from now, most people will be amazed they ever owned a PC.&#8221;
June 5, 1998
&#8220;This agreement will be of significant benefit to both Sun and Microsoft customers. It will stimulate new products, delivering great new choices for customers who want to combine server products from multiple vendors and [...]]]></description>
			<content:encoded><![CDATA[<p>Two interesting predictions:<br/><br />
<em>&#8220;McNealy also predicted that five years from now, most people will be amazed they ever owned a PC.&#8221;</em><br />
<a href="http://www.javaworld.com/javaworld/jw-07-1998/jw-07-idgns-school.html" target="_new">June 5, 1998</a><br/><br />
<em>&#8220;This agreement will be of significant benefit to both Sun and Microsoft customers. It will stimulate new products, delivering great new choices for customers who want to combine server products from multiple vendors and achieve seamless computing in a heterogeneous computing environment.&#8221;</em><br />
Mc Nealy, President and CEO Sun Microsystems, April 2, 2004<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/im-amazed-i-own-a-pc/andeverythingelse/20040403/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting rid of the dreaded o.e.c.i.r.AssertionFailedException</title>
		<link>http://www.netuality.ro/getting-rid-of-the-dreaded-oecirassertionfailedexception/andeverythingelse/20040325</link>
		<comments>http://www.netuality.ro/getting-rid-of-the-dreaded-oecirassertionfailedexception/andeverythingelse/20040325#comments</comments>
		<pubDate>Thu, 25 Mar 2004 17:23:30 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/getting-rid-of-the-dreaded-oecirassertionfailedexception/uncategorized/20040325</guid>
		<description><![CDATA[It you have ever written even the smallest standalone app using SWT and Jface library, then you must know (and hate!) org.eclipse.core.internal.runtime.AssertionFailedException. This exception has the very bad habit of substituting the initial one without keeping any trace of it. The official explanation is the following :
&#8220;Jface is not guaranteed to work in standalone mode. [...]]]></description>
			<content:encoded><![CDATA[<p>It you have ever written even the smallest standalone app using SWT and Jface library, then you must know (and hate!) org.eclipse.core.internal.runtime.AssertionFailedException. This exception has the very bad habit of substituting the initial one without keeping any trace of it. The official explanation is the following :<br/><br />
&#8220;Jface is not guaranteed to work in standalone mode. As a matter of fact, Jface tries to report different errors using the Eclipse plugin mechanism, thus provoking a fatal assertion failure which is the only exception being reported.&#8221;<br/><br />
<a HREF="http://www.ryanlowe.ca/blog/archives/001259.php" target="_new">Ryan Lowe</a> suggests <em>wrapping [the code] in a try/catch block temporarily</em>. Yeah sure this might just work if you know WHAT to wrap. What do you do when, after multiple commits and updates of the same source file modified by different people, you have the failed assertion ? Wrap in a try/catch every slice of code committed in the last few hours ? Hmmm &#8230; don&apos;t think so.<br/><br />
An interesting solution would be (as proposed by Ryan) to use aspects in order to wrap automatically each and every SWT call. But this might bring serious performance issues and I also have some doubts that it will catch everything.<br/><br />
But boy, aren&apos;t we lucky that Eclipse is opensourced ? Just by looking at the stack trace (which is the same over and over no matter where your real error is) you can spot the guilty : org.eclipse.core.internal.runtime.InternalPlatform (found in runtime.jar/runtimesrc.zip). The little bugger is Mr. <strong>private static boolean initialized</strong>. Putting it on true involves starting the platform, which is a quite complex process judging by the <em>loaderStartup(URL[] pluginPath, String locationString, Properties bootOptions, String[] args, Runnable handler) throws CoreException</em> method. Unfortunately, being a private variable means that reflection won&apos;t work and dynamic proxying won&apos;t work, either*. AKA Out Of Ideas (TM)<br/><br />
So, it&apos;s time to stop trying to be smart. I&apos;ll just be a rude dumb programmer and simply modify the source, recompile and replace the .class files in the runtime.jar. It&apos;s extremely simple yet sharply efficient:</p>
<ul>
<li>initialize &#8220;initialized&#8221; on true</li>
<li>in the method <em>private static void handleException(ISafeRunnable code, Throwable e)</em> replace all the content with the following line : <em>e.printStackTrace();code.handleException(e);</em>. A stack in the console is enough for me at this stage, but of course you may use your favorite logging infrastructure classes to report the exception. The <em>code.handleException</em> call has (at least in my app) the effect of displaying an innocuous dialog box telling the user that something went wrong. Just the right dose of details aka nothing at all (don&apos;t scare the poor user, please).</li>
</ul>
<p>Well, what&apos;s more to say ? This stupid trick simply works.<br/><br />
On second thought, I might use RCP. Maybe, in a future episode.<br/><br />
*AFAIK Please correct me if I&apos;m mistaking here.<br/><br />
PS That was quick &#8220;Setting the accessible flag in a reflected object of java.lang.reflect.AccessibleObject class allows reading/modifying a private variable that normally wouldn&apos;t have permission to. However, the access check can only be supressed if approved by installed SecurityManager.&#8221;. Humm, ok, so there IS a smarter solution after all. Left as an exercise for the reader <img src='http://www.netuality.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/getting-rid-of-the-dreaded-oecirassertionfailedexception/andeverythingelse/20040325/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploding phones and insightful Google ads</title>
		<link>http://www.netuality.ro/exploding-phones-and-insightful-google-ads/andeverythingelse/20040130</link>
		<comments>http://www.netuality.ro/exploding-phones-and-insightful-google-ads/andeverythingelse/20040130#comments</comments>
		<pubDate>Fri, 30 Jan 2004 16:42:44 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[AndEverythingElse]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.netoo.loco/exploding-phones-and-insightful-google-ads/uncategorized/20040130</guid>
		<description><![CDATA[




An interesting screenshot taken on the Inquirer site shows that GoogleAds might bring a lot of added value, from an informational point of view. Note that the original article wasn&apos;t mentioning the brand of the exploding phone.


PS Few days after this post, reloading the page article a few times, GoogleAds doesn&apos;t bring any Nokia reference, [...]]]></description>
			<content:encoded><![CDATA[<table>
<tr>
<td><img src="http://www.jroller.com/resources/aspinei/exploding.gif" align="left"/></td>
</tr>
<tr>
<td>An interesting screenshot taken on the <a href="http://www.theinquirer.net" target="_new">Inquirer</a> site shows that GoogleAds might bring a lot of added value, from an informational point of view. Note that the <a href="http://www.theinquirer.net/?article=13845" target="_new">original</a> article wasn&apos;t mentioning the brand of the exploding phone.</td>
</tr>
</table>
<p>PS Few days after this post, reloading the page article a few times, GoogleAds doesn&apos;t bring any Nokia reference, just neutral mobile phone shops. Good thing I&apos;ve made a screenshot <img src='http://www.netuality.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.netuality.ro/exploding-phones-and-insightful-google-ads/andeverythingelse/20040130/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
