Hlavní strana | Wap | Rss | Kontakt | PetrHeller.info

Volby 2006

Volby roku 2006 máme za sebou. Jistě ale nejsem sám, koho zajímá, jak vlastně vzniká výsledné rozložení sil v poslanecké sněmovně. Vězte, že se používá tzv. d´Hondtova metoda založená na posloupnostech čísel a na přiděleném počtu mandátů v jednotlivých krajích. A kdo si chce volby 2006 a tento algoritmus naprogramovat k testování, může se podívat na již hotové implementace s příklady co by kdyby.

Matematické funkce v PHP - 2. díl

V minulém díle jsme se podívali na základní matematické funkce v PHP, dnes si k nim přidáme některé další a ukážeme si použití knihovny BCMath.

Zaokrohlouvání

Pro zaokrouhlování je nejvhodnější použít funkce round(). Má dva parametry: prvním je číslo k zaokrouhlení, druhý, nepovinný, udává na kolik číslic po desetinné čárce se číslo zaokrouhlí. Jestliže se tento parametr nezadá (nebo se zadá nula), číslo se zaokrouhlí podle první číslice za desetinou čárkou. Opět si uvedeme několik příkladů:

echo round(3.4); // 3
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.8765, 2); // 1.88
echo round(1241, -3); // 1000
echo round(5.045, 2); // 5.05

Další zaokrouhlovací funkcí je ceil(). Tato funkce vrátí nejbližší celé vyšší číslo než je číslo zadané v parametru. Jestliže ale parametr celé číslo už je, funkce vrátí to samé číslo. Opět několik ukázek:

echo ceil (10.1); //11
echo ceil (10.5); //11

Poslední funkcí pro zaokrouhlování je floor(), která vrátí nejbližší menší celé číslo, než je v parametru. V podstatě vezme parametr a odstraní z něj desetinou část. I zde platí pravidlo, které říká, že jestliže parametr je už celé číslo, funkce vrátí to samé číslo.

echo floor(10.1); //10
echo floor(10.9); //10

Ostatní funkce

Na závěr vám uvádím ostatní důležitější matematické funkce, které můžete v PHP použít.

  • sqrt() - vrátí druhou odmocninu zadaného čísla
  • pow() - vrátí číslo vzniklé umocněním základu mocniny (první parametr) mocnitelem (druhý parametr).
  • sin(), cos(), tan() - vrátí sinus, cosinus a tangens zadaného úhlu.
  • asin(), acos(), atan() - inverzní funkce k sinu, cosinu a tangentě
  • fmod() - vrátí zbytek po dělení dvou čísel, které jsou parametrem funkce
  • max(), min() - vrátí maximální a minimální hodnotu pole zadaného v parametru.

Funkce pro výpočty s libovolnou přesností - knihovna BCMath

Dále si ukážeme pracování s čísly s libovolnou přesností aneb jak zjistit druhou odmocninu ze dvou s přesností na 1 000 000 desetinných míst ;-).

Je dobré si předem říci, že můžeme pracovat s obrovskými čísly a tak se nám může stát, že v reálném čase výsledek vůbec nedostaneme. Dokonce můžeme zahltit server tak, že dojde k výpadku.

Zpracovávaná čísla se zadávají jako řetězec. Ve všech funkcích je ale jeden nepovinný parametr - číslo. Tento parametr udává na kolik číslic se má zaokrouhlit výsledek. Jestliže chceme pro všechny funkce zaokrouhlovat na stejný počet číslic, můžeme využít funkci bcscale(), jejíž jediným parametrem je právě počet míst na který se mají zaokrouhlovat výsledky.

Tolik asi k úvodu, pojďme si ukázat samotné funkce.

Základní operace - sčítání, odčítání, násobení, dělení

Pro tyto operace nám slouží následující funkce:

  • bcadd() - sčítání
  • bcsub() - odčítání
  • bcmul() - násobení
  • bcdiv() - dělení

Všechny funkce mají dva povinné parametry, kterými jsou samotná čísla a jeden nepovinný, který udává počet míst k zaokrouhlení.

Porovnání dvou čísel

Porovnání dvou čísel zajišťuje funkce bccomp(). Tato funkce má opět dva povinné parametry, kterými jsou porovnávaná čísla. Funkce vrátí jedno z následujících tří čísel: -1 - levý parametr je menší než druhý, 0 - parametry jsou stejné, 1 - levý parametr je větší než pravý.

Další funkce

  • bcpow() - umocnění dvou čísel
  • bcsqrt() - druhá odmocnina zadaného čísla

Bcpow() má dva parametry: první je základ mocniny, druhý je mocnitel. Bcsqrt má povinný parametr pouze jeden, kterým je číslo, ze kterého se má vytvořit druhá odmocnina.

Věřím, že vás tento článek zaujal. Jestliže budete mít zájem, mohu sepsat další články na témata týkající se matematiky v PHP. Stačí abyste napsali, co by vás zajímalo.

Matematické funkce v PHP - 1. díl

Při procházení různých diskusních fór mě stále zaráží otázky, které se týkají naprostých základů programování na internetu. Rozhodl jsem se tedy, že by čas od času neuškodil článek, který popisuje některá základní témata, jejichž znalost ušetří hodiny práce. Dnes se podíváme na základní matematické funkce v PHP.

V PHP je velmi velké množství všemožných matematických funkcí a konstant a určitě se vám někdy naskytne situace, kdy je budete potřebovat použít. Navíc si představíme užitečnou knihovnu BCMath, která vám umožní pracovat s čísly s libovolnou přesností. To ale až ve druhém díle.

Konstanty

Při práci s matematikou v PHP se bez konstant těžko obejdeme. Nejprve si představíme základní konstanty, které můžeme v PHP využívat:

Základní konstanty v PHP
Konstanta Hodnota Popis
M_PI 3.142 Pi (stejnou hodnotu vrátí funkce Pi())
M_E 2.718 E
M_SQRT2 1.414 sqrt(2)
M_SQRT3 1.732 sqrt(3)
M_EULER 0.577 Eulerovo číslo

Přehled všech konstant můžete najít na stránce v manuálu PHP, ale jedná se většinou o konstanty typu 1/pi nebo pi/2 apod. Neuvádím je zde, neboť si myslím, že je přehlednější je zapsat standartním způsobem.

Převodní funkce

Převodní funkce slouží k převodu jedné číselné soustavy do soustavy jiné. V PHP můžeme využít funkce pro převod mezi čtyřmi soustavami - binární (dvojkovou), oktalovou (osmičkovou), decimální (desítkovou) a hexadecimální (šestnáctkovou). Ke všemu slouží následující funkce:

  • decbin() - desítkové na dvojkové
  • dechex() - desítkové na šestnáctkové
  • decoct() - desítkové na osmičkové
  • bindec() - dvojkové na desítkové
  • hexdec() - šestnáctkové na desítkové
  • octdec() - osmičkové na desítkové
  • bin2hex() - binární na šestnáctkové

Funkce mají vždy jeden parametr, kterým je číslo k převodu. Vrací převedené číslo.

Nejuniverzálnější funkcí pro převod mezi číselnými soustavami je ale base_convert(), která umožňuje převod čísla z libovolné soustavy do jiné libovolné soustavy. Funkce má tři parametry: prvním je řetězec reprezentující číslo k převodu, druhým je číselná soustava ze které se řetězec převádí a třetím je číselná soustava do které se řetězec převádí. U této funkce je dobré si uvést příklad:

//převádíme řetězec "abcdef" v šestnáctkové soustavě do soustavy desítkové
echo base_convert("abcdef", 16, 10);

Užitečné mohou být také funkce pracující s obloukovou mírou:

  • deg2rad() - stupně na radiány
  • rad2deg() - radiány na stupně

Generátor náhodných čísel

V PHP, stejně jako v ostatních jazycích, můžeme používat generátor pseudonáhodných čísel. Dříve (do verze 4.2.0) se před samotným voláním náhodného čísla ještě musel spustit generátor pomocí funkce srand(). Dnes je tato funkce již zbytečná.

Pro získání samotného náhodného čísla slouží funkce rand() a mt_rand(). Funkce mají dva parametry, kterými jsou minimální a maximální číslo, v jejichž rozmezí se náhodné číslo vylosuje. Rozdíl mezi nimi je ten, že rand() na některých strojích vygeneruje číslo pouze do 32 758 (přesnou hodnotu vrací funkce getrandmax()), ale zase zabírá méně systémových prostředků. Pokud vám tedy stačí číslo menší nebo rovno 32 758 doporučuji raději používat rand(), v opačném případě musíte použít mt_rand(). Ale i mt_rand() vygeneruje pouze konečné číslo, jehož maximální hodnotu můžete zjistit pomocí mt_getrandmax(). Jestliže chcete vylosovat číslo v intervalu 0 až největší možné, použijte zápisu mt_rand(0, mt_getrandmax());

Ještě se zmíním o funkci lcg_value(), která vrací čísla v rozmezí (0, 1).

V dalším díle si ukážeme zajímavější matematické funkce v PHP a představím vám knihovnu BCMath.

Příručka - Objektově orientované programování v PHP 5

Poslední dobou mě velmi zaráží hrubé a vulgární komentáře od primitivnich teenagerů na internetu. O tom ale jindy. Naštěstí všichni teenageři nejsou součástí tupé masy; pojďme se podívat na výtvor jednoho z nich.

Web se jmenuje Objektově orientované programování v PHP 5 a skutečně doporučuji jeho detailní pročtení. Autor, patrně devatenáctiletý Jakub Mrozek, zde velmi čtivým a jednoduchým způsobem popisuje objektové programování v PHP 5. Od úplných základů čtenáže provádí až k dědičnosti, polymorfismu, abstrakci. Na webu se setkáte dokonce i se základnímy návrhovými vzory.

Sám autor na svých stránkách popisuje svůj projekt takto:

Vývoj tohoto webu trval přibližně měsíc. Skripty jsou z 50% vlastní, 10% je z knihy PHP programujeme profesionálně a zbytek buď z manuálu, nebo z jiných zdrojů. Web bude pravidelně aktualizován, ihned jak bude nějaká zajímavá změna v koncepci OOP v PHP, určitě se zde objeví.

Pokud již máte začátky programování v PHP zdárně za sebou a láká Vás do tajů PHP 5 proniknout trochu více, je tento web o objektovém programování v PHP5 pro vás vhodným studijním materiálem.

PHP 6 za dveřmi

PHP 5 se zatim dlouho na internetovém slunci neohřálo a už tu máme PHP 6

Dneska jsem narazil při prohlížení nepřečtených článků na Root.cz na zajímavý článek Vývoj PHP 6. Nemá cenu psát zde všechny plánované novinky, přečtěte si je v článku. Při té příležitosti ale rozhodne nezapomente otevřít čtyři roky starý seriál a začíst se do základů OOP v PHP :)

Strukturovaná diskuse pod články v PHP - praxe

Na Interval.cz dnes vyšel další náš článek - druhý díl o strukturovaných diskusích. Tento díl je již plně praktický, naleznete v něm třídu pro volné použití. Článek je určen především pokročilejším programátorům v PHP. Tento efektivní algoritmus využívá např. náš redakční systém jak pro diskusi pod články, tak pro diskusní fórum. Nyní přehlednou strukturovanou diskusi můžete mít pod svými články i vy.

Strukturovaná diskuse pod články v PHP

Na Interval.cz dnes vyšel můj článek Strukturovaná diskuse pod články - teorie. Článek je určen především pokročilejším programátorům v PHP. Uvedený algoritmus velmi efektivně využívá např. náš redakční systém jak pro diskusi pod články, tak pro diskusní fórum. Strukturované diskuse jsou bezesporu přehlednější než standartní diskuse. Pokud chcete mít moderní web, rozhodně si článek přečtěte. Autorem algoritmu je kolega Jan Bulánek, já jsem se postaral o jeho implementaci.

XForms - první pohled

XHTML 2 sebou přineslo bezpochyby velmi razantní změny, kterým se nevyhnuly ani tak zásadní věci jako formuláře. Ty se nyní vytváří pomocí XML a dokonce i odeslání dat je řešeno prostřednictvím XML. V tomto článku bych vám rád XForms stručně představil a ukázal vám, jaké (ne)výhody mohou webové formuláře XForms přinést.

V první řadě zapomeňte na starý způsob psaní formulářů. XForms jsou naprosto odlišná. Na jednoduchém příkladu si rozdíl ukážeme. Formulář na výběr jídla v restauraci bude vypadat takto:


<form action='objednat.php' method='post'>

 <label>Vepřové</label><input type='radio' name='hlchod' value='vepřové' checked='checked' /><br />
 <label>Hovězí</label><input type='radio' name='hlchod' value='hovězí' /><br />
 <label>Příloha:</label><input type='text' name='priloha' /><br />
 <input type='submit' />

</form>

To je asi tak vše, co nám dnešní formuláře umožňují (mimo jednoduchých změn vzhledu pomocí CSS). Tvorba formuláře pomocí XForms sice je o něco těžší, ale větší kontrolu nad formulářem máme zaručenou. Ukážeme si tedy, jak by se ten samý formulář vytvořil pomocí XForms.

Nejprve si v hlavičce nadefinujeme model element, kterým popíšeme data formuláře a vytvoříme strukturu XML, která se odešle cílovému skriptu.


<head>
<xforms:model>
  <xforms:instance>
    <vecere xmlns=''>
      <hlavnichod/>
      <priloha/>
    </vecere>
  </xforms:instance>
<xforms:submission action='objednat.php' method='post' id='submit'/>
</xforms:model>
</head>

Vytvořily jsme model elementu vecere, který obsahuje elementy hlavnichod a priloha. V těle dokumentu poté samotný element vytvoříme:


<body>

 <xforms:select1 ref='hlavnichod'>
  <xforms:label>Hlavní chod</xforms:label>
  <xforms:item>
    <xforms:label>Vepřové:</xforms:label>
    <xforms:value>veprove</xforms:value>
  </xforms:item>
  <xforms:item>
    <xforms:label>Hovězí:</xforms:label>
    <xforms:value>hovezi</xforms:value>
  </xforms:item>
 </xforms:select1>

 <xforms:input ref='priloha'>
  <xforms:label>Příloha:</xforms:label>
 </xforms:input>

 <xforms:submit submission='submit'>
  <xforms:label>Odeslat</xforms:label>
 </xforms:submit>

</body>

Jak jsem již naznačil v úvodu článku, výsledná data se odešlou cílovému skriptu v XML. V naší objednávce večeře by data, za předpokadu, že uživatel vybere hlavní chod „hovězí“ a jako přílohu napíše např. „omáčka s knedlíkem“ vypadala takto:


<vecere>
  <hlavnichod>hovezi</hlavnichod>
  <priloha>omáčka s knedlíkem</priloha>
</vecere>

Tento kód se výborně hodí pro zpracování různými XML parsery.

Výhody a nevýhody XForms

Jako každá technologie, tak i XForms mají některé pro a proti.

  • XForms obsahují interní funkce pro základní matematiku či pro jednoduchou práci s řetězci, odpadá tak nutnost používat skriptování
  • XForms oddělují data a samotný web
  • XForms jsou založeny na XML a tudíž jsou velmi flexibilní
  • Výměna dat v XML přímo předurčuje nasazení XForms v obchodním styku
  • Jsou složitější na implementaci
  • Zatím nedostatečná podpora ze strany prohlížečů

Hlavně absence prohlížečů podporujících XForms je dnes podle mého názoru hlavním problémem k prosazení této velmi zajímavé technologie. To samé se ale říkalo i o Flashi či Javě, která je dnes běžnou součástí moderního webu. To samé bude určitě zanedlouho platit i o XForms.

Teng začíná u nás na Toplist.cz

Teng je moderní univerzální šablonovací systém. O tom svědčí např. i to, že na něj přechází jeden z nějvětších počitadel u nás, Toplist.cz. Je to také první web se systémem Teng, který jsem u nás viděl.

Dneska kolem asi tak třinácté hodiny jsem si všiml drobných změn grafiky na webu Toplistu a když jsem uviděl pod jednou tabulkou kus nezparsovaného kodu, bylo mi jasné, že se v Toplistu něco děje.

Ale až nyní jsem si všiml toho, že v patičce webu je uveden na Teng i odkaz. Zatím to ale vypadá tak, že Teng je používán pouze na přehledech statistik jednotlivých zaregistrovaných stránek. Na hlavní straně ještě není po Tengu ani zdání a grafika je tam také stále stejná. Myslím si ale, že ostrý provoz Tengu na Toplistu je otázkou několika dnů.

Co ale Teng vůbec je?

Teng je velmi komplexní šablonovací systém, který vytvořili samotní tvůrci Seznamu a vydali pod GNU licencí. Stahovat můžete z oficiální adresy, kde najdete i podrobnou dokumentaci.

Hlavní rozdíl mezi šablonovacím systémem Teng a jinými šablonovacími systémy je ten, že Teng běží jako zkompilovaný modul přímo na serveru. To má za následek samozřejmě mnohem rychlejší generování výsledného kodu.

Některé z možností systému Teng:

  • podpora pro PHP, Python, C++
  • mnohem rychlejší generování stránek právě díky běhu zkompilovaného modulu
  • cykly, podmínky, proměnné, ...

Sám jsem zvědav, jak se Teng u nás rozšíří. Jedná se bezesporu o komplexní systém pro stavbu i velkých webů, což Toplist.cz zcela jistě je.