Bez občasného zádrhele by byl život s počítačem pořádná nuda, a tak se sem tam nějaký soft obětuje a postará se o trochu té zábavy. Tentokrát spojily své síly (příliš) nová verze X11 a knihovna SWT (azureus, eclipse, filezilla, ...). Pokud vám po posledním update systému přestaly nabíhat aplikace využívající tuto knihovnu a v logu nacházíte hlášky na způsob
The error was 'BadAlloc (insufficient resources for operation)'.
(Details: serial 261 error_code 11 request_code 149 minor_code 5)
tak už teď víte, kde hledat problém.
Řešení číslo jedna je poměrně přímočaré - downgrade X11ek. Pokud se vám toto řešení z nějakého důvodu nelíbí, nebo ho použít nemůžete, můžete zkusit další možnost - vyřadit rozšíření MIT-SHM. Ani to bohužel není dokonalé, může dojít ke snížení výkonu grafického systému a některé programy/window managery (např. enlightement) se bez něj neobejdou vůbec. Pokud chcete jít touto cestou, přidejte do xorg.conf pasáž (případně rozšiřte již existující)
Section "Extensions"
Option "MIT-SHM" "no"
EndSection
a po restartu Xwindows by mělo být vše v pořádku.
Pokud jste si už nainstalovali výše zmíněnou verzi OpenSUSE (případně jinou distribuci postavenou na příliš nových knihovnách kolem X11), pravděpodobně dříve nebo později narazíte na malý problémeček - aplikace využívající AWT, jako třeba jconsole, okamžitě skončí s chybovou hláškou:
# ./jconsole
jconsole: xcb_xlib.c:52: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
Neúspěšně ukončen (SIGABRT)
Chybka se naštěstí dá poměrně snadno obejít nastavením magické proměnné prostředí
LIBXCB_ALLOW_SLOPPY_LOCK=1
JConsole nám běží a můžeme se těšit na další radovánky kolem upgrade...
Uživatele Eclipse určitě potěší uvolnění finální verze 3.3. Těšit se můžete například na vylepšený refaktoring (konečně bez nutnosti ukládání), doplňování kódu (i u zatím neimportovaných tříd), formátování kódu a jeho "očistění" při ukládání (pro lenochy neschopné používat aspoň automatický formátovač jak dělané...), využití novinek z JDK6 a další a další.
Closures dnes hýbou světem a tak se nemůžeme divit, že se objevil i návrh na jejich přidání do JML (Java Metadata Language). Lídři IT průmyslu jsou podle všech informací návrhem nadšeni, takže se nejspíš dočkáme jeho brzké implementace.
Bližší informace i s příklady použití najdete na M Easterově blogu.
Třídu java.util.ListIterator asi není nutné nikomu představovat, každý ji určitě zná, pravidelně používa a nikomu nebude dělat probém říct, co na výstup vypíše následující kousek kódu. Samozřejmě bez pročítání javadocu:).
ListIterator<Integer> li = Arrays.asList(1, 2, 3).listIterator();
System.out.print(li.next());
System.out.print(li.next());
System.out.print(li.previous());
System.out.print(li.next());
System.out.print(li.previous());
System.out.print(li.next());
System.out.print(li.next());
Máte kus kódu v C# a musíte ho pracně překlepat do Javy? Nebo nějakou oblíbenou dotnetí aplikaci a rádi byste jí spouštěli na čistě javím prostředí? Pak pro vás mám skvělou zprávu - je tu NET2Java!
Vypadá to, že pravidelné uvolňování vývojových verzí a jejich předčasné použití může přinést i nemilá překvapení. Na jedno narazil člověk prezentující se na fórech pod nickem bruehlicke. Jako spousta dalších se dočetl o nové feature přidané do JDK6 - možnosti specifikovat query pomocí anotací a jejich snadného provádění (bližší popis najdete třeba na Dablogu) a pravděpodobně ji i využil ve svém kódu. Pokud ano, dovedu si poměrně dobře představit jeho pocity po upgrade na build b104 a zjištění, že zmiňované interface kamsi zmizelo... I neváhal a svěřil se se svým problémem kolegům na fóru, kde se mu dostalo této odpovědi:
Každému jednou za čas prospěje, když se začte do cizích zdrojáků. Z dobrých se poučíme, jak to dělat, ze špatných naopak jak nedělat. Občas dojde k nějakému tomu 'a jooo, ono to jde i takhle' plácnutí do čela, případně člověk nevyjde nějaký čas z údivu. A přesně to se mi stalo, když jsem se naposledy zahrabal do zdrojových kódů k JDK7.
Spousta z vás už jistě četla příspěvky Romana Pichlíka, které zapsal na Dablogu koncem minulého roku. Pěkně a dopodrobna tam rozebírá některé novinky přidané do JDK6 stojící za jeho vyšším výkonem, vřele doporučuji k přečtení každému, kdo tak ještě neučinil. V posledním příspěvku pak na malém mikrobenchmarku ukazuje, jaký vliv nové fíčury mají. A tomuto mikrobenchmarku se podíváme na zoubek, zajímavá otázka totiž je, co on nám vlastně měří a co to vypovídá o schopnostech JVM.
Tak to vypadá, že dlouho oznamované a očekávané se stane skutečností. Podle serveru javalobby by měl dnes SUN uvolnit klíčové části Javy pod GPLv2. Zatím se můžeme těšit na HotSpot, javac, JavaHelp a implementace Java ME. Na další části si budeme muset počkat do příštího roku. Osobně jsem zvědavý, jakých vylepšení se teď HotSpot dočká od vyčkávající komunity a jak rychle bude využit v jiných free implementacích.
No a aby toho nebylo na pondělí málo, o výkendu vyšla Release Candidat verze JDK 6. K dispozici jsou, stejně jako u předchozích buildů, i zdrojové kódy a JavaDoc.
Update: Malá třešnička na dortu - uvolnění se má dočkat také starý dobrý Duke, takže pokud to poslední, co vám chybí ke štěstí, je tričko nebo hrnek s ním, hurá do toho!;)
Eyal Lupu na svém blogu rozebírá novou feature přidanou do JDK6 - možnost použití hvězdičky v definici classpath. Novou vlastnost ocení asi každý, kdo z nás někdy nelepil dlouhou příkazovou řádku plnou jarů, ať už ručně nebo skriptem, že? Takže nyní už pěkně jednoduše:
Hrajete si také rádi s novinkami a Mustang, teda, nově JDK6, už vám připadá nudně stabilní? Na stránkách java.net se rozjíždí projekt JDK7. Stejně jako u JDK6 jsou kromě binárek a dokumentace dispozici i kompletní zdrojové kódy. Pokud si chcete vyzkoušet zcela nový a čerstvě upečený Build 001 (pozor, má povolení zabíjet:), máte příležitost.
Po nainstalování a spuštění uvidíte něco takového:
java -version java version "1.7.0-ea" Java(TM) SE Runtime Environment (build 1.7.0-ea-b01) Java HotSpot(TM) Client VM (build 1.7.0-ea-b01, mixed mode)
Ještě poznámka k pojmenování - vzhledem k plánovanému uvolnění Javy SUN opouští familiární pojmenování verzí, takže nadále už žádný Mustang a Delfín ale jen suché JDK6 a JDK7. Budiž jim datasféra lehká...
A máme tu další update Tigra. Opět přináší řadu bugfixů, mimo jiné bylo vyřešeno nekolik problémů způsobujících snížení výkonu aplikací. Měl by se například zlepšit výkon Garbage Collectoru v případě, že aplikace používá velká pole, zastánce "čistého" programování určitě potěší zrychlení polymorfních volání a tím pádem rychlejší volání metod objektů typovaných na interface.