Generování self-signed certifikátu v Javě

Kvůli projektu WinStrom a hlavně jeho novému serveru, jsme potřebovali při prvním spuštění systému vygenerovat self-signed certifikát. Certifikát totiž nemůže být podepsán žádnou certifikační autoritou, protože je možné aplikaci libovolně instalovat a jenom bychom vše zkomlpikovali (podobně je to i s SSH klíči při instalaci Linuxu).

Protože jsme potřebovali podporu více platforem a protože nechceme komplikovat instalaci a detekci nástrojů, nemohli jsem použít ani openssl ani keytool.
Pokračování textu Generování self-signed certifikátu v Javě

Jak na tichou instalaci Javy (JRE)

Představte si situaci, kdy máte desktopovou aplikaci napsanou v Javě a rádi byste ji formou instalačního balíčku pro Windows distribuovali. V takovém případě potřebujete mimo jiné zajistit, aby se korektně doinstalovalo JRE v případě, kdy dosud v systému není nainstalováno (či je ve špatné verzi). Uplynulý měsíc jsme řešili obdobný problém.

V našem případě se jednalo o instalační program napsaný v Nullsoft Installeru, který po detekci nainstalovaného JRE umožňoval případnou instalaci Javy. Instalační balíček JRE podporuje několik parametrů spuštění, které umožní tichou instalaci Javy, což je řešení, které se hodí v řadě případů. Problémem u tiché instalace Javy v klasickém instalátoru pro Windows je ten, že uživatel nemá viditelnou odezvu a než se Java tiše nainstaluje, může nabýt dojmu, že instalační program tzv. zamrzl. Pro tyto případy je lepší spustit instalaci s parametrem /passive, při které se zobrazí pouze okno s průběhem instalace JRE a ze strany uživatele není nutná žádná interakce.

HTML – kontrola vstupu

Při psaní webových aplikací člověk narazí na nutnost umožnit uživateli zadat text pomocí WYSIWYG HTML editorů (jako jen napřílkad FCKEditor). V tu chvíli se každý rozumný programátor začne obávat nejen o bezpečnost, ale i o vizuální podobu stránky (uživatel použije zelené písmo na žlutém pozadí či zkopírování textu přes schránku z wordu). Nevyhneme se tak nutnosti kontroly uživatelem zadaného HTML a odstranění nepovolených HTML značek, atributů a entit a inline kaskádových stylů.

Na stejný problém jsme samozřejmě narazili i my při psaní nového modulu komunit do portálu EDU.cz.

Chtěl bych se s vámi podělit o způsob, jakým jsme tento problém vyřešili my.
Pokračování textu HTML – kontrola vstupu

Odháčkování

Snad každý český programátor narazil na problém odstranění diakritiky z textu (tzv. odháčkování). Pro tyto účely jsem si kdysi vytvořil jednoduchou mapovací tabulku pro znaky v kódování ISO-8859-2.

Nyní jsem v Javě potřeboval něco podobného a našel jsem lepší řešení:

	        String decomposed = java.text.Normalizer.normalize(string, Normalizer.Form.NFD);
	        return  decomposed.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");

Celé to funguje tak, že se znak (např. Á) převede na jeho rozloženou (dekomponovanou) formu (např. A ‚). Znak je tedy převeden na dva znaky. Následně se všechny kombinované diakritické znaky odstraní (háčky, čárky, kroužky, …) pomocí regulárního výrazu. Unicodová tabulka obsahuje téměř pro každý znak i jeho přepis na dekomponovanou formu a tak by uvedené řešení mělo fungovat na většinu jazyků světa.

Firefox a fragmentace paměti

Nedávno jsem narazil na článek Memory fragmentation, zabývající se jedním z důvodů vysoké náročnosti firefoxu na paměť – tímto důvodem je fragmentace paměti.

Vždycky se tvrdívalo, že Java je pomalá a paměťově nenažraná. Aplikace napsané v Javě ovšem fragmentací paměti netrpí právě díky použití kopírovacího garbage collectoru, který vždy používaná data „sesype“ na začátek přidělené paměti.

Navíc si k tomuto problému přidejte fakt, že části paměti firefoxu spravují pomocí reference countingu. Reference counting je obvykle pomalejší (díky zamykání a zvyšování reference, i když i s tím se dá poprat), paměťově náročnější a navíc trpí problémy s cyklickými závislostmi.

Člověka tak napadne, že možná nastál čas pro použití garbage collectoru podobnému tomu v Javě …