MyEgo.cz - Radek Hulán webzine

MyEgo.cz

home foto blogy mywindows.cz kontakt

Databázový layer

PHP 04.11.2004

Představuji k volnému použití (licence GNU GPL) jednoduchý dababázový layer, který je určen pro MySQL 3.23 až 4.0 (mysql), MySQL 4.1 (mysqli), SQLite a PostgreSQL.

Tento layer je záměrně psán neobjektově. Proč? Je určen pro úpravu starých skriptů, které jsou natvrdo psány pro MySQL 4.0, aby co nejdříve fungovaly s DB-layerem (na libovolné open-source databázi).

Názvy funkcí layeru jsou navrženy tak, aby byly shodné se syntaxí MySQL funkcí, jen místo mysql budete psát sql, tedy například místo mysql_connect budete psát sql_connect. Teoreticky je tak možné na Vašem skriptu udělat hromadný search-and-replace slov mysql_ na sql_, a Vaše aplikace by měla fungovat s DB-layerem.

Pro nový vývoj je samozřejmě vhodnější použít DB-layer objektový, uvedu jej zde zítra.

Zdrojové kódy layeru jsou zde.

Použití layeru pro MySQL:

Typické použití pro MySQL 4.1 bude spočívat ve vytvoření souboru config.php s tímto obsahem:

Příklad pro SQLite:

Prefix tabulek:

Uvedený skript počítá rovněž s prefixem tabulek. Ten je velice důležitý, typicky máte na web-hostingu povolenou jen jednu MySQL/PGSQL databázi, a potom je nezbytně nutné jednotlivé instalace stejné aplikace odlišit právě prefixem v názvech tabulek.

Použití tohoto skriptu?

Náš index.php může vypadat například takto, a bude fungovat na MySQL 4.0, MySQL 4.1, SQLite a PostgreSQL:

Čeština není matematika

Zatímco v matematice je jasně dané, že 1+1=10 (binární soustava), v češtině tomu tak není. I když si Ústav pro jazyk český myslí, že by se mělo psát Nizozemsko, místo Nizozemí, nikdy bych první zmíněný termín nepoužil. Neexistuje jediný rozumný důvod, proč to udělat.

Stejně tak není kritické, pro pochopení textu, když místo výjimka napíšete vyjímka. Chcete-li vypadat, že si z hodin češtiny něco pamatujete, musíte psát to prvé, jiný důvod v tom ale těžko budeme hledat…

Moje osobní znásilňování českého pravopisu je vedeno navíc gramatikou anglickou a čímsi, co nazývám pragmatickým smyslem pro gramatiku. Sem patří mírné zneužívání interpunkce tam, kde sice dle "uznávaných" pravidel čárka či středník být nemá, ale dle mého názoru přispívá k lepšímu pochopení a rozčlenění textu.

Pár čtenářů v internetových diskusích dokáže rovněž vytočit do ruda, pokud místo byste použijete by jste. Proč proboha? Nemělo by být cílem ÚJČ AV obraty, které jsou masově používány, standardizovat? Pokud 99% lidí mluví a píše jinak než ÚJČ AV velí, chyba zjevně nebude v lidech. Jazyk český není zákon, ale živá bytost, neustále se měnící. ÚJČ je, naopak, těleso neskutečně strnulé (a dle mého názoru i zbytečně placené z našich daní).

Pokud nebudete tedy trvat zrovna na tom, že 1+1=11, a Vaše čeština bude "rozumně správná", čtenářům srozumitelná, a články výstižné, je řada komentářů a výkřiků na mnoha českých fórech, poukazujících (často vulgárně) na jednu gramatickou "chybu" v článku, zcele nesmyslných.

Autor takového komentáře si tím jen zvyšuje svoje ego, aniž by článek pochopil, či snažil se jej pochopit…


Tento článek je přímou reakcí na seriál vycházející na Interval.cz.

SEO URLs without mod_rewrite and FilesMatch

Technologie 31.10.2004

Many CMSs solve the need for Fancy URLs (URLs that are easy to follow by the user, and favoured by Search Engines as well) by using mod_rewrite, and/or FilesMatch (available only on Apache), or both.

Common solutions:

E.g., to get $itemid from URL like http://../article/this-is-a-title we need to create following .htaccess file:

<FilesMatch "^article$"> 
 ForceType application/x-httpd-php 
</FilesMatch> 

In this example we are forcing /article/ part of the URL to be processed as a PHP application.

Next, we will create a new PHP file called article (without .php extension), which will process the URL, and determine proper article number, and pass the control to our CMS.

<?php
// some internal function
include ('somecommonfncs.php');
// get article id
$itemid = getItemIdFromName($_SERVER['REQUEST_URI']);
// and process it
processIt();
?>

Seems easy, right? Well, this solution has several big problems in real-life, especially when open-source projects and code portability are concerned.

Pragocentrismus neexistuje

Big City

Nechápu nářky lidí, co bydlí mimo Prahu, že prý existuje nějaký “pragocentrismus”. Není mi vlastně ani jasné, co to onen “pragocentrismus” má být, a to jsem se přitom narodil na malé vesničce na Moravě, a prožil tam 18 let. Pro dítě je vesnice ideální. Pro mě alespoň byla. Obrovská soukromá zahrada a les (několik desítek hektarů), kde se dá hrát fotbal a tenis, rybník na zahradě, kde se dá v létě plavat, a v zimě bruslit, ale také spousta práce na tom, aby to celé nějak fungovalo.

Pragocentrismus” je pojem rozhodně negativní, označuje závist a nenávist člověka, který v něj věří. Hnusné vlastnosti. Moji rodiče tento pojem nepoužívají. Já jej nepoužívám. Už 12 let bydlím v Praze, tedy pokud jsem v ČR, cítím se být Pražákem, nicméně, v mém pojetí označuje “pragocentrismusstyl života, nikoliv nějakou závist, či nenávist k ostatním, či pohrdání vesnicí.

Bydlím v Praze prostě proto, že to je největší vesnice v ČR. Mám rád kolem sebe lidi, zábavu, možnost dělat co chci třeba i ve 2:00 ráno. Kdykoliv. 24/7. Občas pracuji do 3:00 ráno, a pak někomu zavolám, a jdeme na zelnou polévku do Solidní nejistoty, nebo si zahrát air-hockey. V menších vesnicích, než je Praha, bych to udělat nemohl. Brno, Ostrava, Pardubice, či Olomouc jsou všechno, na potřeby mého životního stylu, menší vesnice, které mi nenabídnou to, co při svém životním stylu chci a potřebuji.

Ani Praha, místní největší vesnice, se ovšem nemůže rovnat s velko-městy jako je 15-ti miliónový New York, 20-ti miliónový Bangkok, či třeba miliónový Amsterodam (fantastické město, kde je mix různých národností, které mezi sebou nemají rasové předsudky, ale skutečně spolu žijí, bez segregace, a vytváření “národnostních čtvrtí”, a funguje 24 hodin denně).

Chápu lidi, co se stěhují na vesnici, protože jim to vyhovuje, chápu lidi, co se stěhují do Prahy, protože chtějí. Nechápu ale malé, závistivé a hloupé lidi, co věří, že existuje nějaký “pragocentrismus”.

GPRS od T-Mobile na vesnici

Technologie 29.10.2004
TMobile GPRS

Potřeboval jsem si dnes nutně stáhnout WinCVS, a pár dalších programů, na jedné malé vesnici na Moravě, poměrně dost daleko od “civilizace” (nejbližší malé město je 15km daleko), k internetu připojen za pomoci i-Tec Bluetooth adaptéru a Siemens SX1 telefonu (tedy GPRS). Síla signálu pouhé 1 až 2 čárky z 5.

Nicméně, přenosová rychlost při stahování souboru byla v průměru 8.8 KB/s, což je fantastické! Ve spojení s GPRS Speed Plus, proxy cache / komprimace pro normální brouzdání webu, a použití AdBlocku ve Firefoxu pro blokování reklam, se reálná rychlost dostane i na 15-16 KB/s. A to je již vcelku použitelné, a hlavně, existuje na to paušál.

Zpráva o stavu internetu v Čechách

Technologie 27.10.2004
Nokia

V posledních několika týdnech elektronická média a weblogy hodně spekulují o tom, jak moc je potřeba rychlý internet, a jak moc lidem chybí. Také jsem zastával tento názor. Nicméně, dnes jsem si jej poněkud přetvořil.

Pro rychlý internet chybí obsah, není na něj čas, a není po něm masová poptávka. Rychlý internet potřebuje (kromě profesionálů a internetových maniaků) primárně zloděj na P2P sítích, který krade ripovaná DVD do DivX, popřípadě programy a hudbu na DC++ či BitTorrentu.

Normální člověk rychlý internet nepotřebuje, tomu stačí dial-up. Uvedu dva příklady, proč tomu tak je.

Přijel jsem dnes, po delší době, s dcerou, šestiletým prvňáčkem, na Moravu, na prodlužený víkend k rodičům. Máma měla předělanou kuchyň, a v ní nové spotřebiče, troubu, myčku, a pár dalších věcí. Vše kvalitní značky, nerez ocel, trojité sklo, a tak dál…

“Kde jsi to kupovala?”, zeptal jsem se jí. “No přece na internetu, je to tam levnější!”, automaticky odpověděla. “A poradila jsem to i lidem z práce, mají radost, že ušetřili…”, dodává… Moji rodiče, máma 50 let, táta 56 let, co mají doma počítač hlavně kvůli mě (a ode mě), abych nedostal bez-internetový absťák, když tam občas přijedu, a používají internet 2 hodiny týdně, přes dial-up, si automaticky jdou sice vyhlédnout a vyzkoušet zboží do kamenného obchodu, ale pak přes google.com a seznam.cz hledají, kde to samé zboží koupí o 30% levněji, a s dovozem zdarma příští den.

Mám rád Tesco!

Tesco

V poslední době naši socialisté často diskutují o různých omezeních. Socialisté totiž chtějí programově omezovat naši osobní svobodu… Jedním z takovýchto nepochopitelných omezovacích blábolů je i návrh na změnu 24-hodinové otevírací doby v supermarketech Tesco. Tedy, pod tou změnou je míněn prachsprostý zákaz ;)

Jejich argumentace? Prý je to dobré pro zaměstnance… Aha. To je ale podivný důvod… Dobré pro zaměstnance? V čem proboha???

Žádný zákaz, žádné omezení svobod, žádné omezení volby člověka zákonem (volby, která neškodí někomu jinému) není a nemůže být, principiálně dobré. Jen… komunisticky hloupé. Zakážeme-li Tescu mít otevřeno po 10:00 hodině večerní, tak… pár lidí přijde o práci! Pár lidí, co dělají až do pozdního večera (a je jich dost!), si nebude moci nakoupit. A jeden hloupý poslanec bude rád, že… on něco prosadil. Bude rád, že omezil naše svobody.

V této stranické linii bychom mohli rovnou zakázat jezdit taxíkářům v noci (vždyť ti chudáci by se měli vyspat, ne?), jezdit vlakům, zakázat práci i řidičům tramvají, řidičům metra, ba i osobní dopravu autem bychom po 10:00 hodině večerní měli zakázat. Připomíná Vám to stanné právo? No jasně! Pracovat v noci dle některých (post-komunistických) poslanců není dobré, a zvláště v Tescu ne!! Poslanci to vědí nejlépe.

V čem je Tesco tak odlišné oproti těm mnoha a mnoha jiným profesím, které v noci normálně pracují??? V čem je jiné, když taxíkář, lékař, policista, majitel restaurace, majitel diskotéky, či barman, nebo i programátor, a mnozí další, v noci normálně pracují, ale prodavačka v Tescu, to ne!! To je špatně!!

Není to špatně. Možnost volby je vždy dobrá. Vždy!

Já osobně většinou nakupuji ve 2:00 hodiny ráno. Mám Tesco moc rád. Bydlím sice na Praze 1 (pro nepražáky, v centru), ale i tak jedu autem na Zličín (pro nepražáky, dálnice na Plzeň), a v pohodě, bez front a spěchu, nakoupím. A ve 3:00 ráno jdu spát.

Pokud opět budete číst o nějaké (stupidní) regulaci, tak zkuste přemýšlet, k čemu je to vlastně dobré a komu to slouží. Dle mého názoru, tento konkrétní návrh na omezení svobod občanů pochází od konkurence Tesca :) A většina jiných návrhů na omezení svobod a práv občanů pochází z touhy po moci. Ne z touhy sloužit lidem.

Mám rád Tesco. Mám rád svobodu a možnost volby.

Funkce SQLite se rozšiřují pomocí PHP

PHP 23.10.2004

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ě?


Taxopyer

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?

PHP 22.10.2004
SQLite

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.