Aug26

První jazyk - Python

1 komentář

Od roku 1986 trávím jistou část svého života vedle počítačů, prvním byl 8 bitový Sinclair ZX-Spectrum, který jsem po pár letech povýšil na Sinclair ZX-Spectrum+128K a po roce 1989 jsem si přes Commodore Amiga proklestil cestu k PC, s nimiž se potýkám dodnes. V éře 8 bitových počítačů mohl člověk hrát hry, nebo dělat první experimenty s programováním, ale internet byla hudba velmi vzdálené budoucnosti.

Pokračování článku…

Aug13

AJAX je perfektní, ale nepříjemný

Kategorie: PHP, Programování
2 komentářů

AJAX není nikterak novou technologií, jak se někteří vývojáři tváří, vždyť bez problémů funguje v MS IE 6, kterýžto prohlížeč lze s klidným svědomím oznažit jako opravdu obskurdně zastaralý. AJAX je jedna ze zajímavých technologií, kterou prohlížeče uměly dlouho, ale přesto ji vývojáři webů nepoužívali. Já jsem se AJAXu donedávna bránil, ne proto, že bych viděl nějakou nepříjemnu komplikaci v programování, ale nepracoval jsem na takové aplikaci, kde bych AJAX dokázal opravdu využít.

Pokračování článku…

Apr30

Bash: převod názvů na verzálky

1 komentář

Občas se potýkám s nějakými detaily, které vznikají při přípravě dat pro weby. Protože mi weby jedou výhradně na Unixových serverech vzniká menší problém s citlivostí na velikost písmen v , který uživatelé systémů na prazákladech CP/M neznají (do tohoto řadím i nejnovější MS Windows (jeho)Vista). Pokud se máme na něčem domluvit, je občas potřeba převést veškeré názvy obrázků, případně jiných souborů, na pouze minusky, nebo verzálky, obvykle směřuji k tomu, čeho je připraveno více.

Pro převod veškerých názvů mi slouží jednoduchý script (pochopitelně malou úpravou lze udělat obrácený postup):

 

Převod na minusky, nebo verzálky v nějakém importním souboru, třeba csv, který vyexportuji z MS Excelu/OpenOffice.org Calcu, je již triviální záležitostí, téměř neznám scriptovací/dynamický jazyk, který by v knihovnách pro zpracování řetězců neměl tyto potřebné funkce.

#!/bin/sh
 for i in *
 do
 j=`echo $i | tr '[a-z]' '[A-Z]'`
 mv $i $j
 done

Feb26

Nový web - www.aspra.eu

2 komentářů

Firma Aspra s.r.o. má nové internetové stránky, které pocházejí dílem z mé dílny (engine) a částečně z dílny Daniela Řezníčka (layout). Bohužel se nepovedlo vyřešit některé problémy se zastaralým, ale přesto ještě používaným prohlížečem Microsoft Internet Explorer 6, tak jsou připraveny 2 vzhledy, jeden pro toto staré IE a další pro novější prohlížeče, které nemají problémy s dodržováním norem W3C.

Stránky ještě podstoupí nějaké opravy, nicméně v této chvíli se již nebude měnit jejich komiksový vzhled.

O hosting se stará můj preferovaný webhoster Klenot.cz.

Feb22

NetBeans a Mozilla

Kategorie: Programování
6 komentářů

Nejsem sice bůhvíjak pokročilý vývojář na Java platformě, spíše jsem zůstal na úrovni menších prográmků, které eventuálně používají databázi, poslední dobou jsem si pro tyto účely dost oblíbil JavaDB (je to Derby od Apache). S nástroji jsem překonal před delší dobou jakousi schizofrenii, kdy se mi líbilo něco z Eclipse a něco jiného z NetBeans, doinklinoval jsem k výhradnímu používání NetBeans.

Pokračování článku…

Jul7

Prokletí jménem FirebirdSQL a .NET

Žádné komentáře

Již delší dobou se potýkám s databází FirebirdSQL ve spojení s platformou .NET (někteří programátoři se ošklíbnou, ale konkrétně VisualBasic.NET). Ani jedna z jmenovaných komponent není špatná, ale jako celek to občas velmi hodně bolí.

FirebirdSQL je vynikající nástroj, de-fakto nástupce Interbase od Borlandu, a jak jsem četl v učebnici Pavla Císaře, je to nejlépe ukrytý poklad Borlandu. Rychlá a malá databáze s obrovskými možnostmi, která v pohodě běží na MS Woknouz, *BSD i GNU/Linuxu(teda pod Linuxem bylo na jakémkoliv jiném hardware než i386/x86-64 zprovoznění naprosto netriviální operací). Líbí se mi existence klasického serveru (ve dvou architekturách classic server a superserver) a malé vestavné, avšak naprosto plně funkční, vestavné verze.

Doplnění (25. 9. 2007): Zapomeňte, že program se embeded verzí dáte na síťový disk. Embedded FbSQL knihovna se pokusí připojit na plný server, přemýšlí za Vás a pokud tam ten server nainstalovaný není, máte smůlu. Jsem si vědom možnosti poškození dat, ale pro testování bych problém neviděl, připojoval by se jediný člověk, jen mi vadí, že FirebirdSQL přemýšlí za mě.

No FirebirdSQL se mi líbí, je fantasticky rychlý (ve srovnání s mým oblíbeným PostgreSQL) a na rozdíl od jakoby databáze MySQL jde o plnohodnostný nástroj, který umí transakce, stored procedury triggery (vím, že MySQL to umí také, ale jak :-(). Jsem z těch, co PostgreSQL popisují slovy „open source Oracle“, ale pro vlastnosti a schopnosti FirebirdSQL rozumné přirovnání nemám.

Nejsem zastánce Microsoftu, ale jejich koncept .NETu považuji za dost povedený, až na to, že z proklamované multiplatformnosti je multiplatformnost pouze mezi několika verzemi MS Windows, autoři projektu Mono se sice snaží, ale, bohužel, MS jim tu práci docela znesnadňuje. Bytecode, který získáte po překladu programů nad .NETem je mnohem čistší, než ten, který vznikne po překladu pro JVM. Mimochodem, VisualStudio.NET je excelentní nástroj, ale i na něm jsem našel mouchy. Na straně druhé je ještě stále vidět relativní mládí této platformy, což je vidět na zatím relativní chudobě informací na fórech.

Přiznávám, že Java mi přijde mnohem vyzrálejší a profesionálněji pojatá, než-li je tomu u .NET (mládí platformy je mimo jiné vidět i na rychlém vydávání nových verzí, které přidávají další a další vlastnosti). Java ve spojení s databázovým serverem PostgreSQL by byla excelentní kombinace. MŇAM!

Proč to celé píšu? U firmy C.A.C spol. s r. o., pro níž pracuji (přiznávám že velmi rád), dělám na platformě .NET ve spojení s FirebirdSQL. Oba nástroje jsou fajn, ale…

  • Pro FirebirdSQL existuje jedna špičková učebnice, ale tím jaksi informační zdroje končí. Navíc je tato učebnice psána v době FirebirdSQL 1.0 a nepokrývá dnešní možnosti, hlavně v oblasti stored procedur.
  • FirebirdSQL nefunguje v Embedded verzi na sdíleném síťovém disku. Ale opravdu to nefunguje.
  • Přinutit VisualStudio.NET korektně spolupracovat se Subversionem (nástroj pro správu verzí software) není moc pěkný úkol. No zrovna v tomto případě zlaté Delphi, protože ty s klientem TortoiseSVN spolupracují nádherně.
  • Zatím jsem nenašel příjemná rozšíření, jako JediVCL (pro Borlandí produkty), jenž by mi tak citelně vylepšili práci. Podobná rozšíření znám i pro své oblíbené prostředí NetBeans, ale připadá mi, že to pro VisualStudio.NET je v ilegalitě.

Když vezmu pro a proti, ano dělám se zajímavou architekturou a dokážu dotáhnout software do konce, co mě štve je tápání po střípcích informací, které neuvěřitelně zdržuje. Připadám si jako pitomec, jenž pořád dělá miniprojektíky a maže je, protože potřebuje přijít na to, jak co funguje. Jeden příklad za všechny: combobox, ve kterém mám programově předdefinované hodnoty a zároveň má další hodnoty navázány z databáze.

Mar6

SQLite

Žádné komentáře

SQLite je nesporně velmi zajímavým kusem software. Jde o velmi jednoduché a přesto dokonale efektivní řešení databáze. Pro některé uživatele/programátory se nejedná o plnohodné řešení databáze, nicméně, pokud si najdete (třeba na wikipedii) definici databáze, tak zjistíte, že ji SQLite bezezbytku splňuje.

SQLite je databáze, která je primárně beztypová, tj. můžete databázi nadefinovat jak chcete a potřebujete a data můžete uložit naprosto bez ladu a skladu :-D, což ale není zcela rozumný nápad. Tabulky můžete definovat buď jen beztypovým vyjmenováním sloupců, nebo jim udáte i typy. Udáním typů pro jednotlivé sloupce jen udáte prioritu, jak si je má databáze uložit, pokud se jí to nepodaří, bude hodnota uložena jako text. Všiml jsem si, že třeba Borlandí prostředí, pokud se nenatypují sloupce nemá moc příjemné vybírání dat z jednotlivých buněk.

SQLite je, aktuálně, v řadě 3 a jestli nemáte důvody používat starší řadu, například díky tomu, že je zaembedována do PHP5 (od verze 5.1 už není, ale je jako externí modul), použijte ji. Jednako tato aktuální řada pracuje podstatně lépe s Unicode/UTF-8 a je optimalizovanější v nárocích na diskový prostor.

Protože mě plně vyhovuje práce z příkazového zdroje, neprozradím vám mnoho z použití gui nástrojů, nicméně v prostředí MS Windows mě velmi zaujal …. Databázi vytvoříte jednoduše použitím příkazu:

sqlite3 ~/sqlite/prvni.sq3# pokud potrebujete pouzivat SQLite rady 2sqlite ~/sqlite/prvni.sq2

Sqlite3, eventuálně sqlite pro verzi 2.x, je cli administrační nástroj. Předchozím příkazem vytvoříte v podadresáři sqlite/ soubor prvni.sq3, do nějž postupně nadefinujete tabulky a kde budou uložená data. Na koncovce nezáleží, ale pokud používáte některý gui nástrojů pro správu, je rozumné používat stejnou koncovku, kterou si naasociujete na oblíbený administrační program. Pokud již databáze existuje, tak výše uvedeným příkazem databázi pouze otevřete, stejně je tomu, například, v PHP5.

Pokud máte databázi otevřenu, můžete vytvořit tabulky, triggery, pohledy, triggery a uložené dotazy. Můžete manipulovat s daty. Jak, to najdete buď v dokumentaci k databázi, nebo v malém tutoriálku, který brzo vydám na portále Linuxsoft.cz.

Překvapivě je SQLite velmi rychlá databáze, pokud zkusíte porovnání s MySQL, FirebirdSQL, či PostgreSQL, budete velmi příjemně překvapeni. Já sám tuto databázi nasazuji do míst, kde je téměř jisté, že nebudu moci mít spuštěný plnohodnotný databázový server. V současné době jím nahrazuji poměrně nepříjemné, nestabilní a pomalé řešení, kdy můj předchůdce ve vývoji jednoho software ukládal data z Borlandích paměťových tabulek do XML souborů. Znamená to sice poměrně rozsáhlé přepisování aplikace, nicméně výsledky jsou velmi pozitivní.

Pokud hledáte vhodnou databázi, nejen pro malé projekty, doporučuji zaměřit pozornost na SQLite. Jediným limitem v množství uložených dat je omezení souborového systému, kde databáze běží. Pochopitelně se jedná o multiversion databázi a je třeba občas ji vyčistit od neplatných záznamů.

Feb23

Hledání ideální databáze

Žádné komentáře

Přestože ještě před několika lety (asi tak 8-10) jsem se do práce s databázemi nikterak nehnal, jsou dneska mou hlavní obživou, ať již jako programátora aplikací, které využívají databázový backend, nebo jako člověka, který se snaží jednu velmi zajímavou pokud možno co nejlépe prozkoumat a předat dalším vědomosti o ní. Jsa člověk, který preferuje oss řešení, pouzastavím se v tomto blogspotu u několika rozšířenějších databázových projektů.

MySQL

Pro řadu vývojářu se jedná o první SQL databázi, se kterou se seznámí. Často tomu není pro její kvality a funkce, které jsou v posledních verzích na dobré úrovni, ale pro její snadnost v používání a rozšířenost v učebnicích. Většina učebnic, jednoho z nejrozšířenějších programovacích jazyků, ale i kurzů PHP se opírá právě o tento databázový backend.

Především z řad webových vývojářů je MySQL vnímáno jako rychlé úložiště textů, ještě v dobách nedávných diskvalifikované téměž nemožností používat kódování UTF-8. Do verze 4.1 jsem měl z této databáze podobný pocit. Verze 4.1 vyřešila problém s ukládáním různých kódových stránek a verze 5.0 přidala funkčnost, která server sice mírně zpomalila, ale zato ji přiblížila k těm velikým databázím. Tou funkčností je míněna podpora transakcí, ano, ty staré verze uměly, ale ne na svých nativních souborech, stored procedur a triggerů.

Dnes je MySQL vyspělou datábází, kterou lze bez výrazných problémů nasadit téměř na libovolný systém, jen s mírně komplikovanou licencí. Nový engine Falcon, který píše Jim Starkey, dřívější vývojář Interbase/FirebirdSQL, slibuje výrazný pokrok ve všech směrech.

FirebirdSQL

FbSQL je velmi zajímavým kusem software. Pro spoustu lidí se jedná o databázi, která skvěle funguje pod MS Windows, nicméně, mám ji, k plné spokojenosti, otestovánu i na Linuxu. Bohužel pokud budete chtít tento server kompilovat pro jinou platformu, než je x86, budete mít trochu problémy. Silnou zbraní tohoto serveru je existence embedded verze, kdy nepotřebujete mít instalovaný celý server, ale pouze postačuje knihovna v místě, kde o ní Váš program bude vědět. Databáze je velmi rychlá a stabilní, ale velká slabina je v dostupnosti a kvalitě dokumentace.

PostgreSQL

O této databázi nemám tady moc co napsat. Rychlá, sice při malém zatížení pomalejší než FbSQL, nebo MySQL, stabilní s kvalitní licencí a velmi přesně splňující ANSI SQL. Mezi začátečníky není příliž oblíbená, protože první kroky v ní vyžadují větší použití mozku, než v případě MySQL. Obrovská možnostmi a podporou. Ano přiznávám, že v současnosti bych pro ní, v oss světě, stěží hledal konkurenta. Je to také ta databáze, do které se snažím co nejvíce proniknout a to co vím předat dále.

SQLite

SQLite není úplně opravdovou databází. Nejde o server, ale o malou knihovnu, která plní funkčnost velkých databází. Jedná se o embedded databázi v pravém slova smyslu, umí uložit data, updatovat, vymazat a vybrat, zvládá triggery a pohledy. A to je v podstatě vše :-). Především je malá, rychlá a kvalitní podporou v nejrůznějších programovacích jazycích. Já sám tímto řešením nahrazuji v udržovaných programech, psaných v Borland Delphi, starou a velmi obtížně vyhovující, manipulaci s několika dbf soubory.

SQLite3 má mnoho vylepšení, oproti SQLite2, zejména v lepší práci s Unicode, bohužel třeba PHP5 umí, bez doplnění o PDO, pracovat pouze se starší SQLite2. Všechny data i definice jsou uloženy v jediném souboru, který je pohodlně přenositelný kamkoliv a to dokonce bez ohledu na procesory, které fungují jako big endian, nebo little endian.

Další databáze

Tak a dalšími se tu zabývat nebudu, byť by to bylo zajímavé téma. Chtěl jsem postihnout jen několik apsektů v těch, které se využívají pro běžný vývoj. Tedy BerkleyDB je prý nejrozšířenější databází na světě, ale neznám moc programátorů. kteří by ji používali v zákaznických řešeních.

Poznámka

Tento článek vyšel v delší, upravené, podobě na portále LinuxSoft.cz.

Feb20

Kurz PHP 12.3.-14.3.2007

Žádné komentáře

Ve dnech 12. března - 14. března 2007, tj. 3 dny, pořádám, ve spolupráci s portálem Linuxsoft.cz, kurz jazyka PHP. počet míst pro zájemce je omezen. Obsah školení je (zhruba) tento:

  • (historické okénko), jak získat PHP, konfigurace apache + mod_php
  • Propojení PHP a (X)HTML/XML
  • Operátory, typy proměnných, řetězce, (regulární výrazy,) pole
  • řízení toku programu (cykly, podmínky, větvení)
  • Základní vestavěné funkce, tvorba vlastních funkcí, jejich volání, globální a lokální proměnné
  • objektově orientované programování (vč. rozdílného pojetí mezi PHP4 a PHP5)
  • Práce s daty z formuláře a se soubory
  • propojení s daty z databáze (MySQL, PgSQL, SQLite (, FbSQL))

Cenová a další podmínky získáte po kontaktování přes formulář na našem portále. Podle počtu účastníků se může cena změnit.

Feb20

Proč nemám rád objektové PHP

4 komentářů

Mnozí programátoři a “programátoři” se staví k OOP (objektově orientované programování ne “Organizace pro Osvobození Palestiny”) jako k všeléku na všechny jejich problémy při vývoji. Mnozí, i přestože používají plně objektový jazyk, píší neobjektový kód, kdy vše co potřebují napíší do jediného objektu a vytvoří pouze strukturovaný kód.

Jaké jsou výhody používání OOP?

Objektově orientované programování stojí na několika pilířích:

  • Objekty – jednotlivé prvky modelované reality (jak data, tak související funkčnost) jsou v programu seskupeny do entit, nazývaných objekty. Objekty si pamatují svůj stav a navenek poskytují operace (přístupné jako metody pro volání).
  • Abstrakce – programátor, potažmo program, který vytváří, může abstrahovat od některých detailů práce jednotlivých objektů. Každý objekt pracuje jako černá skříňka, která dokáže provádět určené činnosti a komunikovat s okolím, aniž by vyžadovala znalost způsobu, kterým vnitřně pracuje. Toto je velká výhoda objektového přístupu.
  • Zapouzdření – zaručuje, že objekt nemůže přímo přistupovat k „vnitřnostem“ jiných objektů, což by mohlo vést k nekonzistenci. Každý objekt navenek zpřístupňuje rozhraní, pomocí kterého (a nijak jinak) se s objektem pracuje.
  • Skládání – Objekt může využívat služeb jiných objektů tak, že je požádá o provedení operace.
  • Dědičnost – objekty jsou organizovány stromovým způsobem, kdy objekty nějakého druhu mohou dědit z jiného druhu objektů, čímž přebírají jejich schopnosti, ke kterým pouze přidávají svoje vlastní rozšíření. Tato myšlenka se obvykle implementuje pomocí rozdělení objektů do tříd, přičemž každý objekt je instancí nějaké třídy. Každá třída pak může dědit od jiné třídy (v některých programovacích jazycích i z několika jiných tříd).
  • Polymorfismus – odkazovaný objekt se chová podle toho, jaký je jeho skutečný typ. Pokud několik objektů poskytuje stejné rozhraní, pracuje se s nimi stejným způsobem, ale jejich konkrétní chování se liší. V praxi se tato vlastnost projevuje např. tak, že na místo, kde je očekávána instance nějaké třídy, můžeme dosadit i instanci libovolné její podtřídy (třídy, která přímo či nepřímo z této třídy dědí), která se může chovat jinak, než by se chovala instance rodičovské třídy, ovšem v rámci mantinelů, daných popisem rozhraní.

Proč je tedy nepoužívám v PHP?

Jsem zastánce jednoduchosti a rychlosti. Nepracuji na PHP kódu ve velikém teamu, proto nemám problém s prací s funkcemi a proměnými tak jak jsou v jednoduchém kódu.

Rychlost je pro mě hlavním důvodem, proč je nepoužívat. Režie vytváření instancí a mnohonásobných dědění je poměrně značná. PHP je interpretovaný jazyk používaný v drtivé většině případů pro vývoj webových stránek (ano vím, lze v něm psát i CLI, nebo GUI programy), což znamená, že každé načtení stránek vytváří objekty a po ukončení scriptu jsou tyto rušeny a uvolňovány z paměti. PHP v tomto případě nevytváří objekty, které by byly perzistentní v paměti.