Dynamicky pridávať stránky do kontajnera Zend_Navigation za behu

Tým, Steven Lloyd Watkin , štvrtok 07.1.2010 22:50

V pokračovaní na môj posledný príspevok o Zend_Navigation, cesta žiadosti o sitemap.xml na vlastné radič / akciu , tento post je asi dymnamically pridávanie stránok do kontajnera Zend_Navigation za behu / spustenie skriptu.

Jeho všetko v poriadku a dobrej uvedením vašich stránok v ini alebo XML súboru, ale na nejakom mieste budete mať meniace sa stránky na vašom webe, ktorý chcete ako súčasť menu, mapa stránok, alebo byť súčasťou vášho strúhanka chodník. Preto to, čo musíme urobiť, je pridať stránky do nášho Zend_Navigation kontajnera za behu. Príkladom pre toto by bolo v pridávaní správ, blogov alebo stránok poznámky, atď

Pokračovať v čítaní 'dynamicky pridávať stránky do kontajnera Zend_Navigation za behu' »

Trasa žiadosti o sitemap.xml na vlastné radič / akcia

Tým, Steven Lloyd Watkin , v stredu 06.01.2010 00:13

Za účelom priamych žiadostí / sitemap.xml na vlastné radič a akcie v Zend Framework aplikácie jednoducho pridajte nasledujúci text do vašej application.ini alebo alternatívne konfiguračný súbor (napr. používam navigation.ini):

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = index
 resources.router.routes.sitemap.defaults.action = sitemap

Napríklad kód pre výstup môže byť videný tým, že vytvorí akciami v príslušných regulátora (napr. moja mapa stránok spočíva v indexe regulátora, Sitemap akcie):

 < php
 trieda IndexController
     rozširuje Zend_Controller_Action
 {
     / **
      * Omietky Sitemap na základe Zend_Navigation nastavenie
      * /
     verejnej funkcie sitemapAction ()
     {
    	 echo $ this-> Zobraziť-> Navigácia () -> mapa stránok ();
    	 $ This-> Zobraziť-> layout () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemap možno rýchlo a ľahko získané pomocou Zend_Navigation , skvelý rýchly návod (a všeobecne veľmi užitočné pre Zend tutoriály Framework) je Zend Odliatky - dynamicky vytvára menu Sitemap a strúhankou .

Zend Framework Per-Module na základe nastavenia

Tým, Steven Lloyd Watkin , v piatok 01.1.2010 22:40

Vytvoril som reakciu na tento post, ktorý vyžaduje menej konfigurácie, pozri modul založený Layout - Zend Framework .

Pri použití Zend Frameworku s modulmi, ich zjavné, že ak používate rôzne (sub-) miesta mimo rovnaká žiadosť nemusíte nutne chcieť rovnaké rozloženie skripty pre každú časť. Rozhodol som sa ísť s nasledujúce štruktúry webu:

  / Aplikácie
     / Regulátory
         ...
     / Modely
     / Modules
         / Default
             / Regulátory
             / Rozvrhnutie
                 / Skripty
             / Pohľady
                 / Skripty
         / AnotherModule
             ...
     / Skripty

Problém bol v nastavení rozloženia skripty na na-základ modul. Odpoveď prišla až s použitím Akcia Helper. Nastavenie rozloženia na na-základ modul zahŕňa tri kroky:

  1. Application.ini (alebo podobnú konfiguráciu nastavenia):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layouty / skripty"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modules / default / layouty / skripty"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / člen / layouty / skripty"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / affiliate / layouty / skripty" 
  2. Vytvorte si svoj Akcia Helper:
      <? Php
     / **
      * Nastavuje rozloženie cestu na per-modul základe
      *
      * @ Autor Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Od 2010-01-01
      * /
     trieda Pro_Controller_Action_Helper_SetLayoutPath
         rozširuje Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Nastavuje usporiadanie cestu založenú na module
          * /
         verejnej funkcie preDispatch ()
         {
        	 $ Modul = $ this-> getRequest () -> getModuleName ();
    
    	     if ($ boot strap = $ this-> getActionController ()
    	                        -> GetInvokeArg ('zavádzanie')) {
    
    	         $ Config = $ boot strap-> getOptions ();
    
    	         if (isset ($ config [$ modul] ['zdrojov'] ['layout'] ['layoutPath'])) {
    	             $ = LayoutPath
    	                  $ Config [$ modul] ['zdrojov'] ['layout'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ('layout')
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. A konečne boostrap akcie pomocníka:
      ...
         / **
          * Nastavuje usporiadanie skripty na na-základ modul
          * /
         chránené funkcie _initLayoutHelper ()
    	 {
    	     $ This-> boot strap ('frontController');
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         nový Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Doktrína: datetime predvolené NOW ()

Tým, Steven Lloyd Watkin , v stredu 30. decembra 2009 18:30

Bol som zápasí s vytvorením databázy schéma pre nový Zend Framework projekt. Ja som pomocou pokuse o použitie doktríny ORM pre moju databázu modelov. Musím nastaviť schému tak, že mi umožnilo nastaviť predvolený dátum a čas pre `datetime` stĺpec, napr pri pridaní novej správy mám aktuálnu časovú pečiatku. Po dlhom hľadaní a experimentovanie som našiel riešenie, takže som zdieľanie.

Vo vašom schéme Yamli súbor jednoducho vykonať nasledujúce kroky:

 Správa:
   ACTAS:
     Timestampable:
       vytvoril:
         meno: created_at
         Typ: časovej pečiatky
         formát: YMD H: i: s
       aktualizácia:
         meno: last_updated
         Typ: časovej pečiatky
         formát: YMD H: i: s
   stĺpce:
     id:
       Typ: integer
       primárnej: pravda
       AUTOINCREMENT: pravda
     Meno: string (255)
     email: string (300)
     správa: string (2000)

Ak na druhú stranu nechcete, "updated_at` stĺpec, môžete použiť nasledovné:

 Správa:
   ACTAS:
     Timestampable:
       vytvoril:
         meno: created_at
         Typ: časovej pečiatky
         formát: YMD H: i: s
       aktualizácia:
         Bezbariérový: pravda
   stĺpce:
     id:
       Typ: integer
       primárnej: pravda
       AUTOINCREMENT: pravda
     Meno: string (255)
     email: string (300)
     správa: string (2000)

PHP návrhové vzory - vzor Pozorovateľ

Tým, Steven Lloyd Watkin , utorok 29. decembra 2009 22:02

Čítal som hlavou napred návrhové vzory v poslednej dobe a rozhodol sa napísať niektoré vzory ako príklady PHP pre vlastný prospech. Prvý z nich, že som sa rozhodol ku kódu sa je vzor Observer . Formálne definície Observer Vzorka je:

Pozorovateľ vzor (podmnožina asynchrónny publish / subscribe vzor ) je softvér design vzor , v ktorom objekt , nazvaný predmet, udržiava zoznam jeho rodinných príslušníkov, tzv pozorovatelia, a upozorní ich automaticky akékoľvek zmeny stavu, zvyčajne tým, že volá jeden z ich metód . Používa sa najmä na vykonávanie distribuovaných systémov spracovania udalostí.

Ako sa systémy voľnejšie viazanú uistite sa, že keď sa stane udalosť všetky systémy, ktoré vyžadujú znalosť týchto aktualizácií je informovaný. Napríklad, blogu, po uložení post budeme musieť aktualizovať vyhľadávače (napr. Lucene), aktualizovať náš sitemap, tagy, e-mail objednaný užívateľa, atď pozorovateľ vzor umožňuje vývojárom pridať ďalšie poslucháčov bez úpravy ich pozorovateľný objekt . Nástrekom pozorovateľov (tj vyhľadávač aktualizácia pozorovateľa, sitemap generátor, atď), do predmetu (tj editácia blogu systému) môžeme dovoliť plne vykonávať všetky potrebné aktualizácie bez akýchkoľvek zmien.

Pokračovať v čítaní 'PHP návrhové vzory - vzor Observer' »

Úrad výpočtových sietí pomocou virtuálnych prostredí - Časť 4

Tým, Steven Lloyd Watkin , piatok 04.12.2009 23:59

Úvod

Pracujem vo firme, kde sme sa spustiť veľa dávkové úlohy spracovanie milióny záznamov dát každý deň a ja som bol nedávno premýšľal o všetkých strojoch, ktoré sedia okolo každého a každý deň nerobí nič pre niekoľko hodín. Nebolo by dobré, keby sme mohli využiť týchto strojov pre posilnenie výpočtového výkonu našich systémov? V tomto súbore článkov Idem sa pozrieť na potenciálne výhody zamestnávanie úradu siete pomocou virtualizovaných prostrediach.

V časti 3 sme vytvorili virtuálne spracovanie a nastaviť počítače so systémom Windows, aby sa stal nečinnosti-úväzok.

Nainštalovaný najnovší kód

Nevyhnutne po vytvorení vašich pracovníkov obchodnej logiky sa bude meniť, bude sa nachádzajú chyby, účinnejšie kód bude rýchlejší vyrábať tak opúšťať vaši zamestnanci sedeli spracovanie dát pomocou starý smradľavý kód . Ako teda zabezpečíme, že sme vždy používať najnovšiu a najlepšiu verziu nášho spracovanie skriptov?

Existuje niekoľko jednoduchých spôsobov, ako ľahko sme mohli urobiť to, trik, však, je zníženie výpočtového výkonu a sieťovú prevádzku v dosiahnutí tohto cieľa. Začnime s najjednoduchšie riešenie a zlepšiť to pomaly cez niekoľko iterácií.

Prvá metóda by sa jednoducho pripojiť k nášmu serveru kontroly práce (cez Sambu, FTP, alebo podobné) a strhnúť najnovšiu verziu kódu. Nie veľmi výkonný, ale to bude robiť svoju prácu. Umožňuje zlepšiť na tom niečo, ako sa o vytvorenie a použitie rsync skript, že zakaždým, keď namiesto toho? Inak, čo sa o uvedenie našich najnovších spracovanie skriptu do podvracanie odhlasovaní kód spočiatku a potom už len aktualizovať náš kód na každom spustení ( svn update )?

V závere sme mohli skončiť s bash skript (nazvaný cron každých 10 minút), ktorý vyzerá rovnako jednoduché ako tento:

  #! / Bin / sh
 ak ps ax | grep-v grep | grep php > / dev / null
 potom
     echo "práca je v súčasnej dobe spracovania, exit"
 iného
     echo "práca nie je spustená, spustite teraz"
     cd / cesta / k / pracovné / copy
     svn update
     php yourJobProcessingScript.php
 fi 

Teraz môžeme byť istí, že s každým spustení sme definitívne spustený posledný kód. Sme to zabezpečiť, že sa aktualizuje základný kód každej dobe vykonávame beh a obmedziť prevádzku v sieti iba prenos súborov rozdiely medzi našej siete.

V mojom demonštrácie nastavenia, urobil som presne, ako je uvedené vyššie. Subversion je nainštalovaný na svojom serveri spracovanie zákaziek a ja som proste vytiahol posledný kód z 'pracovník' pobočka pomocou 'svn update'. Tiež som pridal číslo verzie značku môj spracovanie skript, ktorý bol vrátený do databázy ako súčasť výsledkov návratu. Týmto spôsobom som mohol vidieť, že môj kód bol aktualizovaný zakaždým, keď som kopíroval môj kufor do tj pracovník pobočky, že som bol rozhodne beh najnovšie spracovanie skriptu.

Použitie najnovších údajov

Ak je vaša práca spracovanie využíva zdroje údajov potom v určitom okamihu sa jedná bude aktualizovaný tiež. Ak ste zavolať svoje zdroje dát na veľmi riedke základe budete povodňovej vašej siete s prevádzkou, akonáhle si pracovníci začnú prinášať všetko, čo ku kľudu. Pre moje riešenie, som sa rozhodol, že by som chcel presunúť svoje zdroje dát okolo s mojou VM.

Hold si tam kone! Čo ak je moja zdroje dát sú obrovské? No to je naozaj prípad, koľko dát je reč? To môže byť viac efektívne z hľadiska nákladov na inštaláciu ďalšie väčší pevný disk na každom stroji, než na nákup ďalšie spracovanie servera. To je otázka rozpočtu a je na podniku, aby rozhodol. Je možná, že vaše zdroje dát sú tak veľké, že je to len možné, aby toto množstvo dát vo vašom pracovník stroja. V tomto prípade to, čo by ste robili? Tak sme sa mohli pozrieť na volania miestnej dátový server, ale môže to spôsobiť problémy so sieťou. V tomto prípade distribučnej sústavy, ako je tento, sa môže stať nereálne zahrnúť do kancelárskeho prostredia. To môže tiež byť, že sa môžete pozrieť na alternatívne beh stratégií, napríklad iba volanie vaši zamestnanci medzi dvadsať hodín a 6 hodín ráno každú noc a / alebo škrtiacej zdroj údajov žiadostí.

Pohybujúce sa na povedzme našich dátových zdrojov činí 100 GB dát. No áno, to je docela dost dát sa pohybovať po sieti na aktualizáciu. Ako by sme zabezpečiť, že máme poslednej kópie dát v tomto prípade? Rsync je možné, ale osobne si myslím, spustením svojej najnovšej zdroja dát na serveri miesto spracovania a toto nastavenie ako majster v replikáciu (s veľmi dlho bin log) by mohol byť spôsob, ako ísť:

replikácie Pri nastavení každého z vašich zamestnancov sa ako otrok do práce aktualizácie ovládanie servera do zdroja údajov budú pekne steká do svojho zamestnanca, bez k obrovskému nárastu činnosti siete (ktorá je, ak budete vykonávať obrovské množstvo dát aktualizovať a všetkých svojich zamestnancov kop vo naraz). To má výhody oproti rsync v tom, že by nedostal dlhá pauza pred každú prácu, ako je aktualizácia databázy, mysql na váš zamestnanec bude daemon priebežne aktualizovať svoje údaje, zatiaľ čo spracovanie pokračuje.

To je, ako mám nastaviť svoj server demonštrácie. Ak chcete nastaviť replikácia Sledoval som návod na stránkach mySQL ( Nastavenie replikácie ) a do 20 minút som mal inital pracovník kopírujúci kontroly práce servery dátového súboru. Za každý ďalší pracovník nastavenia replikácie a proces pracoval zakaždým, keď bol skopírovaný VM.

Zhrnutie

V tejto časti článku sme sa pozrel na to, ako ľahké a bezbolestné je, aby vaše spracovaní kódu v aktuálnom stave pomocou rsync alebo using subverion (SVN) robiť prácu a znížiť prevádzku v sieti v rovnakú time. Hovorili sme tiež o tom, ako , aby vaše informácie o zdroji údajov sa-to-dáta tým, že mu dostali až ku každému z vašich pracovníkov. Tak sme oblasť zabezpečenie toho, že sme sa držať krok s obchodnej logiky a informácie v našom systéme kancelárii siete. K dispozícii budú samozrejme nespočetné množstvo alternatív na plnenie týchto úloh, ale tu boli dva jednoduché príklady ukazujú, aké ľahké je riešenie prísť.

Nabudúce

V záverečnej časti tohto seriálu, vhodne pomenovaný Časť 5 , budeme diskutovať o nasadenie tohto systému pre. Budem zhrnúť to, čo sme sa naučili a čo sa mi podarilo vytvoriť.

Úrad výpočtových sietí pomocou virtuálnych prostredí - Časť 3

Tým, Steven Lloyd Watkin , piatok 04.12.2009 23:37

Úvod

Pracujem vo firme, kde sme sa spustiť veľa dávkové úlohy spracovanie milióny záznamov dát každý deň a ja som bol nedávno premýšľal o všetkých strojoch, ktoré sedia okolo každého a každý deň nerobí nič pre niekoľko hodín. Nebolo by dobré, keby sme mohli využiť týchto strojov pre posilnenie výpočtového výkonu našich systémov? V tomto súbore článkov Idem sa pozrieť na potenciálne výhody zamestnávanie úradu siete pomocou virtualizovaných prostrediach.

V časti 2 sme sa pozreli na pracovné miesta server pobeží, a ako pracovných miest by mal byť nakonfigurovaný tak, aby sa dosiahlo čo najväčšie množstvo spracovanie a zároveň zabezpečiť, že každá práca je spracovaná bez výnimky.

Nastavenie pracovník - alebo núdzový server

Ďalším krokom v tomto procese je nastaviť virtuálny pracovníkov. Pre tento budem používať inštalácia CentOS pomocou VirtualBox. Idem k inštalácii MySQL a PHP na serveri, tiež známy ako krívať (Li Nux, m ySQL, P HP) Servera (Možno som sa, že názov sa).

  • Inštalovať VirtualBox na váš počítač so systémom Windows (nasledovať odkaz)
  • Stiahnuť a nainštalovať CentOS (aktuálna verzia 5.3) v rámci vytvorený virtuálny stroj

Neexistuje žiadny bod, aby som bude to tam asi 1.000 's veľkou cvičenie vonku (ok, tu je jedna: Vytvorenie a Managing CentOS virtuálny stroj pod VirtualBox ). Dôležité poznamenať, myslím, že som zavolala virtuálny stroj GridMachine.

Čo sa týka mojej voľby virtualizácie klientov a operačný systém tam nie je žiadny veľký závažný dôvod pre každú voľbu. VirtualBox je niečo, čo som sa používať na svojom domácom počítači a je podporovaná tromi hlavnými operačnými systémami. Vybrala som si CentOS ako dobrý stabilný OS, a používam ho na vlastný webový server. Som veľkým zástancom správne nástroje pre prácu (aj keď ja som použitie 'použitia najrýchlejší a najjednoduchší pre vás' mentalita tu), takže ak operačný systém X spúšťa svoj ​​kód rýchlejšie a efektívnejšie využiť, že namiesto toho:)

Dôležité je, aby vaše VM používa DHCP, inak pre každého nového virtuálneho stroja by bolo nutné konfigurovať samostatne, ktoré je niečo, čo nemáme want.By pomocou DHCP nepotrebujeme pre konfiguráciu sieťových nastavení individuálne pre pracovníka stroje, bude DHCP ruky z IP pre vás. Preto je možné skopírovať vaše virtuálny stroj o kancelárii bez obáv o nastavení každej z nich sa (to zvyšuje škálovateľnosť a zníži pracovník správy).

Proces by ste mali za cieľ dosiahnuť, by bolo získať nový fyzický stroj, nainštalovať VirtualBox a potom do značnej miery nasadiť virtuálny obraz, bez veľa iného. To by mohlo byť múdre nastaviť všetky svojich zamestnancov na inej podsieti, takže si môžete aspoň vidieť, koľko strojov so systémom. Budete tiež musieť nastaviť stroje na dlhodobý prenájom alebo lízing neobmedzené DHCP.

Ako spustiť práce na pracovníka

Jedná sa o zaujímavú oblasť a tam je niekoľko overených metód pre spracovanie práce na pracovníka. Tu som si len diskutovať dva najevidentnejší:

  • Trvalo spustenie skriptu: Skript, či už je to shell skript, alebo PHP skriptu je vykonaný raz na pracovníka a beží ako súčasť nekonečnej slučky. Ja som túto metódu diskontovaných ako jeden pád skript a potenciálne vaši zamestnanci prestanú plynúť, bez toho aby nejaký zásah.
  • Cron na základe skriptu: každých x minút cron démona začína volanie skriptu dať veci do pohybu. Bez nejaké kontroly by to mohlo viesť k mnohých mnohých kópií pracovníka skript beží.

Moje rozhodnutie bolo ísť s cron, ktorý odštartuje skript každých 10 minutes. Môj skript vykoná nasledujúce úlohy:

  1. Získať zoznam procesov a grep to pre 'php'. Ak nebol nájdený potom pokračovať.
  2. Zavolajte svoju prácu kód, v mojom prípade by to bolo niečo, čo PHP na základe
  3. Pracovník skript dokončí jeho beh
  4. Pripravený ísť zase na ďalšie príslušné výzvy

Moja bash skript vyzerá takto:

  #! / Bin / sh
 ak ps ax | grep-v grep | grep php> / dev / null
 potom
     echo "práca je v súčasnej dobe spracovania, exit"
 iného
     echo "práca nie je spustená, spustite teraz"
     php yourJobProcessingScript.php
 fi 

Poznámka: echo sú takmer úplne zbytočné, ale môže pomôcť ďalšia osoba, ktorá príde, aby sa pokúsila upraviť.

Tým končí nastaviť pracovníka virtuálneho stroja, rýchly, jednoduchý a ľahko kopírovať pre každý nový kus hardvéru, ktorý ich prijal. 'Prefíkanosť' distribučnej sústavy naozaj nie je v OS zviditeľniť, jeho všetko robiť s kódom vytvorených pracovných miest pre spracovanie, práce konfigurácie, a uistite sa, že práca spustí v prípade potreby (tj keď hostiteľ je nečinný ).

Nastavenie systému Windows pre inicializáciu pracovníkov

Prvou úlohou je vypracovať príkazu potrebné na spustenie virtuálneho stroja z okna príkazového riadka. Ak ste nainštalovali VirtualBox v predvolenom umiestnení a ste vymenoval svojho pracovníka GridMachine potom príkaz požaduje, aby zaťaženie vášho pracovníka je:

  "C: \ Program Files \ nie. \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Avšak spustiť skript v 'bezhlavého' stavu musíme použiť:

  "C: \ Program Files \ nie. \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - VRDP = off 

Tým sa spustiť virtuálny počítač bez grafického používateľského rozhrania a nechajte ju zachrániť štátny elegantne. Druhý argument sa vypne RDP tak to nie je v rozpore s oknami RDP, alebo vám správu o načúvaní na porte 3389. Názov virtuálneho stroja je malé a veľké písmená!

Ďalej budeme musieť nastaviť okna až k naštartovaniu nášho pracovníka VM, akonáhle stroj bol nečinný. Ak to chcete (na Windows XP), budete musieť ísť Štart -> Programy -> Príslušenstvo -> Systémové nástroje -> Naplánované úlohy ako je uvedené nižšie:

naplánovaných úloh

Ďalšie kliknite na 'Pridať naplánovanú úlohu' nasledované prechádzať pridať vlastný program. Navigovať do VBoxManage skrípt a kliknite na tlačidlo OK. Rozvrh váš úloha pre niektorú z možností (budeme zmeniť v minúte) a pokračujte. Po preskočení na ďalšiu obrazovku Windows sa vás opýta, kto chcete spustiť túto úlohu, tak by som navrhnúť buď 'správcu' alebo vytvorenie nového privilegovaný užívateľ. Pamätajte, nechceme zasahovať do štandardnej zamestnanci účet na stroji, na akomkoľvek mieste. Kliknite na tlačidlo Ďalej a skontrolujte zobraziť pokročilé možnosti pre túto úlohu.

Na konci behu textového poľa pridať naša 'startvm GridMachine' reťazec, a zabezpečí, že beží iba pri prihlásení je vľavo unticked. Navštívte harmonogram úloh a ďalšie zmeny rozvrhu rozbalovacieho na voľbu 'pri nečinnosti', vyberte dobu, po ktorú chcete, aby bol stroj nečinnosti pred prechodom na ďalšiu záložku.

Nakoniec zrušte začiarknutie voľby v ktorom sa uvádza zastaviť úloha, ak bol spustený X množstvo času, ale zaškrtnite možnosť zastaviť úloha, ak je stroj už nie je nečinný.

plán

To je to potom pre Windows Host nastavenie!

Zhrnutie

V tejto časti sme vytvoriť virtuálny stroj pôsobiť ako robotník, rovnako ako spôsob, ktorý nazývame a spúšťať skripty naša práca spracovanie (pre seba PHP skriptu). Odtiaľ sa pozrieme na to, ako nastaviť naše kópie okien naštartovať virtuálny počítač v režime bezhlavý, keď je počítač nečinný stane, a uložiť svoj stav, keď používateľ obnoví využitie stroja. Dúfajme, že v túto chvíľu vidíte, aké jednoduché je vytvoriť taký systém, a sú svrbenie získať nejaké pokusy ísť sami!

Nabudúce

V časti 4 sa budeme sa pozerať na používanie nástrojov, aby zabezpečila, že používate najnovšiu verziu kódu a dátových zdrojov tak, aby získané výsledky sú vždy up-to-date s najnovšími obchodných informácií a logiky.

Úrad výpočtových sietí pomocou virtuálnych prostredí - Časť 1

Tým, Steven Lloyd Watkin , piatok 04.12.2009 23:23

Úvod

Pracujem vo firme, kde sme sa spustiť veľa dávkové úlohy spracovanie milióny záznamov dát každý deň a ja som bol nedávno premýšľal o všetkých strojoch, ktoré sedia okolo každého a každý deň nerobí nič pre niekoľko hodín. Nebolo by dobré, keby sme mohli využiť týchto strojov pre posilnenie výpočtového výkonu našich systémov? V tomto súbore článkov Idem sa pozrieť na potenciálne výhody zamestnávanie úradu siete pomocou virtualizovaných prostrediach.

Ako PHP developer budem používať nástroje, ktoré používam každý deň a to, Linux, mySQL , PHP, VirtualBox a Subversion (SVN). Avšak dúfam, že tento sprievodca bude adaptovať do iných jazykov a technológií, rovnako dobre.

Riešenie, ktoré som poskytujú bude veľmi voľne založený na type spracovanie by sme mali dosiahnuť však to nemusí byť pravda, cez celý článok, ako budem meniť veci pre jednoduchosť, alebo produkovať viac zaujímavých scenárov použitia.

Tieto virtualizovaných prostrediach pobeží na Windows strojoch, pretože to je to, čo väčšina úradov behu. Spracovanie, kancelárske stroje sa nemalo zasahovať pracovníkmi pomocou týchto strojov, by mala vyžadovať žiadnu údržbu na stroji, a musí byť ľahko nasadiť na nové stroje, ktoré budú k dispozícii. Tiež by nové virtuálne stroje nevyžaduje žiadne ďalšie nastavenia, pretože to výrazne znižuje škálovateľnosť a jednoduché, pri ktorej môže distribučný systém rozšírený.

Prečo Nasadenie Office Computing Grid?

Po prvé si môžu myslieť, prečo nie práve použitie cloud computing zdroja, ako je Amazon EC2 platforma ? No dôvodov môže byť niekoľko, napríklad:

  • Nebudete zveriť niektoré údaje na životné prostredie cloud computing
  • Nemôžete dať niektoré údaje v prostredí cloud computingu pre právne dôvody (napr. údaje výjazde z krajiny), prípadne z právnych dôvodov, napr NHS záznamov.
  • Chcete, aby vaše spracovateľských jednotiek blízko a mať plnú kontrolu nad hardvérom príliš
  • Nemáte projekt finančné prostriedky na spustenie inštancií cloud
  • Váš úrad nemá pripojenie k internetu, a preto nie je možné jeho použitie cloud zdroje
  • Nemáte ako dážď, mraky naznačujú dážď, preto budete mať ďaleko

Som si istý, zoznam by mohol pokračovať, ale myslím, že by pre začiatok stačilo.

Výhody gridovej výpočtovej Office

Dobre, poďme urobiť nejaký matematiky (a fyziky v pravom štýle umožňuje vykonať niektoré rozsiahle predpokladov). Predstavte si, že máte veľký svalnatý spracovanie server bežiaci 100 pracovných miest za deň. Vo vašej kancelárii máte 50 strojov, ktoré sú nečinnosti 16 hodín denne, každý z týchto strojov je 10% ako silný ako svalnatý spracovanie sever. (Všetky výsledky tu sú zaokrúhlené na podceňovať zvýšenie výkonu).

Takže stroj * 10% energie * 2 / 3 = 0,067 času, tj o 1 pracovnej ploche spracovanie v nečinnosti by mohlo 1 proces, 6 plný úloh za deň.

Ak teraz meradlo to až za 15 nečinnosti stolných počítačov až po proces čo najviac pracovných miest za deň ako hlavný server pre spracovanie robí.

Takže v našej kancelárii predstierať 50 strojov by sme mohli zvýšiť náš výkon spracovania od 1 do 4 server plný spracovanie servery, alebo by sme mohli byť spracovanie 400 pracovných miest za deň namiesto 100.

Všimnite si, bez investície do nového hardvéru vaša firma práve zvýšila dávkové spracovanie kapacita 4 krát! Potenciálne sa chystáte zvýšiť spotrebu energie, ale z väčšiny kancelárskych prostrediach Bol som na stroje sú zvyčajne vľavo na cez noc rovnako, takže ste mohli vidieť ako zelenú iniciatívu.

Ďalšie výhody tiež znamená, že investície do nových (či aktualizované) spracovanie servery môžu byť odložené, ak vaše kancelárskych strojov, sú dostatočné a že, ako si vylepšiť výkon vášho kancelárskych strojov kancelárie sieť stala silnejší automaticky.

Technológia

Čo budete potrebovať? (Alebo viac správne to, čo som použitia):

  • Nečinnosti kancelárske stroje (v mojom prípade náhradnej starých okien notebook XP)
  • VirtualBox (alebo iný virtualizačné klientsky softvér)
  • Virtuálny stroj s PHP, mySQL running beží rúbať OS, volám týchto mojich Limp servery:)
  • Pracovných miest pre spustenie
  • Zamestnanie server (môže byť iný virtuálny stroj niekde)

Typická práce

Typy úloh, ktoré tento systém je navrhnutý tak, aby ich takto:

  • Systém dostane zoznam údaje, na ktorých musíme zápas a vrátiť výsledky
  • Zodpovedajúce zahŕňa kontrolu / vyhľadávanie niekoľko (pomerne statické) zdroja údajov
  • Výsledky zo zdrojov údajov môžu vyžadovať ďalšie validácie, zlučovanie, overovanie ďalších dátových zdrojov v reakcii na výsledky
  • Dáta sa vracia s zodpovedajúce záznamy, plne overený a spracovaný
  • Každý záznam v zamestnaní je nezávislá od zvyšku

Takže v podstate sa pozeráme na bežiaci úlohy, ktoré vyžadujú zmes vyhľadávanie v databázach a nejaké číslo drviť, pomerne typický scenár v podnikateľskom prostredí.

Mriežka riešenia sú nielen výhodné pre spracovanie práce tohto typu. V podstate môže byť každý proces, ktorý môže byť rozdelený do nezávislých jednotiek prebiehať súbežne. Pozri tento wikipedia pre príklady a ďalšie informácie: grid computing , ale pár známych príkladov je Seti @ Home a BIONC . Existujú rámca pre prevádzku výpočtových sietí, a tieto sú dobre stojí hľadá do.

Čo budeme dosiahnuť?

Do konca týchto článkov Dúfam, že sa ukazuje, že rozmiestnenie úrad siete nemusí byť obrovsky nákladná a časovo náročná. Idem na prerokovanie:

  • Nastavenie práca kontrolného systému, práca konfigurácia
  • Vytvorenie vhodného spracovania virtuálny stroj
  • Ako nastaviť systém na počítač so systémom Windows
  • Zaistenie, že používate najnovšie kód a dáta
  • Nasadenie a benchmarking
  • Výhľad do budúcnosti

Budem budovy (ok som staval, potom napísal), príklad aplikáciu na testovanie koncepcií na lokálny počítač v systéme Windows XP a moje 'GridMachine' virtuálny stroj. Mojou úlohou kontroly server bude môj hlavný stroj, ktorý beží Fedora 11 .

To je v žiadnom prípade predviesť plne funkčný robustný systém, jeho znamenal viac demonštrácii a diskutovať o tom, že tieto veci môže byť dosiahnuté v primerane krátkom čase a za malú cenu. Neváhajte a pošlite mi akékoľvek pripomienky, opravy, či vylepšenie a ja budem robiť moje najlepšie, aby tento článok aktualizovaný na zápas.

Nabudúce

V časti 2 Začnem sa pozrieme na systém kontroly práce, a pozrite sa na to, ako by mala práca byť nakonfigurovaný tak, aby sa dosiahlo čo najväčšie množstvo spracovanie a zároveň zabezpečiť, že každá práca je spracovaná bez výnimky.

Úrad výpočtových sietí pomocou virtuálnych prostredí - Časť 2

Tým, Steven Lloyd Watkin , piatok 04.12.2009 23:23

Úvod

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 1 I gave an overview of the system and technologies I will be using as well as discussed some of the potential reasons why you would want to create an office grid.

Job Control

If you're going to be running jobs then you're going to need some way to manage them. Your job control system (on your job server) needs to be really well thought out before even attempting to run an office grid. So firstly, what are the tasks for a job control system:

  • Hand out jobs upon request from workers
  • Tell workers what type of jobs to run
  • Track jobs
  • Ensure that jobs are only run once
  • Provide job data to workers, or at least tell them where to get it

The system also needs to be extensible, a solution that works for now in a single case may be extended to run several types of jobs as the business sees the worth in a grid solution. For example, jobs may gain priorities, more than one job type may exist (ie several code bases), eventually you may even run several different worker machines that are optimised for each type of job (although that does move away from the 'generic worker' idea). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.

Job Server

We're going to need somewhere to control our jobs from, this should be the only system in your grid that has a fixed resource locator, be that an IP address, host name, URL (using internal DNS), etc. This is because the workers need to know where to look for jobs, workers need to find the job control system (not the job control system find the workers).

The job server itself doesn't really have a complicated task (in a basic system anyhow), it needs to store a list of jobs, hand out jobs, receive results, and subsequently store them for later retrieval. How these parts (such as 'hand out jobs') are defined can be very basic. Later on we can extend the system to include an administration interface to add, edit, delete, suspend jobs but this is beyond this exercise.

There is no reason whatsoever then that your job server could not be a virtual machine running within your main processing server provided it doesn't drain too many resources from it. The job server however does need high availability, if it goes down on a Friday evening you're going to lose a whole weekend of processing, potentially costing you a couple of weeks worth of processing time (when compared to your main processing server alone). You may want to consider putting your job server on a load balanced environment for high availability.

Základné nastavenie

The basic setup for our job server will consist of what I'm calling one of my LiMP servers (that is Li nux, m ySql, P HP). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).

So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.

jobs table Here I'm using SQL Buddy a great little alternative to phpMyAdmin just because its easier to install on centOS (for others see: 10 Great alternatives to phpMyAdmin )

This table consists of 5 simple fields,

  • id: Uniquely identify the job
  • name: Could be a client reference, or any number of other identifiers
  • Status: You need to know where the job is at, eg
    • 0: Not started
    • 1: Picked up
    • 2: Completed
  • started_by: Who's started doing the job? This isn't entirely required but is a nice to have. I'd suggest tracking workers by their IP address on your network
  • started_at: When did the worker start the job? By tracking jobs that have not completed within X amount of time we know we need to pick up the job once again and start processing by another worker. Workers could stop processing/go offline for any number of reasons, power failure, crash, network loss, etc.

It is easy how this table could be extended with a few additional fields to allow for statistics tracking, a finish time column to see how long the job took, a counter to see how many workers picked up the job (obviously this needs to tend to 1), job priority, the list can go on and on. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.

Lets add a few example jobs:

example jobs

The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:

  • id: ID of the record
  • name: Person's name
  • address: Person's address
  • jobs_id: The job ID that this record is linked to

The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:

  • job_record_id: Link the result to the job table
  • result: The result data

…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.

Selecting a job

As stated previously, the workers will do our job management for us for now, so all we need to really do is find a job that needs processing and get the information. How would we do this? Well pick our job selection criteria and look for jobs, in SQL I did the following:

  1. Take any jobs that are not marked as complete but from our worker and reset them (substitute __ME__ with an identifier, easiest would be IP address):
     UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Using our job selection criteria, select a job and tell the control system that this worker is dealing with it:
     UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW() WHERE `status` = 0 OR
    (`status` = 1 AND `started_at` > DATE_SUB(NOW(), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    By grabbing jobs that haven't returned results in X amount of time we ensure that all jobs are run in the event of a worker crashing or going AWOL.

  3. Next grab the jobs details followed by the records themselves:
     SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
    SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Upon completion of the job we insert our result records and mark the job as complete. Remember as jobs can suspend/resume at any time allow for some robustness in your script. It might be that the task suspends half way through updating the job control system, so checking the number of records in a job and the number of results saved back to the job control system would be a wise move.

In addition, whilst this demonstrates how jobs can be selected and managed from an SQL-query frame you should really be abstracting your job control so that if you decide to switch to using a web service, a file based system, XML , or any other number of systems it will not affect the code above it.

Job Configuration

The next aspect to consider is job size and configuration. By playing with job configuration we can strike an excellent balance between speed, process replication, and reliability. Take a couple of scenarios:

  1. Jobs take 1 day each to run: This means that your workers need 15 days to process each job (remember 10% of the power for 2/3rds of the time). This is clearly not a wise configuration, your job size is way too big! It would take at least double the time to get a job processed should the initial worker go AWOL (time to pick up that it hasn't returned a result plus reprocessing time). In an ideal you'd have at least one full job easily cleared by the end of each long idle period, that way you keep the jobs ticking over and at worst case a job would take two days to process should the first go missing.
  2. Jobs take 1 minute to run: This means that your workers take about 15 minutes to run each job. Whilst this may initially seem ideal, you gain additional work processing during lunch time, coffee breaks, meetings, etc this scenario puts strain on other areas of your system and introduces its own problems. For example, firstly your setup/processing time ratio is going to go right down, therefore losing system efficiency. Your network is going to be constantly streaming job information to the various workers frustrating staff who are dong their day to day work. You're also going to put more strain on your job processing server as it has to dish out lots and lots of small pieces of work on a regular basis. Lastly, in this situation if your job server goes down you're going to create a huge back log of uncompleted work whereas bigger jobs could of continued processing blissfully unaware that the job server was experiencing difficulties.

V skutočnosti tam bude nikto ideálnu zostavu pre vašu sieť nastavenie, veľa závisí na dostupné zdroje, druh zamestnania, pracovné požiadavky doba obrátky, možnosť práce v sieti, a tak ďalej. Avšak niektoré pokyny by mali mať:

  • Veľkosť pracovných miest tak, aby každý zamestnanec môže dostať cez aspoň 3-4 pracovných miest v období 15 hodín (pravdepodobne najdlhšia doby nečinnosti obdobie)
  • Hrajte s veľkosti úlohy, takže nastavenie času stáva docela zanedbateľné v porovnaní s dobu spracovania (s prihliadnutím na vyššie uvedenému bodu).
  • Ak práca nie je kompletný dvojnásobné množstvo času (možno menej) môžete očakávať, že na jeho dokončenie predpokladať, že jeho preč dezertoval a začať spracovávať to s iným pracovníkom. To znamená, že budete musieť počkať až na trojnásobok bežnej dĺžky práce pre to, aby kompletné (možno aj dlhšie, ak následné prácu zlyhá). Možno budete chcieť skrátiť túto lehotu, ale dávajte pozor, aby ho znížiť príliš veľa, ako si môže začať množiteľský spracovanie úloh na pravidelnom základe.
  • Pracovných miest by mali byť nezávislé na externé požiadavky, čo najviac. Pracovný server, napríklad, by mali byť kontaktovaný na začiatku a na konci každé pracovné miesto.
  • Nepoužívajte nasýtenia sieti, bude to mať dva negatívne dôsledky, bude vaša denná zamestnanca nájsť pomocou siete frustrujúce a problémy môžu byť skúsenosti s pripojením časového limitu problém, ktorý sa bude len zhoršovať, ako si mierka svojej siete.
  • Zabezpečenie pracovných miest môže bežať na vašich zamestnancov. Pokiaľ pracovných miest príliš náročné na pamäť alebo priestor na disku intenzívnej práce začne končím a jediné, čo si všimnete, je pokles počtu pracovných miest spracované žiadny skutočný dôvod, prečo.

Pošlite výsledky práce

Pri predkladaní výsledkov práce je dôležité skontrolovať, že výsledky neboli predložené iným pracovníkom, a to najmä v prípade, že existujúce pracovník bol spiace na nejakú dobu.

When results are submitted ensure that the number of results matches the number of records within the job.

As stated previously, and can not be over emphasised, build fault tolerance into job retrieval and results submission. The workers can (and most likely will) go into suspend mode at the most inconvenient of times and this needs to be catered for. Also once again abstracting away your results submission will help cater for future changes to your job control system much easier to deal with.

Zhrnutie

In this section we have looked at what a job control server needs to do and how to get a very basic system set up. We discussed how to retrieve a job from the control system and how best to configure jobs to get the most our of your office grid system. To finish, a paragraph or two on submitting results back to the job control server was presented.

  • A job control server manages jobs and ensures that all work units are completed
  • By abstracting your job select/results submission we can change the technology of the control server without much problems
  • Configure your jobs to ensure that they are run quickly and efficiently without putting too much pressure on your network infrastructure, and without duplicating processing tasks on a regular basis.
  • Ensure that you build fault tolerance and error checking into your routines, workers can suspend and resume and the most inconvenient of times. Remember to check if results have already been submitted by another worker.

Next time

In part 3 we'll create our virtual processing machine and set up our windows machines to become idle-time workers.

Úrad výpočtových sietí pomocou virtuálnych prostredí - Časť 5

By Steven Lloyd Watkin , Friday 4th December 2009 11:03 pm

Úvod

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. Tak,

  • how many records can you process currently? Per Day? Per Hour?
  • How long does it typically take to turn around a job?
  • How much more capacity do you have?

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

Nasadenie

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

Stop!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.













Panorama Téma, ktoré Themocracy

6 návštevníkov online teraz
5 guests, 1 bots, 0 members
Max návštevníkov dnes: 12 v 07:57 UTC
Tento mesiac: 22 na 08.06.2011 00:30 UTC
Tento rok: 130 v 28-03-2011 22:40 UTC
Všetky čas: 130 v 28-03-2011 22:40 UTC