Funkce SQLite se rozšiřují pomocí PHP
SQLite je ještě lepší, než jsem čekal. Nejenom má v 200KB podporu pro triggery a views, ale její SQL příkazy a funkce je díky integraci s PHP možno rozšiřovat o libovolné callbacky (na PHP funkce).
Pokud tedy SQLite nemá funkci UNIX_TIMESTAMP()
, která převede
string na UNIX-like datum (počet sekund od 1.1.1970), tak si ji nadefinujete
v PHP, registrujete pro SQLite, a používáte ji potom zcela normálně ve Vašich
SQL příkazech.
Například takto můžete SQLite rozšířit o podporu pár funkcí, které oproti MySQL nativně nemá:
sqlite_create_function($db,'UNIX_TIMESTAMP','strtotime',1); sqlite_create_function($db,'NOW','time',0); sqlite_create_function($db,'DAYOFMONTH','_day',1); sqlite_create_function($db,'MONTH','_month',1); sqlite_create_function($db,'YEAR','_year',1); sqlite_create_function($db,'SUBSTRING','substr',3); function _day($time) { return date("d",strtotime($time)); } function _month($time) { return date("m",strtotime($time)); } function _year($time) { return date("y",strtotime($time)); }
Pohádka o spravedlivé daňové soustavě
Tento příběh (zaslaný od jednoho čtenáře) poměrně pěkně vykresluje, proč současný daňový systém nefunguje. Zkusím jej vyprávět dceři jako pohádku na dobrou noc, uvidíme, co na to bude říkat, její smysl pro spravedlnost je poměrně široce vyvinutý, a tudíž, pravicový :-) Mimochodem, říká Vám něco myšlenka rovné daně?

Milé děti, dnes si povíme něco o daňových úlevách. Nebojte se toho názvu, vysvětlíme si to tak, že tomu bude každý rozumět.
Žilo bylo 10 pánů, kteří spolu chodili každý den do restaurace na oběd. Za oběd měli pokaždé zaplatit dohromady přesně 1000 korun.
Pánové se dohodli na tom, že se na té tisícovce budou podílet tak, jak platí daně. Takže první čtyři, ti nejchudší, neplatili nic. Pátý zaplatil 10 korun, šestý 30 korun, sedmý 70 korun, osmý 120 korun, devátý 180 korun a desátý, ten nejbohatší, 590 korun.
Takhle to šlo celé roky a nikdo si nestěžoval.
Až jednou hostinský přišel s tím, že jim dá slevu a bude po nich chtít každý den za oběd jen 800 korun místo 1000, protože jsou to stálí zákazníci. To bylo od něho moc hezké. Jak si ale rozdělit těch ušetřených 200 korun? Kdyby každý z deseti pánů platil o 20 korun méně, prvních pět pánů by dokonce dostávalo peníze za to, že chodí na oběd. Hostinský jim navrhl se o úsporu podělit tak, v jakém poměru platí za oběd.
Vzal si papír a tužku a začal počítat.
Vyšlo mu toto: Pátý pán už nebude muset platit nic, stejně jako první čtyři, takže 100% úspora. Šestý bude platit 20 korun, místo 30, ušetří 33%. Sedmý bude platit 50 místo 70 korun, ušetří 28%. Osmý pán zaplatí 90 místo 120 korun a ušetří 25%. Devátý zaplatí 140 místo 180 korun, takže ušetří 22%. Desátý pán, nejbohatší, bude platit 490 místo 590 korun. Úspora 16%. Každý z těch šesti na tom bude lépe, než předtím, a ti první čtyři mohou i nadále jíst zadarmo.
Jak se ale vzápětí ukázalo, velké nadšení ten návrh nevyvolal.
“Takže já z těch 200 korun dostanu jen 10?”, křičel šestý pán, ukázal na desátého, nejbohatšího, a pokračoval: “A tenhleten dostane hned 100!”
“To je pravda!”, křičel pátý pán, “Já ušetřím jen 10 korun, ale on desetkrát víc!”. “Opravdu!”, přidal se sedmý, “takže jemu stovku a mně jen dvacku?!”.
Rozkřičeli se i první čtyři pánové: “A my nedostaneme vůbec nic? Jak k tomu přijdeme? Zase jsou na tom nejhůř ti nejchudší, jako vždycky!”
A všech devět se vrhlo na toho desátého a ztloukli ho.
Příštího dne se desátý pán u oběda neobjevil. Nijak jim to nevadilo, prostě si sedli a jedli bez něho. Když ale došlo k placení, zjistili zajímavou věc: Všichni dohromady neměli ani na polovinu sumy, kterou zrovna projedli. A pokud mezitím neumřeli hlady, tak se tomu diví dodnes.
A takhle, milé děti, funguje daňový systém. Pokud dojde k daňové úlevě, mají z toho nejvíc ti nejbohatší. Pokud by ale museli platit příliš, může se stát, že se příští den u našeho stolu neobjeví. Ve Švýcarsku, v Karibiku a i jinde na světě je spousta pěkných restaurací…
V praxi je to ještě poněkud složitější, vysoké daně a progresivní daně znamenají nejen odliv těch bohatých jinam (registraci společností v danově výhodnější cizině), ale také to, že menší podnikatelé zaměstnávají mnohem méně zaměstnanců, dávají jim nižší platy, a tím je tedy nutně nižší i životní úroveň těchto řadových zaměstnanců (protože kvůli vysokému daňovému zatížení si nikdo expanzi nemůže dovolit).
Vysoké daně jsou totožné s kolapsem ekonomiky. Nízké daně s ekonomickým rozvojem.
SQLite nebo MySQL?

V PHP 5 je zahrnuta nativní podpora pro SQLite.
SQLite je velice zajímavá databáze. MySQL 4.1 má 25MB, zatímco SQLite má jen 200KB (ano, dvěstě kilobajtů). Navíc, nemusíte ji
nijak instalovat, pokud máte PHP 5, máte i SQLite. Dlouho jsem tuto databázi ignoroval, nicméně, včera jsem si napsal databázový
layer pro BLOG:CMS, podporující MySQL 4.0 (mysql
) a MySQL 4.1 (mysqli
), a začal jsem přidávat i SQLite.
Musím říci, že SQLite je fantastická databáze. Jaké jsou její hlavní výhody?
- SQLite se nemusí instalovat, je integrována přímo v jádře PHP 5,
- SQLite umí to samé, co MySQL, a navíc má podporu pro transakce (což MySQL pro MyISAM engine nikoliv), views a triggery (!),
- SQLite umí
in-memory
tabulky, což je fantastická věc pro dočasné tabulky a některé složitější operace, - SQLite má k dispozici nástroje jako SQLite Control Center, či SQLite Web Admin.
Je zde ovšem i pár nevýhod, nelze například použít FULLTEXT
klíč, je nutné používat SELECT LIKE ‘%slovo%’
,
a kromě verze 3.0 (kterou ale zase neumí PHP 5.0.2) zde není nativní podpora UTF-8
(což ostatně neumí ani MySQL 4.0, umí to až 4.1).
Každopádně, podpora pro triggery a views a velikost jen 200KB SQLite je dobrým důvodem, abych SQLite začal používat místo MySQL pro své projekty.
SQLite je prostě fantastická a efektivní “příruční databáze”, navíc pro SELECT
příkazy má být rychlejší než MySQL.
PHP na Windows - CGI, FastCGI nebo modul?
Webdesignérská komunita se asi shodne na tom, že nejrychlejší implementace PHP pro Apache, z možností CGI, FastCGI a modulu, by měl být právě modul, protože PHP modul pro Apache je psán pro nativní API Apache 2.0 serveru. Odtud tedy ona rychlost…
CGI naopak v teorii znamená, že CGI skript musí při každém použití PHP vyhledat
a parserovat php.ini
,
spustit php-cgi.exe
a natahovat spousty dll knihoven (extensions).
To je pomalé, nicméně, vzhledem k tomu, že jsou stejně všechny dll knihovny
v RAM paměti, a vzhledem k výkonu testovacího stroje (3.2GHz Pentium-4/HT
procesor, 1GB RAM), nebude to zpoždění až tak zásadní.
FastCGI ovšem CGI zlepšuje v tom, že při startu Apache serveru spustí definovaný
počet php-cgi.exe
procesů v paměti a nechá je běžet po celou dobu,
a při požadavku na PHP interpret jim tento dotaz předá ke zpracování.
Tolik tedy teorie. Rozhodl jsem se v praxi otestovat, jak je Apache/PHP kombo rychlé v reálném provozu v režimech CGI, FastCGI a modul.
Testoval jsem funkci, která 1000x za sebou provede vytvoření dlouhého řetezce znaků. Práce s textem je základem PHP.
PHPeclipse - splněný sen programátora / webdesignéra

O eclipse.org, open-source projektu v čele s IBM (podílí se na něm ale i Borland, SUSE, Red Hat, a mnozí další), každý již asi někdy slyšel. Eclipse.org je naprosto dokonalé vývojové prostředí, framework, multiplatformní, a to nejen pro Javu. Za pomocí pluginů je Eclipse možno rozšířit i o podporu například PHP, na což se zaměřuje projekt PHPeclipse.de.
Nutno říci, že Eclipse je skutečně dokonalé IDE. S editací PHP / CSS / SQL / XHTML zdrojového textu v editoru se to nedá srovnávat. Můžete používat PHP debugger, code browser Vám po stisku Ctrl+Space nabídne nejen vestavěné funkce PHP, ale i veškeré funkce, které si Vy deklarujete v include / require souborech, a jejich popis z PHPDoc kompatibilních komentářů (!), nabízí "Resource" a "Debug" perspektivu, real-time prohlížení PHP výstupu ve vestavěném browseru, real-time PHP parser, skvělou správu projektu, integrovanou spolupráci s CVS, včetně podpory pro ssh, přímý import projektu z CVS, podporu a code browser pro nejen PHP, ale i CSS (včetně CSS 2.0), XHTML, a SQL, a mraky dalších funkcí.
PHPEclipse je prostě splněný sen programátora / webdesignéra.
Instalace PHPeclipse a konfigurace debuggeru u celého tohoto komplexu je poněkud náročnější, ale vyplatí se.
Nejlepší na tom je, že tento skvělý projekt je k dispozici jako open-source. Projekt, se kterým se například Dreamweaver MX 2004, či FrontPage 2002 nemůže vůbec měřit. Nikdy. Tolik funkcí, skvěle podaných, prostě jiné IDE / Framework nenabídne.
Okamžité spouštění JEditu
JEdit je aplikace psaná v Javě, extrémně rychlá při práci, ale poměrně pomalá na spouštění. Spouštění JEditu i na P-IV/HT/3.2GHz s 1GB RAM zabere cca 6-7 sekund. A to je přece jenom dost, pokud potřebujete zrovna editovat jen pár řádek textu.
Nicméně, existuje jednoduchý způsob, jak JEdit ponechat i při zavření jeho okna v operační paměti, v pozadí. Při dalším spuštění tak JEdit naběhne již během setin sekundy, dokonce rychleji než neuvěřitelně primitivní Notepad ve Windows.
Pokud tedy máte dost RAM paměti, spouštějte JEdit takto:
"C:\Program Files\j2sdk\bin\javaw.exe" -Xms32m -mx64m -jar "C:\Program Files\jEdit\jedit.jar" -background
Pokud si na tento shortcut vytvoříte klávesovou zkratku, třeba Win+J
,
bude Vám JEdit nabíhat ještě dříve, než si to stačíte uvědomit. ;-)
Integrace a nastavení editoru JEdit a PHP

JEdit je
nejlepší programátorský editor, navíc multiplatformní. Je řádově lepší než oblíbený
PSPad, protože je psaný Java programátory pro (nejen-Java) programátory, obsahuje
podporu pluginů, skriptovacího jazyka, podporu více než 40 různých kódování,
včetně utf-8
, a mnohé další.
Pokud programujete v PHP, můžete si enhanced chm manuál k PHP integrovat
do JEditu. Funguje to potom tak, že si v textu označíte klíčové slovo, stisknete
předvolanou kombinaci kláves, třeba Ctrl+Alt+P
, a ihned se Vám
otevře stránka PHP manuálu k dané funkci. Velice užitečné, zvláště ve spojení
s pluginy CodeBrowser, JTidyPlugin, a PHPParser.
Jak na to? V adresáři JEdit/Macros si vytvořte pod-adresář PHP a v něm soubor
nazvaný Otevřít_v_PHP_manuálu.bsh
s tímto obsahem:
CHM_location = "C:\\Dev\\Manual\\PHP\\php_manual_en.chm"; selections = textArea.getSelection(); if(selections.length > 0) CHM_location += "::/_function.html#" + textArea.getSelectedText(); exec("HH " + CHM_location);
Následně si stáhněte nejnovější dokumentaci
k PHP, a umístěte ji do adresáře C:\Dev\Manual\PHP\
.
Potom si v menu Utilities / Global Options / sekce Shortcuts /
podsekce Macros přiřaďte pro makro Otevřít_v_PHP_manuálu klávesovou
zkratku třeba Ctrl+Alt+P
.
Úprava PHP skriptů pro MySQL 4.1 (mysqli)
Včera jsem psal o tom, že skripty psané pro MySQL 4.0 (mysql
PHP
rozšíření) nejsou
kompatibilní s MySQL 4.1 a vyšší (mysqli
PHP rozšíření). Nicméně,
úprava aktuálních PHP skriptů tak, aby byly funkční s libovolnou verzí MySQL
a PHP, je vcelku triviální.
Upravil jsem pro použití MySQL 4.1.6-gamma i manuály pro kompilaci a instalaci Apache, MySQL a PHP:
- Instalace Apache 2.0.52, MySQL 4.6.1-gamma a PHP 5.0.2 na Windows,
- Kompilace Apache 2.0.52, MySQL 4.6.1-gamma a PHP 5.0.2 na Linuxu,
- Compile from source Apache 2.0.52, MySQL 4.6.1-gamma and PHP 5.0.2 on Linux.
Nemám rád PHP (MySQL 4.0 versus 4.1)!
Představte si, že v roce 2004 zhruba 95% hostingů na celém světě používá MySQL
4.0.x, nebo nižší (z těch, co MySQL podporují). V PHP se k MySQL 4.0 přistupuje
například takto (pro získání veškerých položek článku číslo 1
):
// MySQL 4.0.x a nizsi $resource = mysql_connect('localhost','root','heslo'); mysql_select_db('blogcms',$resource); $query = mysql_query( 'select * from items where id=1', $resource); if ($row = mysql_fetch_object($query)) { // zpracovani vysledku }
Jednoduché a funkční. Nicméně, pak si nainstalujete PHP 5 a MySQL 4.1.6-gamma,
která je oficiálně doporučená pro veškerý nový vývoj, a veškeré Vaše současné
skripty přestanou fungovat, přestože používáte jak mysql
(pro vezi
4.0 a nižší) PHP extension, tak mysqli
(pro vezi 4.1.2 a vyšší)
PHP extensions. Prostě Vaše skripty musíte přepsat na mysqli
, zpětná
kompatibilita s mysql
neexistuje, přestože by měla (dle dokumentace)
fungovat.
MySQL ve verzi 4.1.2 a vyšší změnila svůj interní komunikační protokol. Podporuje
také pár funkcí navíc, zejména nativně znakové sady jako je utf-8
a unicode
,
a umožňuje nativní české řazení podle utf-8
. To je sám o sobě dost
dobrý důvod proč na MySQL 4.1 přejít.
Nejlepší logické hry pro Symbian - díl 2/2
V tomto článku bych chtěl představit dalších 10 her pro Symbian telefony, ve kterých je nutno mírně (či poněkud více než jen mírně) namáhat mozek, a to jako doplnění k 25 logickým hrám již představeným.

1000 Words je hra kde hledáte a hádáte anglická slova. Pokud umíte anglicky, je to docela zábavné, trochu mi to připomíná českou hru “Logik”, jenže místo barev jsou tu písmenka.

Amazing World je vskutnu úžasná hra, za pomoci fotbalových míčů, tenisových míčků, přepravních pásů, a dalších věcí, máte za úkol odpálit bombu. Toto prostě musíte mít!