Přeskočit na hlavní obsah

Příspěvky

Zobrazují se příspěvky z 2008

Počítáme v Javě (od sčítání k nelineárnímu modelování)

Tento záznam měl původně obsahovat jen malý komentář ke knihovně Math z Apache commons, ale trochu se to psaní rozjelo. Doufám, že vás to neodradí. Začínáme počítat Většina programátorů v Javě asi umí pracovat s čísly a dokáže si dobře spočítat, co by měl jejich program dělat. Jestli to potom opravdu dělá je věc druhá. Člověk si při učení Javy většinou začíná hrát s jednoduchými operátory (+ - * / %) a primitivními typy (int, double), po čase začne zkracovat (++ *= ...), sem tam použije bitové operace (| & ~ << >> >>>) a už se mu zdá, že je za vodou. Ale pak narazí na problémy. Další level Třeba taková nevinná konstrukce dělení. Žádné neukončené desetiné rozvoje nebo nedejbože dělení nulou. double ctvrtina = 1 / 4; System.out.println(ctvrtina); //0.0 WTF? Stačí zapomenout, že výsledkem dělení celých čísel je opět celé číslo a máme oheň na střeše. Další nástrahy se skrývají v číslech s plovoucí desetinou čárkou a s tím související nutností neustále zaokrouh…

EBookME 2.5 a JSignPdf 0.7

Trocha reklamy po ránu Mé open source Java projekty EBookME a JSignPdf se dočkaly nových verzí. Neváhejte je vyzkoušet a okomentovat. EBookME je aplikace, která slouží k vytváření elektronických knih pro mobilní zařízení (mobily, PDA). Skládá se ze dvou modulů - packager a reader. Packager je Java SE aplikace (Swing/Console/Applet), která generuje ze vstupního textu aplikace pro mobily. Základ pro tyto mobilní aplikace (ebooky) tvoří modul Reader, což je Java ME MIDlet pracující nad MIDP-1.0, CLDC-1.0. Novinkami ve verzi EBookME 2.5 jsou uživatelem definované bookmarky v Readeru, možnost ukládání projektu v Packageru, lepší integraci do Windows a experimentální podporu Tamilštiny (chuťovka v Javě). JSignPdf je Swingove GUI pro digitální podepisování PDF dokumentů. Využívá knihovnu iText a zvládá pracovat i s kódovanými dokumenty. Verze 0.7 přidává podporu viditelných podpisů (text nebo ikona na některé stránce PDF). Do další verze je plánováno i ověřování podpisů v PDF. Obě aplikace…

A všichni si rozumíme 2 - klávesové zkratky

Psali jste někdy lokalizované aplikace ve Swingu? A jak jste řešili klávesové zkratky (Mnemonics) pro různé jazyky? Já jsem se při programování JSignPdf rozhodl použít přístup, který znám z Delphi. V resource řetězcích vložím ampersand (&) před písmeno, které má být použito jako klávesová zkratka. Když chci zobrazit znak ampersand, tak napíšu dva za sebe. A jak to funguje v kódu? Mám wrapper pro ResourceBundle, který nabízí mimo metod pro přístup k lokalizovaným stringům i metodu, která vrací MnemonicIndex (pozici znaku, který je použit jako klávesová zkratka). /** * Returns message for given key from active ResourceBundle * @param aKey name of key in resource bundle * @return message for given key */ public String get(final String aKey) { String tmpMessage = bundle.getString(aKey); if (tmpMessage == null) { tmpMessage = aKey; } else { tmpMessage = tmpMessage.replaceAll("&([^&])", "$1"); } return tmpMessage; } /** * Returns index o…

Acegi - logujeme loginy

Používáte-li pro správu přístupu k vaší webové aplikaci framework Acegi, možná se vám bude hodit zaznamenávat uživatelské přístupy (platné loginy) někam do databáze. Zde je jeden ze způsobů jak se s tímto problémem vypořádat. Následující přiklad používá Hibernate a databázi Oracle. Nejdříve si připravím vlastní metodu pro zápis do databáze v DAO. Umístím ji do třídy cz.mujpackage.dao.UserDao, která rozšiřuje org.springframework.orm.hibernate3.support.HibernateDaoSupport a poskytuje metody pro správu uživatelů, rolí, apod. Pro zvýšení výkonu použiji v Hibernate SQLQuery namísto vytváření instance třídy modelu a jejího ukládání pomocí metody save(...). /** * Adds log entry to table AUTH_LOG (Oracle database form - pk_sequence has to be configured) * @param aName username * @param aRemoteAddress remote address of request */ public void logAuthenticationSuccess(final String aName, final String aRemoteAddress) { final HibernateCallback callback = new HibernateCallback() { public Ob…

Jak na Excel 5 - knihovna JExcelApi

Konečně se v našem seriálu dostáváme k čistě javovým implemtacím Excelového formátu. Začneme knihovnou Java Excel API (JExcelApi), kterou vytvořil Andy Khan a uvolnil pod licencí GNU LGPL. Co tato knihovna umí zajímavého? vytváření a čtení XLS souborůformátování buněkpráci se vzorcivkládání PNG obrázkůkopírování grafů (vytváření nových podporováno není) Knihovna není nijak rozsáhlá, takže se dá v API pohodlně orientovat. Zajímavější pro vás může být informace, co mi na této knihovně vadí. Tady jsou mé připomínky: odlišný přístup k dokumentům při čtení a při zápisu (třídy Workbook a WritableWorkbook nemají ani společný interface)práce s čisly podporuje pouze typ double, osobně bych uvítal např. i BigDecimalchybí jakákoliv podpora pro makra (ani při kopírování nezůstanou zachována)nepodporuje automatickou šířku sloupce (Auto Fit Selection)nelze nastavit typ buňky (viz příklad - vložím vzorec jehož výsledkem je text, ale JExcelApi si při čtení myslí, že to je číslo)tvar vzorců neodpov…

OpenOffice.org - spojení obsahu buněk

Tak se po prosincové dovolené vracím k počítači a první záznam v novém roce se nebude zabývat Javou, ale OpenOffice.org. V konferenci users@cs.openoffice.org se řešilo, jak poskládat dohromady hodnoty buněk ze sloupce Calcu do jednoho stringu s oddělovačem mezi hodnotami. První nápad, který se objevil bylo využití klasické funkce CONCATENATE: =CONCATENATE(A1;"oddelovac";A2;"oddelovac";A3) Už toto může být dost náročné při více hodnotách ve sloupci. Ale v konferenci přibyl požadavek na ošetření prázdných buněk, které nemají být ve výsledném seznamu. Nový kód byl: =CONCATENATE(IF(NOT(A1="");CONCATENATE(A1;",");"");IF(NOT(A2="");CONCATENATE(A2;",");"");IF(NOT(A3="");CONCATENATE(A3;",");"")) Tady už se v tom začíná člověk ztrácet navíc nám za poslední hodnotou zůstává oddělovač. Tak vylepšíme: =LEFT(CONCATENATE(IF(NOT(A1="");CONCATENATE(A1;",");"");…