Archív

Archive for Október, 2009

Doctrine (ORM pre PHP)

Október 25th, 2009 admin Žiadne komentáre

Doctrine (Doktrína) je objektovo relačný mapper (ORM) pre PHP 5.2.3+, ktorá je umiestnená na databázovej vrstve (DBAL). Jedným z jej hlavných funkcií je možnosť písať databázové dotazy pomocou vlastného objektovo orientovaného SQL dialektu tzv. Doctrine Query Language (DQL), inšpirovaný známym Hibernate HQL. To poskytuje vývojárom výkonnú alternatívu k SQL, ktorá udržiava pružnosť, bez nutnosti zbytočných duplicít kódu.

Čo je vlastne ORM?

Objektovo relačné mapovanie (ORM) je technika používaná v programovacích jazykoch, ktorá rieši rôzne nekompatibilné typy dát v relačných databázach. To v podstate umožňuje, aby sme mali “virtuálnu objektovú databázu”, ktorá môže byť použitá z daného programovacieho jazyka. Existuje veľa voľných i komerčných balíkov, ktoré to ponúkajú a niektorí vývojári sa rozhodli si vytvoriť vlastné ORM.

Inštalácia doktríny

Inštalácia doktríny cez SVN je veľmi jednoduchá. V podstate nejde o inštaláciu ale o jednoduché stiahnutie. Stačí si teda stiahnuť akúkoľvek verziu doktríny z SVN servera: http://svn.doctrine-project.org

Ak chcete vyskúšať konkrétnu verziu, môžete použiť nasledujúci príkaz z terminálu:

svn co http://svn.doctrine-project.org/branches/1.2 .

Implementácia / inicializácia

Najskôr je samozrejme nutné si v php doktrínu includnúť – nastaviť cesty pomocou funkcie set_include_path(). Includuje sa nadradený adresár adresáru Doctrine (mám na mysli adresár 1.2/lib/Doctrine/). Napríklad:

/* V adresari $appFolder/library/ sa nachadza adresar Doctrine a subor Doctrine.php */
set_include_path(get_include_path()
  .PATH_SEPARATOR ."$appFolder/library/");

No a potom je potrebne doktrínu inicializovať. Predovšetkým je potrebné knižnici povedať kam sa budeme napájať. Napríklad:

$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
$manager->setAttribute(Doctrine::ATTR_AUTO_FREE_QUERY_OBJECTS, true);
 
/* tvorba pripojenia do db */
$connection = $manager->connection(
  $config->databaze->stroj .'://'
  .$config->databaze->username .':'
  .$config->databaze->password  .'@'
  .$config->databaze->host .'/'
  .$config->databaze->dbname,
  'doctrine'
);
$connection->setCharset('utf8');
$connection->setAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER, true);
$connection->setAttribute(Doctrine::ATTR_VALIDATE, Doctrine::VALIDATE_ALL);
$connection->setAttribute('portability', Doctrine::PORTABILITY_ALL);
$connection->getDbh()->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

Vytvorenie modelov

Aby ste mohli s databázou v doktríne pracovať ostáva nám urobiť ďalší dôležitý krok. Ako to už bolo spomenuté v odseku ORM, doktrína je vlastne vrstva ktorá robí program nezávislý od konkrétneho databázového stroja. Je jedno teda, či je to Postgresql, MySQL či Oracle. Je teda potrebné vytvoriť akúsi reprezentáciu databázy. No a v doktríne s databázou manipulujem prostredníctvom modelov – tried, odvodené od Doctrine_Record. Aby sme tieto modely nemuseli vytvárať ručne, Doctrine nám ponúka metódu, ktorá nám ich vygeneruje automaticky z databázy. Samozrejme odporúčam si tieto modely následne upraviť a skrášliť a napríklad namiesto uzivatelSkupinaId používať skupina_uzivatela_id a pod. A teraz samotný kód pre vygenerovanie modelov:

Doctrine::generateModelsFromDb('models', array('doctrine'), array('generateTableClasses' => true));

Metóda GenerateModelsFromDb vyžaduje len jeden parameter, a to je importný adresár (adresár, kde budú uložené vygenerované súbory). Druhým argumentom je pole mien databázových spojení pre ktoré sa vytvoria modely, a tretím argumentom sú jednotlivé predvoľby pre tvorbu modelov.
A teraz ukážka modelu užívateľa:

abstract class BaseUzivatel extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->setTableName('tbl_Uzivatel');
        $this->hasColumn('uzivatelId as id', 'integer', 6, array('type' => 'integer', 'primary' => true, 'autoincrement' => true, 'length' => '6'));
        $this->hasColumn('uzivatelMeno as uzivatelske_meno', 'string', 32, array('type' => 'string', 'default' => '', 'notnull' => true, 'notblank' => true, 'length' => '32'));
        $this->hasColumn('uzivatelHeslo as heslo', 'string', 255, array('type' => 'string', 'default' => '', 'notnull' => true, 'notblank' => true, 'length' => '255'));
        $this->hasColumn('uzivatelSkupinaId as skupina_uzivatela_id', 'integer', 5, array('type' => 'integer', 'default' => '', 'notnull' => true, 'length' => '5'));
        $this->hasColumn('uzivatelZmazany as zmazany', 'tinyint', 1, array('type' => 'tinyint', 'default' => '0', 'notnull' => true, 'length' => '1'));
        $this->hasColumn('rolaId as rola_id', 'integer', 2, array('type' => 'integer', 'default' => '1', 'notnull' => true, 'length' => '2'));
    }
}
class Uzivatel extends BaseUzivatel
{
}

Použitie

No a teraz poďme k nejakému príkladu. Budeme pritom pužívať vyššie uvedený model Uzivatel

Hľadám užívateľa (SELECT)

Jendoducho chceme nájsť užívateľa podľa jeho mena. A tu je kód:

$uzivatelia = Doctrine_Query::create()
     ->from('Uzivatel')
     ->where('uzivatelske_jmeno = ?', $uzivatelske_jmeno)
     ->execute();
foreach ($uzivatelia as $uzivatel) {
     if ($uzivatel instanceof Uzivatel) {
          echo 'Nasli sme uzivatela s menom '.$uzivatel->uzivatelske_meno;
     }
}

Jednoduché a prehľadné však? Lenže ono to ide ešte jednoduchšie (!):

/* Tento kod vrati prveho najdeneho uzivatela s danym menom */
$uzivatel = Doctrine::getTable('Uzivatel')
     ->findByuzivatelske_jmeno($uzivatelske_jmeno);
     ->getFirst();

Vytvorenie nového užívateľa (INSERT)

$uzivatel = new Uzivatel();
$uzivatel->uzivatelske_meno    = $uzivatelske_meno;
$uzivatel->heslo                = $heslo;
$uzivatel->skupina_uzivatela_id = 8;
$uzivatel->rola_id              = 1;
$uzivatel->save();
VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
Categories: PHP Tags:

Singularity: Lepší Windows – nová generácia OS od MS

Október 25th, 2009 admin Žiadne komentáre

Skutočne, nový operačný systém od Microsoftu sa volá Singularity. Nikdy nespadne, je odolný voči vírusom a rýchlejší ako Windows, Mac OS alebo Linux. Dokonca je teraz k dispozícii zadarmo. Napriek tomu nie je pre užívateľa vhodný. Prezradím prečo.

Pred šiestimi rokmi sa Microsoft rozhodol, že vyvinie úplne nový typ operačného systému. Projekt pomenoval Singularity. Tím vývojárov preto začal s písaním úplne nového operačného systému s jediným cieľom: musí byť nepriestrelný. V minulom roku bol projekt Singularity predstavený na vývojárskom veľtrhu TechFest. Microsoft však zdôrazňoval: Singularity nie je ďalší Windows. Je to predovšetkým studňa nápadov a technických inovácií. Microsoft tým chce tým najskôr utlmiť záujem o nový operačný systém. Teraz je potrebné sa marketingovo orientovať na Windows 7. Tie sú ešte postavené na úplne inej architektúre. Kto si chce nový operačný systém vyskúšať, môžete si stiahnuť obraz, a spustiť vo Microsoft Virtual PC 2007.

Najdôležitejšou otázkou, ktorá každého napadne, je to, ako bezpečný je nový operačný systém. Bežným užívateľom by nový systém mohol na tvári vykúzliť úsmev. Výrobcovia antivírusov už snáď ani nebudú potrební. Uľahčia najmodernejšie technológie tiež ovládanie produktu?

Utajený vývoj systému je potrebný: Windows, Mac OS, Linux — prakticky každý desktopový systém je vytvorený z veľmi starej architektúry. Ich koncepcia pochádza z čias, keď si nikto nepredstavoval nič ako internet alebo počítačový vir a bežný počítač bol veľký ako serverová skriňa.

Veľká časť tradičných operačných systémov (predovšetkým jadra) je naprogramovaná v jazyku C. To by už dnes vývojári nerobili, pretože príkazy v jazyku C a v jeho nasledovníkovi C++ pracujú priamo s registrami procesora a operačnou pamäťou. Výhodou je vysoký výkon takéhoto systému, súčasne však vzniká pri písaní tak obrovského množstvo kódu veľa chýb. Spustený kód sa potom môže zacyklit alebo začne vykonávať úplne iné operácie, ako programátor zamýšľal.

Typickým príkladom sú rôzne pretečenia pamäte: program je uložený v operačnej pamäti a začne prepisovať časti pamäte, ktoré mu už nepatria, alebo naopak – Malware prepíše určitú časť pamäte bežného programu, ktorý potom pri vykonávaní kódu začne spôsobovať príkazy, ktoré mu malware podstrčil. Nič z toho by nebolo možné, keby programy neboli písané lajdácký. Kvôli ledabolo napísaným aplikáciám sa potom operačný systém stáva nebezpečným.

Kód: Bezpečný programovací jazyk

V Singularity je tento problém vyriešený: v systéme je možné písať len bezpečný programový kód, ktorý neprevýši svoju aplikáciu, a nikto nemôže aplikácii podstrčiť iný kód. Môže za to úplne nový Runtime. Ten vlastne pre každú aplikáciu vytvorí špeciálny virtuálny stroj, v ktorom potom aplikácia beží. Programovacími jazykmi s podporou Runtimu sú predovšetkým Java a všetky .NET jazyky, ako napríklad C#. Tiež kód Singularity je takmer celý vytvorený v C#. Je však v trochu zmenenej forme a nesie meno Sing#.

Na rozdiel od C a C++ neprekladá kompilátor programový kód priamo do strojového kódu. Miesto toho ho prekladá do tzv byte kódu. Výhoda: Vďaka tomuto medzikroku môže systém kód vyskúšať a zamedziť tak rôznym formám pretečenia pamäte. To ale samozrejme stojí nejaký výkon. Čím sa to snažia Singularity dobehnúť, to sa dočítate v odseku “Výkon”.

Ochrana: Všetky procesy izolované

Na rozdiel od súčasných operačných systémov môže Singularity od seba na softvérovej úrovni oddeliť a izolovať bežiace procesy. Vďaka tomu beží aplikácia, vrátane knižníc, úplne samostatne. O túto funkciu sa stará Software Isolated Process (SIP), ktorý tiež aplikáciám prideľuje požadované zdroje. Operačná pamäť potom kompletne
spravuje SIP. Nepoužitá pamäť je prichystaná pre ďalšie aplikácie.

Runtime každého SIP beží úplne nezávisle na systéme a spúšťa sa na žiadosť aplikácie. To je veľký rozdiel oproti Linuxom alebo Windows, kde beží iba jeden Runtime pre všetky programy. Ak sa spustí napríklad viac Java appletov, potom je za nich zodpovedný len jeden Java Runtime Environment (JRE). Ak applet spadne, zhodí so sebou
JRE a aj všetky ostatné applety, ktoré v JRE bežia. V Singularity k ničomu takému nedôjde. Ak prestane fungovať jeden SIP, zvyšku systému sa to nijako nedotkne. Singularity takto navyše chránia aj jednotlivé aplikácie. Napríklad ak je ActiveX komponenta, ako súčasť Internet Exploreru, napadnutá malwarom a mohla by poškodiť systém, bude v Singularity ukončený len SIP tejto komponenty. Samotný browser zostane nedotknutý.

Kanály: Efektívna komunikácia

Vzhľadom k tomu, že SIP každej aplikácie beží do značnej miery nezávisle, musela sa vyriešiť komunikácia s jadrom. Tu obstaráva Application Binary Interface (ABI). Pritom si vystačí len s veľmi málo povelmi. Pre porovnanie: ABI v Singularity prichádza s 163 funkciami, Windows API (Aplication Programming Interface) obsahuje okolo
14 000 príkazov. Zapuzdrené SIP komunikujú (aj medzi sebou) len prostredníctvom kanálov. Tie vedú cez oblasť, ktorú kontroluje jadro — Exchange Heap. Tu sa tiež
nachádzajú súbory, s ktorými procesy práve pracujú. Každý súbor na Exchange Heap patrí vždy len jednému procesu. Zdieľaná pamäť (spoločne využívaná oblasť operačnej pamäte) je potom v Singularity úplne zakázaná, povolené je len čítanie cudzej pamäti.

Keď internetový prehliadač stiahne súbor z internetu, uloží ho na Exchange Heap. Aby ho mohol uložiť na disk, musí prehliadač otvoriť kanál na ovládači súborového
systému. Súborový systém potom komunikuje kanálom s ovládačom pevného disku, a potom dôjde k uloženiu súboru. Zároveň kanálom odovzdá SIP informácie o vlastníkovi súboru.

Kanály v tejto podobe sa zatiaľ neobjavili v žiadnom inom operačnom systéme. V blízkej budúcnosti však bude veľmi ťažké nimi operačný systém vybaviť. I preto
sa zrejme Microsoft bráni označovaniu “Ďalšia Windows”. Veľa práce totiž čaká i vývojárov aplikácií. Súčasné aplikácie, ako treba Photoshop alebo Nero, nový systém nebude podporovať, pretože sú napísané v nezabezpečenom jazyku, ako je C alebo C++. Dokonca ani Java alebo .NET aplikácie nie sú bez ďalších úprav použiteľné,
pretože im chýba podpora kanálov.

Stabilita: Modrá obrazovka je nemožná

Teraz k jadru operačného systému. V ňom sa nachádzajú ovládače, ktoré tvoria najspoľahlivejšiu časť systému. 85 percent všetkých pádov systému zaviní chybný ovládač. A chyby v Linuxových ovládačoch sú sedemkrát častejšie ako chyby vo zvyšku kódu jadra.

Problémy s ovládačmi sú z veľkej časti spôsobené tým, že systém nad nimi nemá kontrolu. Ovládač môže spustiť kód, prideliť zdroje a spôsobiť konflikt s inou systémovým komponentom. Navyše veľa ovládačov beží s vysokými systémovými právami. Keď potom taký ovládač spadne, väčšinou to znamená pád celého systému.

Singularity má prichystané dve opatrenia, ktoré čierne scenáre eliminujú. Prvým je Manifest, ktorý musí byť súčasťou každej inštalačnej rutiny ovládača. Manifest nie je nič iného ako XML súbor, v ktorom je napísané, aký hardvér ovládač vyžaduje. Vďaka tejto informácii môže Singularity už vopred rozhodnúť, či daný ovládač vôbec môže s nainštalovaným hardvérom fungovať. Tiež sa tým eliminuje konflikt rôznych ovládačov. Druhým opatrením je samotné umiestnenie ovládača. Nainštalovaný ovládač už nie je súčasťou jadra systému, ale beží ako obyčajná aplikácia zabalená v SIP. Ak ovládač kvôli programovej chybe spadne, nemá to žiadny vplyv na jadro. Singularity jednoducho spustí ovládač znova a informuje užívateľov o probléme.

To je výhoda mikrojadrá. Čo možno najviac komponentov sa spúšťa až v okamihu, kedy sú potrebné. Mikrojadro samozrejme nie je nič nové. Objavilo sa už vo výukovom
systéme Minix v roku 1987. Nasadenie v operačnom systéme sa však vtedy nedočkalo – až v Singularity. Dôvod: Systémy s mikrojadrom sú príliš pomalé.

Výkon: Odstránenie brzdy

Všetky x86 procesory majú chránené režimy, tzv Ringy. Celkom sú štyri, operačné systémy však používajú len Ring0 a Ring3. Zatiaľ čo procesy s Ring0 majú prístup ku všetkým častiam CPU a operačnej pamäte, procesy s Ring3 nemajú žiadny priamy prístup k hardvéru.

Vo Windows, Linux a Mac OS bežia všetky systémovo kritické procesy, ako sú potrebné ovládače, v Ring0 resp v kernel modu. Ostatné aplikácie, ako je potrebné Firefox, potom beží v user modu. Vlastne je to tak správne. Je tu však jedno “ale”: Hardvérové ochrana uprednostňuje monolitické jadro, v ktorom sú všetky ovládače v kernel modu. A práve to robí operačný systém zraniteľným.

Mikrojadro má jednoduché riešenie — ovládače sa spustia v Ring3. Systém zostane bez problémov stabilný, len sa tým zníži výkon: požiadavka aplikácie v Ring3 na systém musňi prebublať do Ring0, čo stojí čas, pretože Ring3 nemá priamy prístup k zdrojom. Koľko času a výkonu sa takto stratí? Nie zrovna málo. Jedno volanie cez hranice ring je päťkrát až desaťkrát pomalšie ako volanie vo vnútri ringu.

Preto sú monolitické jadrá, ktoré komunikujú len veľmi málo cez ring, rýchlejšie ako prichádzajúce mikrojadrá. Singularity sa však chránia softvérovo pomocou vyššie opísaných SIP, takže Ringy vôbec nepotrebuje. Inak povedané: Singularity beží kompletne v kernel móde, a vďaka tomu je oveľa rýchlejší ako všetky ostatné systémy.

Microsoftský tím pracujúci na Singularity meral, o koľko je softvérová ochrana bežiaci v kernel móde rýchlejšia ako použitie ring. Výsledok: Singularity je asi o 30% rýchlejší.

Windows, Linux a ďalšie systémy by tak mohli už teraz bez ďalších zložitých optimalizácií plynúť až o 30% rýchlejšie. Musela by sa však vyradiť hardvérová ochrana – čo by zvýšilo riziko pádu. Singularity sa nevzdáva vysokej ochrany a pritom ide o štíhly systém. Všetky tieto faktory vedú k excelentným výsledkom, čo sa týka výkonu. Aplikácie sú navyše, oproti tým na ostatných systémoch, znevýhodnené “Bezpečným programovaním”. Singularity sa však môžu v jednotlivých prípadoch vrátiť na hardvérovú ochranu. K tomu má systém špeciálny Sandbox, v ktorom môže kontrolovať kód, či nejde o malware. Antivir tak bude skutočne zbytočný.

Dobrú prácu odviedli vývojári Microsoftu. V súčasnosti je Singularity len v podobe modrého okna s príkazovým riadkom, experimentom je však tento nový systém úplne otvorený. Rozhodne sa bude konať o nástupcu Windows. Bude to úplne nová generácia operačného systému.

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
Categories: Singularity Tags:

DVDISASTER 0.72 – záchrana údajov

Október 24th, 2009 admin Žiadne komentáre

OPEN-SOURCE PROGRAM DVDISASTER sa špecializuje na záchranu dát z poškodených a nečitateľných optických médií. Základné funkcie programu sú dve. Prvá (preventívne) ponúka vytvorenie súboru s opravnými dátami, použiteľného k obnove obsahu z poškodeného média. Opravné dáta zaberú približne 20% kapacity predvoleného médiá, ušetríte teda médiá pri zálohovaní (na jedno médium sa vám zmestia opravné dáta až k piatich diskom). Dáta na médiu potom môžete opakovane kontrolovať.

DVDISASTER 0.72
Druhá funkcia programu dvdisaster nastupuje v okamihu, keď buď nemáte vôbec žiadnu zálohu, alebo nie sú nepoužitelné ani opravná dáta. Aplikácia potom postupuje podobne ako ďalšie nástroje na obnovu dát – snažia sa pomalým a opakovaným čítaním poškodeného média načítať čo najviac obsahu poškodeného disku a uložiť ho do počítača. Podporované sú všetky typy CD, DVD aj Blu-ray médií s rôznym stupňom poškodenia. V nastaveniach programu dvdisaster nájdete veľa možností, a to ako pre vytváranie záložných dát, tak aj pre čítanie poškodených diskov (počet opakovaní, rýchlosť čítania, preskakovanie nečitateľných sektorov atď). Vďaka slovenčine a jednoduchému používateľskému rozhraniu je program ľahko použiteľný aj pre menej skúsených používateľov. Medzi funkciami nechýba ani výpis podrobných informácií o použitom médiu. Okrem verzie pre operačné systémy Windows sú k dispozícii aj varianty pre Linux, freeBSD a Mac OS X.

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
Categories: Záchrana/Obnova Tags: