<?xml version="1.0" encoding="iso-8859-2"?>
<rss version="2.0">
  <channel>
    <title>Štěpán Roh - Alive But Sleepy</title>
    <link>http://alivebutsleepy.srnet.cz</link>
    <description>Personal pages of Štěpán Roh.</description>
    <language>en</language>
    <lastBuildDate>Tue Mar  6 19:59:54 2012</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <webMaster>webmaster@srnet.cz</webMaster>
    <item>
<title>Confessions of a Developer</title>
<link>http://alivebutsleepy.srnet.cz/confessions-of-a-developer</link>
<category>en</category>
<category>java</category>
<category>personal</category>
<category>programming</category>
<description>
&lt;p&gt;

It was fall of 2000 and I was freshly kicked off the University and broke. Being broke I needed to get a job quickly so I turned at this software development house my friend started a few years earlier.
(I was so broke that I had to ask for advance paycheck before even working a single day).

&lt;!-- more --&gt;

&lt;h4&gt;A Simple Task&lt;/h4&gt;

&lt;p&gt;

I was immediately assigned a simple task - create a Multimedia
Digital Archive. In Java. As a sole architect and developer. Bear in mind that I had one semester of Java, wrote in it one application which was in fact a port of my older school project, a web server written in C.
I remember thinking:
"What a weird language that Java, there are no global variables!" My only qualification was that I did a rewrite of MDA's Perl predecessor as a summer job a year before.

&lt;p&gt;

To be honest I &lt;em&gt;did not&lt;/em&gt; work on something the size of future MDA - the Perl thing I worked on was just a tool pulling text and images from various sources, normalizing them and storing them on a disk.
Two PHP applications then allowed to browse, search and modify them. The requirement for new MDA was simple: replace the Perl tool with a real server, but keep those two applications compatible,

&lt;h4&gt;Architect is Born&lt;/h4&gt;

&lt;p&gt;

As a freshly appointed architect I knew I had to proceed in a right way. So I fired up Dia and designed the whole system as a huge class diagram. That felt great and I was ready to get dirty.
Java IDEs were huge, slow, often crashing and
ugly looking back then so I used my trusted too-sexy-for-syntax-highlighting Joe. In a no time I had the server written and running. It had everything - socket server with telnet-like interface to be used by PHP front-end,
whole-in-memory highly optimized set of B-trees as an index and Perl as a scripting language.

&lt;h4&gt;XML Rules!&lt;/h4&gt;

&lt;p&gt;

As time quickly passed, we realized that having PHP front-end is not satisfying anymore and devised a plan to implement web UI in Java. Being totally ignorant of what goes on in the world of enterprise Java, I went past all
web frameworks and chose the basis of them all - Java servlets. Combined with a new favorite of ours - XML. Data were exported as XML by the persistence and made into HTML by XSLT. It was very elegant, took a long time
to master, was hard to extend (new report page? I don't think so) and slow as hell. But worked.

&lt;p&gt;

However, the road did not end there, the biggest thing of them all was yet to come - we needed a rich client. By that time I made a peace with Java IDE named NetBeans and used that for GUI design and coding.
That solved the problem of designing UI without seeing it, but I was facing bigger problem: how should client and server communicate?

&lt;h4&gt;The Abomination&lt;/h4&gt;

&lt;p&gt;

Telnet-like interface did not seem modern, especially when both parties were coded in Java so I turned to our trusted technology - XML and created
the single-most--words-cannot-describe-it-properly--remote-protocol-in-the-world: remote DOM. I'll wait for you to process that&amp;hellip; I can wait&amp;hellip; OK, you're back. DOM is better known at the browser side of the web
where it seems to serve its purpose. However in the server world, it is a terrible nightmare to work with. It is not Java-friendly, uses strange patterns and consumes a lot of memory. And I made it working
&lt;em&gt;across the network&lt;/em&gt;. And I don't mean that it supported a subset of it. No, no, no. It was fully working, remotely-operated DOM with all those Nodes and Elements and Attributes and who-knows-what-else.

&lt;h4&gt;Epilogue&lt;/h4&gt;

&lt;p&gt;

Fortunately MDA got replaced later and company is now defunct so noone can experience for themselves what 22 year-old developer was capable of and what still haunts him in the sleep.

</description>
<pubDate>Sun, 08 Jan 2012 22:47:00 CET</pubDate>
</item>
<item>
<title>GomokuJS - Play Gomoku at home, at work and on the road</title>
<link>http://alivebutsleepy.srnet.cz/gomokujs</link>
<category>en</category>
<category>games</category>
<category>software</category>
<category>web</category>
<description>
&lt;p class="align_center"&gt;
&lt;img class="align_center" src="gomokujs.png" alt="Screenshot of GomokuJS."&gt;

&lt;p&gt;

&lt;a href="http://games.srnet.cz/GomokuJS"&gt;GomokuJS&lt;/a&gt; is a little web-based game of &lt;a href="http://en.wikipedia.org/wiki/Gomoku"&gt;Gomoku&lt;/a&gt;.
One can play against computer (I admit that not very bright one), against another player on the same computer and even over network with a friend.

&lt;p class="align_center"&gt;
&lt;a class="button" href="http://games.srnet.cz/GomokuJS"&gt;PLAY&lt;/a&gt;

&lt;p&gt;

&lt;small&gt;
Supported are recent versions of Mozilla Firefox, Google Chrome, Opera, Internet Explorer, Safari, Konqueror
(with few visual glitches), iPhone/iPad, mobile devices with Opera Mobile (tested on
S60-based Nokia E71) and Android-based devices (unfortunately without network play).
&lt;/small&gt;

</description>
<pubDate>Sat, 20 Nov 2010 17:02:00 CET</pubDate>
</item>
<item>
<title>A Little Bit Of Music</title>
<link>http://alivebutsleepy.srnet.cz/a-little-bit-of-music</link>
<category>en</category>
<category>fun</category>
<category>music</category>
<category>travel</category>
<description>
&lt;p&gt;

Queen medley played by &lt;a href="http://www.harmonierohrdorf.ch"&gt;Harmoniemusik Rohrdorf&lt;/a&gt; recorded on July 4th at Filisur.

&lt;p class="align_center"&gt;

&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bR31zY8anMY&amp;hl=cs&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/bR31zY8anMY&amp;hl=cs&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;

</description>
<pubDate>Sun, 30 Aug 2009 16:08:00 CET</pubDate>
</item>
<item>
<title>Search and Comments (and Twitter)</title>
<link>http://alivebutsleepy.srnet.cz/search-and-comments</link>
<category>cs</category>
<category>en</category>
<category>personal</category>
<category>web</category>
<description>
&lt;p&gt;

Web 2.0, here I (slowly) come. Comments, trackback (powered by &lt;a href="http://haloscan.com"&gt;HaloScan.com&lt;/a&gt;)
and &lt;a href="/search"&gt;site search&lt;/a&gt; (powered by &lt;a href="http://google.com"&gt;Google&lt;/a&gt;) are now just
a click away.

&lt;p&gt;

&lt;em&gt;(Day later.)&lt;/em&gt; Added &lt;a href="http://twitter.com/stepanroh"&gt;Twitter&lt;/a&gt; box on
top (where, besides other stuff, server status of &lt;a href="http://srnet.cz"&gt;srnet.cz&lt;/a&gt;
will be published using hashtag &lt;tt&gt;#srnetcz&lt;/tt&gt;).

</description>
<pubDate>Tue, 16 Jun 2009 22:24:00 CET</pubDate>
</item>
<item>
<title>Práce v Polarionu</title>
<link>http://alivebutsleepy.srnet.cz/job-at-polarion</link>
<category>cs</category>
<category>java</category>
<category>job</category>
<category>polarion</category>
<category>programming</category>
<description>
&lt;p&gt;

&lt;img class="inline" alt="Polarion Software Logo" src="http://www.polarion.com/img/logos/polarion_logo_60x68.gif"&gt;

&lt;em&gt;Aktualizováno.&lt;/em&gt;

&lt;p&gt;

Oddělení výzkumu a vývoje &lt;a href="http://www.polarion.com"&gt;Polarion Software&lt;/a&gt; sídlící v Praze
shání vývojáře v Javě a pracovníky technické podpory.
Alespoň základní orientace v oboru a dobrá znalost angličtiny nutná.
Více informací poskytnu na požádání &lt;a href="mailto:src@post.cz"&gt;mailem&lt;/a&gt;.

</description>
<pubDate>Sun, 14 Jun 2009 23:06:00 CET</pubDate>
</item>
<item>
<title>shttpd/0.3.1 - give credit where credit is due</title>
<link>http://alivebutsleepy.srnet.cz/shttpd-0.3.1</link>
<category>en</category>
<category>foss</category>
<category>linux</category>
<category>perl</category>
<category>programming</category>
<category>software</category>
<category>web</category>
<description>
&lt;p&gt;

The reason of this blogpost is to give credit where credit is due:
Rimmi Devgan and Avanti Limaje, two MS students with the Computer Science Department of the State
University of New York at Stony Brook found a serious security vulnerability in 
my little web server &lt;a href="/software"&gt;software&lt;/a&gt; called
&lt;a href="http://srnet.cz/~stepan/en/sw/shttpd.shtml"&gt;shttpd&lt;/a&gt;.
I wanted to thank them in public (as I call this dark and lonely corner of the web).

&lt;p&gt;

The release made it to the &lt;a href="http://www.root.cz/clanky/softwarova-sklizen-20-5-2009/#shttpd"&gt;Root.cz&lt;/a&gt;,
online Czech magazine about Linux. Have no idea why. Maybe because I made the first
release in 9 years, probably the record in history of software. Or maybe not.

</description>
<pubDate>Sun, 14 Jun 2009 20:46:00 CET</pubDate>
</item>
<item>
<title>Unreliable System.nanoTime()</title>
<link>http://alivebutsleepy.srnet.cz/unreliable-system-nanotime</link>
<category>en</category>
<category>java</category>
<category>programming</category>
<category>windows</category>
<description>
&lt;p&gt;

Java's &lt;tt&gt;System.nanoTime()&lt;/tt&gt; is better than
&lt;tt&gt;System.currentTimeMillis()&lt;/tt&gt;, right? Wrong!

&lt;p&gt;

There is a subtle price paid for better accuracy of
&lt;tt&gt;System.nanoTime()&lt;/tt&gt; - on various platforms its value is taken from
various sources. These sources may sometimes fail. And if they fail, garbage
gets returned (most probably zero, but who knows for sure). This may seem
like a very rare situation, but combination of hypervisor Xen and Windows
produced garbage too much for our liking. Maybe it was caused by &lt;a
href="http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=1146"&gt;Xen bug
#1146&lt;/a&gt;.

&lt;p&gt;

So if you measure something with &lt;tt&gt;System.nanoTime()&lt;/tt&gt;, check whether
the measurement is bigger than zero and (as we also did) whether it does not
differ too much (like 1 second) from the measurement done using the good old
&lt;tt&gt;System.currentTimeMillis()&lt;/tt&gt;.

</description>
<pubDate>Thu, 17 Jul 2008 22:08:00 CET</pubDate>
</item>
<item>
<title>Navigace Garmin a Linux</title>
<link>http://alivebutsleepy.srnet.cz/navigace-garmin-a-linux</link>
<category>cs</category>
<category>garmin</category>
<category>gps</category>
<category>linux</category>
<description>
&lt;p&gt;

Pár rad, jak z Linuxu pracovat s navigacemi &lt;a
href="http://www.garmin.cz/"&gt;Garmin&lt;/a&gt;, konkrétně s typem &lt;a
href="http://www.garmin.cz/index.php?section=2001&amp;category=outdoor&amp;sub_category=outdoor_mapove&amp;view=detail&amp;product=630"&gt;Garmin
eTrex Legend HCx&lt;/a&gt;.

&lt;p&gt;

&lt;h4&gt;Přístup na microSD kartu&lt;/h4&gt;

&lt;p&gt;

Připojte navigaci dodaným kabelem do USB portu a zvolte &lt;i&gt;Hlavní menu /
Nastavení / Propojení / USB disková jednotka&lt;/i&gt;. Micro SD karta bude
vzápětí v Linuxu rozpoznána jako USB Mass Storage tedy stejně jako např. USB flash disk. Je možné kopírovat data z karty i na
ni.

&lt;p&gt;

Mapy a dodatečné mapové podklady jsou v adresáři &lt;tt&gt;garmin&lt;/tt&gt;, prošlé trasy ukládané
na kartu jsou ve formátu GPX uloženy přímo v kořenovém adresáři (pojmenované stejně jako v
navigaci).

&lt;p&gt;

Navigaci uvedete do původního stavu jedním stisknutím tlačítka pro
zapnutí/vypnutí přístroje.

&lt;h4&gt;Přístup do vnitřní paměti&lt;/h4&gt;

Navigace má ještě vnitřní paměť, do které se ukládají prošlé trasy, značky,
cesty atd. Tato paměť se dá zpřístupnit utilitou &lt;a
href="http://www.gpsbabel.org/"&gt;GPSBabel&lt;/a&gt;. Je možné využít dva způsoby
spojení:
přímé USB a emulaci sériové linky. Standardně po přípojení navigace USB
kabelem se v mém systému natáhne modul &lt;tt&gt;garmin_gps&lt;/tt&gt;, který
zprostředkovává emulaci, takže jsem první možnost ani nezkoušel.

&lt;p&gt;

K zálohování cest (routes), prošlých tras (tracks) a značek (waypoints)
poslouží takovéto volání:

&lt;pre&gt;
gpsbabel -r -t -w -i garmin -f /dev/ttyUSB0 -o gpx -F internal.gpx
&lt;/pre&gt;

&lt;tt&gt;/dev/ttyUSB0&lt;/tt&gt; je jméno zařízení emulované sériové linky přiřazené systémem
při nahrání modulu.

&lt;p&gt;

Výsledný GPX soubor je možno nahrát do MapSource (viz níže) a vše si prohlédnout na mapě.

&lt;p&gt;

Údaje je možné i zpětně zapsat do navigace.

&lt;h4&gt;MapSource&lt;/h4&gt;

&lt;p&gt;

MapSource je mapová aplikace dodávaná k navigacím Garmin, která umožňuje
nahrávání a prohlížení map a práci s trasami, cestami i značkami.

&lt;p&gt;

Instalace přes &lt;a href="http://www.winehq.org/"&gt;Wine&lt;/a&gt; je triviální a
aplikace funguje naprosto bez problémů, samozřejmě mimo přímého propojení s navigací.
Jediná věc, co nefungovala byl automatický update na novější verzi, ale
ruční spuštění &lt;a href="http://www8.garmin.com/support/mappingsw.jsp"&gt;update z webu&lt;/a&gt;
prošlo bez problémů.

&lt;p&gt;

Přes Wine lze nainstalovat i jednotlivé mapy, např. dodávanou &lt;a
href="http://www.garmin.cz/index.php?section=2009&amp;category=mapy&amp;sub_category=&amp;view=detail&amp;product=616"&gt;TOPO
Czech 1.20&lt;/a&gt; či &lt;a
href="http://www.garmin.cz/index.php?section=2009&amp;category=mapy&amp;sub_category=mapy_automapy&amp;view=detail&amp;product=668"&gt;Atlas
Czech 7&lt;/a&gt;, který je k dispozici všem vlastníkům mapy TOPO Czech. Mapy je
třeba &lt;a href="http://www.garmin.cz/unlock"&gt;odemknout 25ti místným
kódem&lt;/a&gt;, požadované &lt;i&gt;GPS Unit ID&lt;/i&gt; lze najít v navigaci v &lt;i&gt;Hlavní menu /
Nastavení / Systém / [MENU] / Verze softwaru&lt;/i&gt;, &lt;i&gt;sériové číslo GPS&lt;/i&gt; pak v
prostoru baterií či na krabici.

&lt;h4&gt;POI&lt;/h4&gt;

&lt;p&gt;

POI (Points Of Interest = body zájmu) lze stáhnout z několika míst na
internetu, namátkou &lt;a
href="http://www.poiplaza.com"&gt;POI plaza&lt;/a&gt;, &lt;a
href="http://www.gps-waypoints.net"&gt;GPS-Waypoints&lt;/a&gt; a &lt;a
href="http://poi.cz"&gt;poi.cz&lt;/a&gt;.

&lt;p&gt;

&lt;a href="http://www8.garmin.com/products/poiloader/"&gt;POI Loader&lt;/a&gt; sice lze
přes Wine nainstalovat, ale odmítá řádně fungovat. Naštěstí lze použít výše
zmíněný GPSBabel:

&lt;pre&gt;
gpsbabel -i VSTUPNÍ_FORMÁT -f SOUBOR_S_POI -o
garmin_gpi,category="KATEGORIE",bitmap=SOUBOR_S_IKONOU -F
VÝSTUPNÍ_SOUBOR.gpi
&lt;/pre&gt;

Navigace Legend HCx kategorie podle všeho ignoruje (všechny POI jsou označeny jako
&lt;i&gt;uživatelské body zájmu&lt;/i&gt;), ale jiné modely ji mohou podporovat.

&lt;p&gt;

Výstupní .gpi soubor se nahraje na microSD kartu do adresáře
&lt;tt&gt;garmin/poi&lt;/tt&gt;.

&lt;h4&gt;Nahrávání map&lt;/h4&gt;

&lt;p&gt;

Kvalitním zdrojem ověřených map je &lt;a
href="http://fatbozz.towerofglass.net/garmin_mapy.php"&gt;fatbozz.towerofglass.net&lt;/a&gt;.
Pod Linuxem přímo funguje popisovaný postup pro konverzi map z &lt;a
href="http://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt;.

&lt;p&gt;

Pro použití v navigaci je třeba vytvořit na microSD kartě v adresáři
&lt;tt&gt;garmin&lt;/tt&gt; soubor &lt;tt&gt;gmapsupp.img&lt;/tt&gt;. K tomu by teoreticky měl
sloužit program &lt;a
href="http://cgpsmapper.com/buy.htm"&gt;sendMap&lt;/a&gt;. Bohužel se mi nepodařilo
docílit úspěchu při práci s mapami od Garminu.

&lt;h4&gt;Ostatní&lt;/h4&gt;

&lt;p&gt;

K &lt;a href="http://www8.garmin.com/products/webupdater/"&gt;update systemoveho software v
navigaci&lt;/a&gt; je potřeba instalace Windows či Mac OS X.

</description>
<pubDate>Wed, 09 Jul 2008 16:30:00 CET</pubDate>
</item>
<item>
<title>České datové zdroje pro Tellico</title>
<link>http://alivebutsleepy.srnet.cz/ceske-datove-zdroje-pro-tellico</link>
<category>cs</category>
<category>linux</category>
<category>perl</category>
<category>software</category>
<category>tellico</category>
<description>
&lt;p&gt;

&lt;i&gt;Aktualizováno.&lt;/i&gt;

&lt;p&gt;

&lt;a href="http://periapsis.org/tellico/"&gt;Tellico&lt;/a&gt; je vynikající správce
sbírek pro KDE. Jediné, co mi v něm chybí, je nějaký český datový zdroj
pro knihy. I napsal jsem pár skriptů, které umožňují vyhledávání podle
ISBN a umí i stáhnout náhled přebalu:

&lt;ul&gt;
&lt;li&gt;&lt;a href="tellico_dumknihy.pl"&gt;tellico_dumknihy.pl&lt;/a&gt; pro
&lt;a href="http://www.dumknihy.cz"&gt;Dům knihy Kanzelsberger&lt;/a&gt;
&lt;li&gt;&lt;a href="tellico_dvt.pl"&gt;tellico_dvt.pl&lt;/a&gt; pro
&lt;a href="http://www.sckn.cz"&gt;Svaz českých knihkupců a nakladatelů&lt;/a&gt;
&lt;li&gt;&lt;a href="tellico_knizniweb.pl"&gt;tellico_knizniweb.pl&lt;/a&gt; pro
&lt;a href="http://www.knizniweb.cz"&gt;Knižní web&lt;/a&gt;
&lt;li&gt;&lt;a href="tellico_kosmas.pl"&gt;tellico_kosmas.pl&lt;/a&gt; pro
&lt;a href="http://www.kosmas.cz"&gt;KOSMAS.cz&lt;/a&gt;
&lt;/ul&gt;

&lt;!-- more --&gt;

&lt;p&gt;

Skripty jsou napsány v Perlu a ke svému běhu potřebují následující moduly
(všechny se dají stáhnout z
&lt;a href="http://www.cpan.org/"&gt;CPAN&lt;/a&gt;):

&lt;ul&gt;
&lt;li&gt;LWP::UserAgent
&lt;li&gt;IO::String
&lt;li&gt;XML::Writer
&lt;li&gt;HTML::TreeBuilder
&lt;li&gt;Text::Iconv
&lt;li&gt;MIME::Base64
&lt;li&gt;Digest::MD5
&lt;li&gt;Encode
&lt;/ul&gt;

&lt;p&gt;

Do Tellico se skripty instalují přes &lt;em&gt;Nastavení / Nastavit Tellico&amp;#8230; /
Datové zdroje / Nový&amp;#8230;&lt;/em&gt; s následujícími parametry:

&lt;ul&gt;
&lt;li&gt;Druh zdroje: Externí program
&lt;li&gt;Druh sbírky: Sbírka knih
&lt;li&gt;Druh výsledku: Tellico
&lt;li&gt;Cesta k programu: &lt;em&gt;cesta ke skriptu&lt;/em&gt;
&lt;li&gt;Parametry: &lt;em&gt;zaškrtnout ISBN&lt;/em&gt;
&lt;/ul&gt;

V některých verzích je ještě třeba do políčka vedle ISBN zapsat ručně "%1" (bez
uvozovek), ačkoliv je tato hodnota již předvyplněna (poděkování patří Jakubu Fialovi).

&lt;p&gt;

Skripty musí být spustitelné (&lt;tt&gt;chmod +x&lt;/tt&gt;).

&lt;p&gt;

Ošetření chybových stavů není valné, ale pro běžné používání to stačí.

</description>
<pubDate>Wed, 05 Mar 2008 20:58:00 CET</pubDate>
</item>
<item>
<title>Java Mystery Of (Un)Closed Sockets</title>
<link>http://alivebutsleepy.srnet.cz/java-mystery-of-unclosed-sockets</link>
<category>en</category>
<category>java</category>
<category>programming</category>
<category>windows</category>
<description>
&lt;p&gt;

Windows has a limit on number of existing client network sockets. I recently
ran into this when I started to close sockets which were previously left to
be timed out. That was certainly a suprprise, because naturally one would thought that
closed socket will be, well, closed much earlier than unclosed one.

&lt;p&gt;

I created a small test case:

&lt;pre&gt;
    public static void main(String[] args) throws Exception {
        int i = 0;
        while (true) {
            Socket sock = openSocket();
            OutputStream os = sock.getOutputStream();
            os.write("GET / HTTP/1.1\n\n".getBytes());
            InputStream is = sock.getInputStream();
            while (is.read() != -1) {
                // void
            }
            is.close();
            os.close();
            sock.close();
            System.out.println("" + i++);
        }
    }


    private static Socket openSocket() throws Exception {
        InetAddress address = InetAddress.getByName("localhost");
        Socket socket = new Socket(address, 80);
        socket.setReuseAddress(true);
        socket.setTcpNoDelay(true);
        socket.setKeepAlive(true);
        socket.setSoLinger(true, 0);
        return socket;
    }
&lt;/pre&gt;

&lt;p&gt;

The &lt;code&gt;socket.setSoLinger(true, 0)&lt;/code&gt; should force the TCP connection
to be dropped immediately with connection reset when socket is closed.

&lt;p&gt;

I tried that (and modifications without setting of &lt;tt&gt;SO_LINGER(0)&lt;/tt&gt; and
without closing the streams and socket) on Windows XP Professional
connecting to Apache 2.0.59 and got this (the numbers differ between
executions, but there is a general trend visible in a number of successfully
allocated sockets):

&lt;table class="align_center"&gt;
&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;closed with &lt;tt&gt;SO_LINGER(0)&lt;/tt&gt;&lt;/th&gt;&lt;th&gt;closed normally&lt;/th&gt;&lt;th&gt;unclosed&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align="center"&gt;Java 5&lt;/td&gt;&lt;td align="center"&gt;less&lt;/td&gt;&lt;td align="center"&gt;more&lt;/td&gt;&lt;td align="center"&gt;more&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align="center"&gt;Java 6&lt;/td&gt;&lt;td align="center"&gt;more&lt;/td&gt;&lt;td align="center"&gt;less&lt;/td&gt;&lt;td align="center"&gt;less&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

Fortunately Java 6 behaves more logically. But, of course, anyone allocating that many sockets should be punished.

</description>
<pubDate>Mon, 03 Mar 2008 20:40:00 CET</pubDate>
</item>

  </channel>
</rss>

