Kategori: Web Programmering

Rute anmodninger om sitemap.xml til brugerdefineret controller / handling

Ved , Onsdag 6 jan 2010 12:13

For at direkte anmodninger til / sitemap.xml til en brugerdefineret controller og handling i din Zend Framework ansøgning blot tilføje følgende i din application.ini eller alternative config fil (fx jeg bruger navigation.ini):

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

Eksempel kode for udsende kan ses ved at skabe en handling i det pågældende controller (f.eks mit Sitemap ligger i indekset controlleren, sitemap handling):

 < php
 klasse IndexController
     udvider Zend_Controller_Action
 {
     / **
      * Gør en sitemap baseret på Zend_Navigation setup
      * /
     offentlig funktion sitemapAction ()
     {
    	 echo $ this-> Vis-> navigation () -> Sitemap ();
    	 $ This-> Vis-> layout () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemaps kan hurtigt og let kan genereres ved hjælp af Zend_Navigation , en stor hurtig tutorial (og generelt meget nyttigt for Zend Framework selvstudier) er Zend Afstøbninger - Dynamisk skabe en menu af et Sitemap og rasp .

Zend Framework Per-modul baseret indstillinger

Ved , Fredag ​​1 Jan 2010 22:40

Jeg har oprettet en opfølgning til dette indlæg, som kræver mindre konfiguration, se Modul baseret layout - Zend Framework .

Ved brug af Zend Framework med moduler, dens indlysende, at hvis du kører forskellige (sub-) steder fra samme program, du ikke nødvendigvis vil have samme layout scripts for hver del. Jeg besluttede at gå med følgende websted struktur:

  / Anvendelse
     / Controllere
         ...
     / Modeller
     / Moduler
         / Default
             / Controllere
             / Layout
                 / Scripts
             / Visninger
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Problemet var at oprette layoutet scripts på en per-modul basis. Svaret kom igennem ved hjælp af en Handling Helper. Opsætning af layout på en per-modul grundlag omfatter tre trin:

  1. Application.ini (eller lignende konfiguration opsætning):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layout / scripts"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modules / default / layout / scripts"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / Medlem / layout / scripts"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / affiliate / layout / scripts" 
  2. Opret din Handling Helper:
      <? Php
     / **
      * Sætter layoutet sti på en per-modul grundlag
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Siden 2010/01/01
      * /
     klasse Pro_Controller_Action_Helper_SetLayoutPath
         udvider Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Indstiller layout vej baseret på modul
          * /
         offentlig funktion preDispatch ()
         {
        	 $ Modul = $ this-> GetRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ('bootstrap')) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ modul] ['ressourcer'] ['Layout'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Config [$ modul] ['ressourcer'] ['Layout'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ('Layout')
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Og endelig boostrap handlingen hjælper:
     ...  / ** * Sætter op layoutet scripts på en per-modul grundlag * / beskyttet funktion _initLayoutHelper () {$ this-> bootstrap ('frontController'); $ layout = Zend_Controller_Action_HelperBroker:: addHelper (ny Pro_Controller_Action_Helper_SetLayoutPath ());} .. . 

Lære: DATETIME standard NU ()

Ved , onsdag 30 december, 2009 18:30

Jeg har kæmpet med at oprette en database skema for en ny Zend Framework -projekt. Jeg er hjælp prøver at bruge Lære ORM til min database modeller. Jeg har brug for at oprette det skema, så det tilladt mig at sætte en standard dato og tid til en `datetime` kolonnen, fx når der tilføjes en ny besked jeg får de aktuelle tidsstempel. Efter megen søgen og eksperimenterer jeg fundet løsningen, så jeg deler den.

I dit skema YAML fil blot gøre følgende:

 Besked:
   actAs:
     Timestampable:
       Oprettet:
         navn: created_at
         type: tidsstempel
         Format: Ymd H: i: s
       opdateret:
         navn: last_updated
         type: tidsstempel
         Format: Ymd H: i: s
   kolonner:
     id:
       type: heltal
       primære: sandt
       autoincrement: sandt
     Navn: string (255)
     e-mail: string (300)
     besked: string (2000)

Hvis på den anden hånd, du ikke ønsker et `updated_at` kolonnen, kan du bruge følgende:

 Besked:
   actAs:
     Timestampable:
       Oprettet:
         navn: created_at
         type: tidsstempel
         Format: Ymd H: i: s
       opdateret:
         deaktiveret: sandt
   kolonner:
     id:
       type: heltal
       primære: sandt
       autoincrement: sandt
     Navn: string (255)
     e-mail: string (300)
     besked: string (2000)

PHP Design Patterns - Observer Pattern

Ved , Tirsdag 29 Dec 2009 22:02

Jeg har læst Head First Design Patterns for nylig og har besluttet at skrive nogle af de mønstre, som PHP eksempler, for min egen fordel. Den første, som jeg har besluttet at kode op er Observer Pattern . Den formelle definition af Observer Pattern er:

Observatøren mønster (en delmængde af den asynkrone offentliggøre / abonnere mønster ) er en software- design mønster , hvor et objekt , kaldet emnet, vedligeholder en liste over sine pårørende, kaldet observatører, og meddeler dem automatisk i nogen stat ændringer, som regel ved at kalde en af deres metoder . Det er hovedsageligt bruges til at implementere distribuerede hændelseshåndtering systemer.

Som systemer bliver mere løst koblet og sørg for, at når en begivenhed, der sker alle systemer, der kræver viden om disse opdateringer er informeret. For eksempel, et blog-indlæg, efter at spare en stilling vi måske nødt til at opdatere en søgemaskine (fx Lucene), opdatere vores sitemap, tags, e-mail tegnet brugere osv. Observatøren mønster giver udviklere mulighed for at tilføje flere lyttere uden at redigere deres observerbare objekt . Ved at indsprøjte observatører (dvs. en søgemaskine opdatere observatør, en sitemap generator osv.) ind i et emne (dvs. blogindlæg redigeringssystem) kan vi give den til at udføre alle de nødvendige opdateringer uden ændringer.

Fortsæt læsning 'PHP Design Patterns - Observer Pattern' »

Office Grid Computing ved hjælp af virtuelle miljøer - Del 4

Ved , fredag ​​4 Dec 2009 11:59

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 3 har vi skabt vores virtuelle forarbejdning maskine og oprette Windows-maskiner for at blive ledig-deltidsansatte.

Kører den nyeste koden

Uundgåeligt Når du har oprettet dine medarbejdere forretningslogik vil ændre sig, vil fejl blive fundet, vil hurtigere, mere effektiv kode, der produceres hvilket giver dine medarbejdere sad omkring behandling af data ved hjælp af gamle ildelugtende kode . Hvordan så sikrer vi, at vi altid bruger de nyeste og bedste version af vores behandling af scripts?

Der er et par meget nemme enkle måder vi kunne gøre dette, det trick, er imidlertid at reducere behandlingstiden magt og netværkstrafik i at opnå dette. Lad os starte med det simpleste af løsninger og forbedre det langsomt over et par iterationer.

Den første metode ville være simpelthen at oprette forbindelse til vores job Control Server (via samba, FTP eller lignende) og træk ned den seneste version af koden. Ikke meget effektiv, men det vil gøre arbejdet. Lad os forbedre på, at noget, hvordan om at skabe et rsync script og brug, at hver gang i stedet? Alternativt hvad med at sætte vores nyeste behandling script til undergravende virksomhed tjekker ud koden i første omgang og så bare opdatere vores kode på hver kørsel ( svn update )?

I sidste ende kunne vi ende op med et bash script (kaldes af cron hver 10 minutter), der ser lige så simpelt som dette:

  #! / Bin / sh
 hvis ps ax | grep-v grep | grep php > / dev / null
 Derefter
     echo "Job er i øjeblikket behandling, frakørsel"
 andet
     echo "Job ikke kører, skal du starte nu"
     cd / sti / til / arbejde / kopiere
     svn update
     php yourJobProcessingScript.php
 fi 

Nu kan vi være sikre på, at med hvert løb er vi absolut køre den nyeste kode. Vi sikrer dette ved at opdatere vores kodebase hver eneste gang vi udfører en løbetur og reducerer netværkstrafik ved kun at overføre filen forskelle på tværs af vores netværk.

I min demonstration setup, gjorde jeg præcis som ovenfor. Subversion blev installeret på mit job forarbejdning server og jeg simpelthen trak den nyeste kode fra en »arbejdstager« gren ved hjælp af 'svn update'. Jeg har også tilføjet en versionsnummer mærke til min behandling script, som blev returneret til databasen som en del af resultaterne afkast. På den måde kunne jeg se, at min kode var ved at blive opdateret hver gang jeg kopieret min kuffert i arbejdstagerens gren, dvs at jeg var helt kører med den nyeste behandling af scriptet.

Ved hjælp af de nyeste data

Hvis dit job forarbejdningen gør brug af datakilder så på et tidspunkt disse vil blive opdateret. Medmindre du ringe til din datakilder på en meget sjælden grundlag du vil oversvømme netværket med trafik, så snart dine medarbejdere begynde at køre bringe alting i stå. For min løsning, besluttede jeg at jeg vil flytte mine data kilder rundt med mine VM'er.

Hold du er heste der! Hvad nu hvis mine data kilder er enorme? Nå det er virkelig et tilfælde af hvor mange data vi taler? Det kan være mere omkostningseffektivt at installere en ekstra større harddisk i hver maskine, end at købe en ekstra behandling server. Dette er et spørgsmål om budget og er op til virksomheden at afgøre. Det måske, at dine data kilder er så store, at det bare umuligt at holde, at mængden af data i dit arbejdstager maskiner. I så fald hvad ville du gøre? Godt vi kunne se på at kalde en lokal data-server, men dette kan forårsage problemer med netværket. I dette tilfælde et gitter system som dette kan blive urealistisk at inkludere i dit kontormiljø. Det kan også være, at du kan se i alternative kører strategier, for eksempel kun at kalde dine arbejdere fra 08:00 til 06:00 hver aften og / eller kvæle datakilde anmodninger.

Flytning på lad os sige vores datakilder beløbe sig til 100 GB data. Nå ja, det er en hel del data for at flytte rundt på nettet på en opdatering. Hvordan vil vi sikre, at vi har den seneste kopi af data i denne sag? Rsync er en mulighed, men jeg personligt tror, ​​ved at køre dine seneste datakilde på din jobbehandling server og konfigurere dette som en mester i replikation (med en dejlig lang bin log) kan være vejen at gå:

replikering Ved at indstille hver af dine medarbejdere op som en slave til jobbet Control Server opdateringer til dine data kilder vil sive ned pænt til dine medarbejdere uden en enorm stigning i net-aktivitet (det er medmindre du udfører en kæmpe data opdatering samt alle dine medarbejdere spark i på én gang). Dette har fordele frem for rsync i, ​​at du ikke ville få en lang pause, før hvert job, som database opdateringer, mysql vil daemon på din arbejdstager løbende opdatere sine data, mens behandlingen fortsætter.

Dette er hvordan jeg oprettet min demonstration server. For at opsætte replikering Jeg fulgte guiden på mySQL stedet ( Opsætning replikering ), og inden for 20 minutter, som jeg havde min inital arbejdstager kopiere jobbet kontrol servere datasæt. For hver yderligere arbejdstager replikation indstillinger og processen arbejdede hver gang, da VM blev kopieret.

Resumé

I dette afsnit af artiklen har vi set på, hvor nemt og smertefrit det er at holde din behandling koden up to date med using rsync eller subverion (SVN) til at gøre arbejdet og reducere netværkstrafikken på samme time. Vi har også diskuteret, hvordan at holde dine oplysninger om datakilden up-to-date ved at lade den sive ned til hver af dine medarbejdere. Således vi område at sikre, at vi holder op med forretningslogik og information på vores kontor skinnesystem. Der vil naturligvis være utallige alternativer til at udføre disse opgaver, men her var to simple eksempler for at vise, hvor let en løsning er at komme forbi.

Næste gang

I den sidste del af denne serie, rammende opkaldt kapitel 5 , vil vi diskutere at implementere dette system. Jeg vil sammenfatte hvad der er blevet lært, og hvad jeg formåede at skabe.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 3

Ved , fredag ​​4 Dec 2009 23:37

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 2 ser vi på de job, en server vil køre, og hvordan job skal konfigureres for at opnå størst forarbejdningsstøtte samtidig sikre, at hvert job er behandlet, uden at mislykkes.

Opsætning af din arbejdsplads - eller halte server

Det næste skridt i processen er at oprette din virtuelle medarbejdere. For denne jeg har tænkt mig at bruge en installation af CentOS bruge VirtualBox. Jeg har tænkt mig at installere mySQL og PHP på serveren, også kendt som en slatten (Li nux, m ySQL, P HP) Servera (jeg kan have gjort dette navn op).

  • Installer VirtualBox på din Windows-maskine (følg link)
  • Hent og installer CentOS (nuværende version 5.3) inden for en oprettet virtuel maskine

Der er ingen mening mig at gå til dette er der nok 1.000 'er af stor tutorials derude (ok, her er en: Oprettelse og Managing CentOS virtuel maskine under VirtualBox ). Det vigtige punkt at bemærke Jeg formoder, er, at jeg ringede til min virtuelle maskine GridMachine.

For så vidt angår mit valg af virtualisering klient og operativsystem gå der ikke er nogen stor tvingende grund for hvert valg. VirtualBox er noget, jeg bruger på min hjemme maskine, og er støttet af de tre store operativsystemer. Jeg valgte CentOS som sin et godt stabilt OS og jeg bruger det på min egen webserver. Jeg er en stor tilhænger af det rigtige værktøj til opgaven (selvom jeg anvender 'brug den hurtigste og nemmeste for dig' mentalitet her), så hvis styresystemet X kører din kode hurtigere og mere effektivt bruge dette i stedet:)

Det er vigtigt at sikre, at din VM bruger DHCP, ellers for hver ny virtuel maskine vil skulle konfigureres særskilt hvilket er noget, vi ikke want.By bruger DHCP vi behøver ikke at konfigurere netværksindstillinger individuelt for arbejdstager maskiner, vil DHCP hånd ud IP'er for dig. Derfor kan du kopiere din virtuelle maskine om kontoret uden at bekymre sig om opsætning hver en op (Dette forbedrer skalerbarhed og reducerer arbejdstager administration).

Den proces, du bør sigte på at opnå ville være at få en ny fysisk maskine, installere VirtualBox, og derefter stort set installere virtuelle billede uden meget andet. Det kan være klogt at sætte alle dine medarbejdere på et andet subnet, så du kan i det mindste se, hvor mange maskiner kører. Du skal også oprette dine maskiner på en lang lejekontrakt eller ubegrænset lejemål DHCP.

Sådan køres job på arbejdstageren

Dette er et interessant område, og der er flere gyldige metoder til behandling af jobs på arbejdstageren. Her Jeg vil bare diskutere de to mest oplagte:

  • Bestandigt at køre script: Et script, det være sig en shell script, eller et PHP script udføres én gang på arbejdstageren og kører som en del af en uendelig løkke. Jeg har diskonteret denne metode som et brag af manuskriptet og potentielt dine medarbejdere vil ophøre med at køre uden en form for intervention.
  • Cron baseret script udførelse: Hvert X minutter cron daemon starter et opkald til dit script til at få tingene i gang. Uden en vis kontrol af dette kan føre til mange mange kopier af dine arbejdstager scriptet kører.

Min beslutning var at gå med cron, som starter en shell script hver 10 minutes. Mit shell script, udfører følgende opgaver:

  1. Få en proces liste og grep dette for 'php'. Hvis den ikke findes derefter fortsætte.
  2. Ring til dit job kode, i mit tilfælde ville det være noget, der bygger PHP
  3. Worker scriptet afslutter sit løb
  4. Klar til at gå igen på det næste passende kalder

Min bash script ser ud som følger:

  #! / Bin / sh
 hvis ps ax | grep-v grep | grep php> / dev / null
 Derefter
     echo "Job er i øjeblikket behandling, frakørsel"
 andet
     echo "Job ikke kører, skal du starte nu"
     php yourJobProcessingScript.php
 fi 

Bemærk: ECHO er næsten fuldstændigt meningsløst, men det kan hjælpe den næste person, der kommer sammen for at prøve og redigere dem.

Hermed er opsætningen af ​​arbejderen virtuelle maskine, hurtig, enkel og nem at kopiere til hvert nyt stykke hardware, der er modtaget. Den 'dygtighed' af elnettet er virkelig ikke i visualiseret OS, det hele at gøre med den kode, der oprettes til at behandle job, jobbet konfiguration, og i at sikre, at jobbet kører når det er relevant (dvs. når værten er inaktiv ).

Opsætning af Windows for at initialisere Workers

Den første opgave er at arbejde ud af den kommando kræves for at køre den virtuelle maskine fra vinduerne kommandolinjen. Hvis du har installeret VirtualBox på standardplaceringen, og du har kaldt dit arbejdstager GridMachine derefter kommandoen kræves for at indlæse dine arbejdstager er:

  "C: \ Programmer \ søn \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Men at køre script i en "hovedløs" state vi er nødt til at bruge:

  "C: \ Programmer \ søn \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - vrdp = off 

Dette vil starte den virtuelle maskine uden GUI og gør det muligt at spare staten yndefuldt. Det andet argument slukker RDP, så det ikke i konflikt med Windows RDP, eller give dig en besked om at lytte på port 3389. Den virtuelle maskine navn er store og små bogstaver!

Dernæst vil vi nødt til at sætte vinduer på op til kick off vores arbejdstager VM, når maskinen har været inaktiv. For at gøre dette (på Windows XP) Du bliver nødt til at gå Start -> Alle Programmer -> Tilbehør -> Systemværktøjer -> Planlagte Opgaver som nedenfor:

planlagte opgaver

Klik derefter på 'Tilføj Scheduled Task "efterfulgt af Gennemse for at tilføje et brugerdefineret program. Navigere til din VBoxManage script og klik ok. Planlæg din opgave for nogen af ​​de muligheder (vi vil ændre dette i et minut) og fortsætte. Efter at springe det næste skærmbillede Windows vil spørge dig, hvem du vil køre denne opgave, ville jeg foreslå enten 'Administrator' eller oprette en ny bruger med rettigheder. Husk at vi ikke ønsker at blande sig med den standard personalet konto på maskinen på noget tidspunkt. Klik på Næste og kontrol viser, avancerede indstillinger for denne opgave.

Til slutningen af kørslen tekstfeltet tilføje vores 'startvm GridMachine' snor og sikre, at der kun kører, når logget ind er tilbage unticked. Besøg tidsplanen opgaven næste og ændre tidsplanen drop ned til indstillingen ', når tomgang', vælge den tid, du ønsker at maskinen skal være ledig, før man går videre til næste fane.

Endelig Fjern markeringen den mulighed, der hedder at stoppe den opgave, hvis den har kørt X tid, men kryds mulighed for at stoppe den opgave, hvis maskinen ikke længere er ledig.

tidsplan

Det var det så for Windows host setup!

Resumé

I denne del har vi oprettet en virtuel maskine til at fungere som en arbejdstager, samt den måde, hvorpå vi kalder og udføre vores job behandling scripts (for mig selv en PHP script). Herfra ser vi på, hvordan du opsætter vores kopier af Windows til at starte den virtuelle maskine i hovedløse tilstand, når computeren bliver ledig, og gemme dens tilstand, når brugeren genoptager brugen af ​​maskinen. Forhåbentlig på dette punkt du ser hvor nemt det er at etablere et sådant system og er kløe at få nogle eksperimenter gang selv!

Næste gang

I Kapitel 4 vil vi se på ved hjælp af værktøjer til at sikre, at du kører den nyeste version af kode og data kilder, så opnåede resultater er altid up-to-date med de nyeste forretningsoplysninger og logik.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 1

By , fredag ​​4 Dec 2009 11:23

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

Som en PHP udvikler jeg har tænkt mig at bruge værktøjer, som jeg bruger hver dag, nemlig, Linux, mySQL , PHP, VirtualBox og undergravende virksomhed (SVN). Men jeg håber, at denne guide vil tilpasse sig andre sprog og teknologier lige så godt.

Den løsning jeg give vil være meget løst baseret på den type behandling vi havde brug for at opnå men dette kan ikke være rigtigt igennem hele artiklen, som jeg vil ændre tingene til enkelthed, eller til at producere mere interessant brug scenarier.

Disse virtualiserede miljøer, der kan køre på windows maskiner, da dette er hvad de fleste af kontorer køre. Behandlingen, at kontormaskiner ikke bør ikke gribe ind med personale ved hjælp af disse maskiner, bør kræve, ingen vedligeholdelse på maskinen, og være let indsættes til nye maskiner, som de bliver tilgængelige. Desuden bør nye virtuelle maskiner, der ikke kræver nogen yderligere konfiguration, da det reducerer skalerbarhed og lethed, hvor elnettet kan udvides.

Hvorfor Implementer et Office Computing Grid?

For det første du tænker måske, hvorfor ikke bare bruge en cloud computing ressource såsom Amazons EC2-platform ? Nå årsagerne kan være flere, for eksempel:

  • Du vil ikke overdrage visse data til en cloud computing miljø
  • Du kan ikke sætte bestemte data i et cloud computing miljø for juridiske årsager (f.eks data forlader landet), potentielt af juridiske årsager, fx NHS optegnelser.
  • Du ønsker at holde din forarbejdningsenheder tæt og har fuld kontrol over hardware også
  • Du behøver ikke projektmidlerne til at køre cloud tilfælde
  • Dit kontor har ikke en forbindelse til internettet og dermed dets ikke muligt at bruge en sky ressource
  • Du ikke kan lide regn, skyer tyder regn, derfor skal du holde sig langt væk

Jeg er sikker på listen kunne fortsætte, men jeg tror, ​​det er nok for nu.

Fordele ved et kontor Computing Grid

Nå, lad os lave noget matematik (og i ægte fysik stil lader foretage nogle fejende antagelser). Forestil dig at du har stor velnæret behandling server, der kører 100 arbejdspladser om dagen. I dit kontor, du har 50 maskiner, der er inaktive 16 timer om dagen, hver af disse maskiner er 10% så stærk som din velnæret behandling skille. (Alle resultater her er afrundet til at undervurdere performance stigning).

Så kunne 1 maskine * 10% strøm * 2 / 3 tid = 0,067 dvs 1 desktop-forarbejdning i spildtid proces 6 Fuld job om dagen.

Hvis du nu skalere det op det tager 15 tomgang desktops til at behandle så mange arbejdspladser pr dag, som din vigtigste behandling server gør.

Så i vores foregive kontor på 50 maskiner, vi kunne øge vores regnekraft fra 1 server op til 4 fulde behandling servere, eller vi kunne være behandlingen 400 arbejdspladser om dagen i stedet for 100.

Notice, for no investment in new hardware your company has just increased its batch processing capacity 4 times ! Potentially you're going to increase your power usage but from most office environments I've been to machines are generally left on overnight anyway, so you could see this as a green initiative.

Other advantages also mean that investment in new (or updated) processing servers can be delayed if your office machines are sufficient and that as you improve the power of your office machines your office grid becomes more powerful automatically.

Teknologier

What you need? (or more correctly what did I use):

  • Idle office machines (in my case a spare old windows XP laptop)
  • VirtualBox (or another virtualisation client software)
  • A virtual machine with PHP, mySQL running running a cut down OS, I'm calling these my LiMP servers :)
  • Jobs to run
  • Job server (can be another virtual machine somewhere)

Typical Jobs

The types of jobs that this system is designed to run is as follows:

  • System receives a list of data upon which we need to match and return results
  • Matching involves checking/searching several (fairly static) data sources
  • Results from data sources may require further validation, merging, checking of additional data sources in response to results
  • Data is returned with matching records, fully validated and processed
  • Each record within a job is independent of the rest

So basically we're looking at running jobs which require a mixture of database lookups and some number crunching, a fairly typical scenario in a business environment.

Grid solutions are not only advantageous for processing jobs of this type. Basically, any process which can be split into independent units can be run in parallel. See this wikipedia for examples and more information: Grid Computing , but a couple of famous examples are Seti@Home and BIONC . There are frameworks for running computing grids, and these are well worth looking into.

What will we achieve?

By the end of these articles I hope to show that deploying an office grid need not be hugely expensive or time consuming. I'm going to discuss:

  • Setting up the job control system, job configuration
  • Creating an appropriate processing virtual machine
  • How to setup the system on a windows machine
  • Ensuring you are using the latest code and data
  • Deployment and benchmarking
  • Looking ahead

I'll be building (ok I built, then wrote this) an example application to test the concepts on a local machine using windows XP and my 'GridMachine' virtual machine. My job control server will be my main machine which runs Fedora 11 .

This is in no way meant to demonstrate a fully working robust system, its meant more of a demonstration and discussing showing that these things can be achieved in a reasonably short space of time and at little cost. Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.

Next time

In part 2 I will start by looking at the job control system, and look into how jobs should be configured in order to achieve greatest amount of processing whilst ensuring that each job is processed without fail.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 2

Ved , fredag ​​4 Dec 2009 11:23

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 1 jeg gav et overblik over systemet og teknologier jeg vil bruge samt drøftet nogle af de potentielle grunde til, at du ønsker at oprette et kontor gitter.

Job Kontrol

Hvis du vil køre jobs så du vil få brug for nogle måde at styre dem. Dit job kontrolsystem (på dit job server) skal være virkelig velgennemtænkt, før selv forsøger at køre et kontor gitter. Så det første, hvad er opgaver for et job kontrolsystem:

  • Uddel opgaver efter anmodning fra arbejdstagerne
  • Fortæl arbejdere hvilken type af job til at køre
  • Spor job
  • Sørg for, at arbejdspladser er kun køre én gang
  • Giv jobdata til arbejdstagere, eller i hvert fald fortælle dem, hvor du kan få det

Systemet skal også udvides, en løsning der virker for nu i et enkelt tilfælde kan udvides til at køre flere typer af arbejdspladser, fordi virksomheden ser en værdi i et gitter løsning. For eksempel kan arbejdspladser få prioriteter, mere end én jobtype kan eksistere (dvs. flere code baser), i sidste ende kan du endda køre flere forskellige arbejdstager maskiner, der er optimeret for hver type af arbejde (selv om det bevæger sig væk fra det »generiske arbejdstager 'idé). Forsøg altid at tænke på fremtiden, når udvikle systemer, kan en kortsigtet vision føre til på længere sigt frustration og øget udviklingsbistand tid.

Job Server

Vi vil få brug for et sted at styre vores job fra, bør dette være det eneste system i dit net, der har en fast ressource locator, være, at en IP-adresse, værtsnavn, URL (ved hjælp af intern DNS), osv. Dette skyldes arbejderne har brug for at vide hvor de skal lede efter job, arbejdstagere har behov for at finde det job kontrolsystem (ikke jobbet kontrolsystem finde arbejderne).

Jobbet selve serveren ikke rigtig har en kompliceret opgave (i et grundlæggende system alligevel), er det nødvendigt at gemme en liste over job, uddele job, modtage resultaterne, og efterfølgende gemme dem til senere afhentning. Hvordan disse dele (såsom 'hånd ud arbejdspladser «) er defineret kan være meget basale. Senere kan vi udvide systemet til også at omfatte et administrations-interface til at tilføje, redigere, slette, suspendere job, men det er hinsides denne øvelse.

Der er ingen som helst grund så er dit job server ikke kunne være en virtuel maskine, der kører inden for dit primære behandling server, forudsat at det ikke dræne alt for mange ressourcer fra det. Jobbet serveren dog ikke brug for høj tilgængelighed, hvis det går ned på en fredag ​​aften, du kommer til at miste en hel weekend med behandling, potentielt koste dig et par uger til en værdi af sagsbehandlingstiden (i forhold til din primære behandling server alene) . Du vil måske overveje at sætte dit job server på en load balanceret miljø for høj tilgængelighed.

Grundlæggende opsætning

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

Som tidligere nævnt, vil arbejderne gøre vores jobstyring for os for nu, så vi alle har brug for virkelig at gøre er at finde et job, der kræver behandling og få oplysningerne. Hvordan ville vi gøre det? Godt pick vores job udvælgelseskriterier og søge job, i SQL gjorde jeg følgende:

  1. Tag nogle job, der ikke er markeret som komplet, men fra vores arbejdstager og nulstille dem (stedfortræder __ME__ med et id, ville nemmeste være IP-adresse):
      UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 og `started_by` = __ME__; 
  2. Brug vores job udvælgelseskriterier, skal du vælge et job og fortælle kontrolsystem, at denne arbejdstager beskæftiger sig med det:
      UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 eller
     (`Status` = 1 og `started_at`> DATE_SUB (NOW (), interval X HOUR)) ORDER BY `id` ASC; 

    Ved at snuppe job, der ikke returnerede resultater i X tid, vi sikrer, at alle job er at køre i tilfælde af en arbejdstager bryder sammen eller gå væk fra mig.

  3. Næste fat i job detaljer efterfulgt af journaler selv:
      SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Ved afslutningen af ​​jobbet, vi indsætter vores resultat optegnelser og markere opgaven som fuldført. Husk som arbejdspladser kan suspendere / genoptages på ethvert tidspunkt give mulighed for en vis robusthed i dit script. Det kan være, at opgaven suspenderer halvvejs gennem opdatering jobbet kontrolsystem, så kontrol af antallet af poster i et job, og antallet af resultater gemt tilbage til jobbet kontrolsystem ville være et klogt træk.

Hertil kommer, samtidig med at dette viser, hvordan arbejdspladser kan vælges og styres fra en SQL-forespørgsel ramme, du skal virkelig være abstrahere dit job kontrol, så hvis du beslutter dig for at skifte til at bruge en webtjeneste, en fil baseret system, XML , eller enhver anden Antallet af systemer, vil det ikke påvirke den ovenstående kode det.

Job Configuration

Det næste aspekt at overveje, er opgavens omfang og konfiguration. Ved at spille med job konfiguration, vi kan skabe en god balance mellem hastighed, proces-replikation, og pålidelighed. Tag et par OFA scenarier:

  1. Jobs tage 1 dag hver til at køre: Det betyder, at dine medarbejdere har brug for 15 dage til at behandle hvert job (husk 10% af den strøm til 2/3rds af tiden). 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.

In reality there will be no one ideal configuration for your grid setup, much depends on the available resources, types of job, job turnaround time requirements, network capability, and so on. However some guidelines would be:

  • Size jobs so that each worker can get through at least 3-4 jobs in a period of 15 hours (the longest likely idle time period)
  • Play with the job size so that setup time becomes fairly insignificant compared to the processing time (bearing in mind the above point).
  • If a job doesn't complete in double the amount of time (maybe less) you expect it to complete it assume that its gone AWOL and start processing it with another worker. This means you may have to wait up to three times the normal length of a job for it to complete (possibly longer if the subsequent job fails). You may want to reduce this time, but be careful not to reduce it too much as you may start duplicating processing tasks on a regular basis.
  • Jobs should be independent of outside requirements as much as possible. The job server, for example, should only be contacted at the start and end of every job.
  • Don't saturate your network, this will have two negative effects, your daytime staff will find using the network frustrating and problems may be experienced with connections timing out a problem that will only get worse as you scale your grid.
  • Ensure jobs can run on your workers. If jobs become too memory intensive or disk space intensive jobs will start aborting and the only thing you'll notice is a drop in number of jobs processed with no real reason why.

Submitting Results of a Job

When submitting the results of a job it is important to check that results have not been submitted by another worker, especially if the current worker has been dormant for some time.

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.

Resumé

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.

Office Grid Computing using Virtual environments – Part 5

By , Friday 4th December 2009 11:03 pm

Indledning

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. So,

  • 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?
  • Hvilke fordele håber du / forventer at få fra et gitter 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.

Deployment

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

Det næste oplagte skridt ville være til rent faktisk at få en virkelig verden eksempel og begynde at implementere et system som dette i et kontormiljø, og se hvad der sker. 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.

Zend Framework: Fundamentals – Review

By , Saturday 28th November 2009 10:42 pm

My employer recently paid for a group of us developers to take the Zend Framework: Fundamentals course, here I'll summarise my thoughts and opinions on the course for others. For those looking to save time, here's my summary:

For developers who haven't had time to look at the Zend Framework this course (Zend Framework: Fundamentals) offers a good overall picture of the framework introducing you to the key areas and giving enough information in order to continue. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

Baggrund

I've been a PHP developer for around 5-6 years, and have started working with the Zend Framework on a component basis over the last 6 months. I've developed and/or been a developer on a couple of small Zend Framework MVC sites. I'll be honest, I haven't had a huge amount of exposure to other frameworks from a coding point of view but have spent several hours researching the project websites and evaluating them. The framework and the community surrounding Zend Framework it is quite exciting and there seem to be huge possibilities in where its going.

About the Course

The course is delivered over 9 two hour webex sessions (with a 10-minute break in the middle). The time is spent going through a set of slides provided by Zend with discussion at any time. You can use a microphone to talk to the instructor, but to be honest I didn't see anyone use anything more than the chat window. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. The course leader talks to attendees either over an integrated VoIP solution, or you can dial in using one of the many worldwide dial in numbers.

During the course the material consists of a brief overview of the Framework and the MVC pattern before heading into a sample guestbook application. The discussion demonstrated bootstrapping, Zend_Application, Db Tables, Database access, Forms, Filtering, ACL, Validating, etc, etc. Basically covering all the topics you'd require to get a basic site up an running all the time giving you the tools to go and get more advanced in the framework (although this did amount to 'See the website' much of the time).

Time is given to code up some examples, and to develop the 'guestbook' and simple 'wiki' application. Personally I felt that providing the code or each app and then asking us to develop what was essentially a copy alongside didn't really provide a good learning experience. I would have preferred to develop an application similar, but not identical. to the example application with the benefit of having a guide to refer to. Alternatively building the applications from scratch with the demonstrator would of possibly led to more questions about why and how , thus giving a better understanding of the framework, after all you can look up specifics after the course.

The last lecture consisted of working on the wiki application with help/guidance from the instructor. After the course feedback was taken, it was emphasised several times through the course that Zend takes feedback very seriously, in fact apparently our version of the course was quite new. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

The course style was informal, allowed for feedback and collaboration between attendees and the instructor. The course leader was friendly, approachable (email addresses were shared for questions), and whilst his presentation from the slides was a bit shaky seemed fully competent in the framework. He was clearly someone who used the framework on a regular basis rather than someone who is taught to teach the course, I liked the 'real world' experience in that respect.

Overall Feeling

In some ways I found the course a waste of time, in others it was very handy. Hopefully I'll get my reasons across clearly, and maybe provide some food for thought or useful feedback (knowing me this is unlikely!).

For myself this course was aimed at too low a level. Having gone through the quickstart guide, read Rob Allen's Zend Framework in Action, and worked with the framework a little I didn't really get anything too much. I would of liked the course to pick up from the end of the quickstart and develop additional skills.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Resumé

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.












Panorama Tema ved Themocracy

12 visitors online now
9 guests, 3 bots, 0 members
Max besøgende i dag: 16 kl 2:02 UTC
Denne måned: 16 på 2011/01/09 02:02 UTC
I år: 130 kl 28-03-2011 22:40 UTC
Al tid: 130 kl 28-03-2011 10:40 UTC