Archív pro kategorii 'programování'

Fedora Core 3 a Java

10.April 2005 (Sunday)

Protože to vypadá, ze budu okolnostmi donucen naučit se Javu, rozhodl jsem si nainstalovat na svůj notebook, kde mám distribuci Fedora Core 3. Protože postup nebyl zrovna jednoduchý a výsledek je takřka dokonalý, vznikl tento příspěvek ;-).

Na notebooku jsem samozřejmě Javu už měl, jednak kvůli OpenOfice, které používám pro čtení DOC a XLS souborů, tak také kvůli webu (proč dělat věci - třeba menu na webových stránkách - jednoduše, když to jde v Javě, že? ;-). Jenže jak se ukázalo, Java stažená přímo ze stránek Sunu si moc nerozumí s balíčky na JPackage.org, které jsem chtěl použít (velice nerad instaluji něco, co není v rpm). Na JPackage.org Java v rpm není, zřejmě kvůli licenci. Je tam sice nějaký balíček zajišťující kompabilitu, ale tam mi nějak nefungoval - balíčky sice šly nainstalovat, ale pokusy o spuštění aplikací (jedit, eclipse) byly marné.

Naštěstí ale není problém si vytvořit vlastní rpm balíčky s Javou. Na serveru JPackage.org jsou pro tyto pokusy vytvořené nosrc.rpm soubory, pomocí kterých lze vytvořit binární rpm balíčky ze souborů stažených ze stránek Sunu.

Začneme instalací klíče JPackage.org:

wget http://jpackage.org/jpackage.asc
rpm --import jpackage.asc

Stáhneme rpm soubory z JPackage.org (pozor na čísla verzí, zřejmě se budou měnit):

wget http://mirrors.sunsite.dk/jpackage/1.6/generic/non-free/SRPMS/jta-1.0.1-0.b.4jpp.nosrc.rpm
wget http://mirrors.sunsite.dk/jpackage/1.6/generic/non-free/SRPMS/java-1.5.0-sun-1.5.0.02-1jpp.nosrc.rpm

Oba balíčky nainstalujeme do systému. Tím získáme v adresáři /usr/src/redhat/SPECS soubory java-1.5.0-sun.spec a jta.spec, které slouží k přípravě rpm balíčků. Pak ještě musíme mít soubory s Javou, ty stáhneme přímo ze stránek Sunu: jta a Java. Potřebujeme soubory jta-1_0_1B-classes.zip, jta-1_0_1B-doc.zip a jdk-1_5_0_02-linux-i586.bin. Soubory uložíme do adresáře /usr/src/redhat/SOURCES. Pak v adresáři SPECS spustíme příkazy pro vytvoření rpm souborů:

rpmbuild -ba java-1.5.0-sun.spec

Získáme tak 8 rpm souborů s Javou, které nainstalujeme (možná budete muset doinstalovat balíček unixODBC-devel). Pak to samé provedeme s jta:

rpmbuild -ba jta.spec

Nainstalujeme a máme hotovo. Potom stačí přidat JPackage.org do vašeho oblíbeného správce balíčků a můžeme testovat:

smart install jedit eclipse-gtk2

Logika a PHP

23.March 2005 (Wednesday)

Pohádka o tom, jak jsou užitečné datové typy a proč není dobré konvertovat string na bool.

PHP je jedním z jazyků, který kašle na datové typy. Tedy ono na ně nekašle úplně, hluboko ve svých útrobách si dělá poznámky, jestli v proměnné je číslo, objekt nebo pole - dovolí vám ale s proměnnou zacházet jak chcete. Takže proměnné, která obsahuje řetězec, můžete příště přiřadit číslo nebo objekt a můžete ji vesele porovnat s jinou proměnnou, která obsahuje třeba pole. Pokud porovnáváte dvě proměnné různého typu, PHP provede automatickou konverzi, tak aby se daly porovnat. Je to trochu složitější, ale v mém případě se porovnával boolean a string. Tam je to jednoduché (relativně) - neprázdný řetězec je True, prázdný False (až na jednu výjimku, ale o tom až za chvilku). Kód používá databázi PostgreSQL, která má také datový typ boolean, ale hodnoty získané z databáze nejsou True/False, ale řetězce ‘t’ a ‘f’. Ten, kdo to takhle napsal, by potřeboval nakopat do … však vy víte kam. Těm bystřejším už asi došlo, že nejsnažší cesta jak se dostat do nervového sanatoria je na tohle zapomenout a porovnávat logické hodnoty z PHP a z databáze. Takže samozřejmě platí, že True == ‘t’. Bohužel také platí, že True == ‘f’, protože jak jsem psal výše, neprázdný string se vyhodnocuje jako True. Takhle blbá chyba mě stála 4 hodiny života… No a to nejlepší na tom je, že převod stringů na bool má jednu výjimku: string ‘0′ se převádí na False (pozor: ‘00′ už je opět True!!). Co vedlo autory k zanesení takového bordelu do PHP opravdu nevím.