Wednesday, 15 January 2014

Mutex's and Semaphores - The toilet Example.

Mutex:

Is a key to a toilet. One person can have the key - occupy the toilet - at the time. When finished, the person gives (frees) the key to the next person in the queue.
Officially: "Mutexes are typically used to serialise access to a section of re-entrant code that cannot be executed concurrently by more than one thread. A mutex object only allows one thread into a controlled section, forcing other threads which attempt to gain access to that section to wait until the first thread has exited from that section." Ref: Symbian Developer Library
(A mutex is really a semaphore with value 1.)

Semaphore:

Is the number of free identical toilet keys. Example, say we have four toilets with identical locks and keys. The semaphore count - the count of keys - is set to 4 at beginning (all four toilets are free), then the count value is decremented as people are coming in. If all toilets are full, ie. there are no free keys left, the semaphore count is 0. Now, when eq. one person leaves the toilet, semaphore is increased to 1 (one free key), and given to the next person in the queue.
Officially: "A semaphore restricts the number of simultaneous users of a shared resource up to a maximum number. Threads can request access to the resource (decrementing the semaphore), and can signal that they have finished using the resource (incrementing the semaphore)." Ref: Symbian Developer Library

Tuesday, 7 January 2014

Zend Framework 2 Cheat Sheet

Zend framework 2 cheat sheet

http://zendframework2.de/cheat-sheet.html
http://slides.mwop.net/2012-01-27-Zf2Workshop/Zf2Workshop.html#slide26

Zend Framework 2 Cheat Sheet


index.phpZend\ServiceManager\ServiceManagerSTARTEventManagerZend\Mvc\Service\EventMnagerFactoryModuleManagerZend\Mvc\Service\EventMnagerFactorySharedEventManagerZend\EventManager\ShareEventManagerServiceManagerConfiguration Zend\ModuleManagr\ModuleManagerZend\Loader\ModuleAutoloaderZend\ModuleManagerListener\ModuleResoverListenerloadModulesloadModule.resolveloadModules.postInvokablesFactoriesDispatchListenerZend\Mvc\DispatchListenr$defaultServiceConfiguration Module EventsDefaultListenerAggregateApplicationZend\Mvc\Service\ApplictionFactoryZend\ModuleManage\Listener\AutoloaderListenerZend\ModuleManagerListener\InitTriggerZend\ModuleManagerListener\OnBootstrapListenerZend\ModuleManage\Listener\LocatorReistrationListenerZend\ModuleManage\Listener\ConfigListenerRequestZend\Http\PhpEnvironmet\RequestZend\Mvc\Application::init()InvokablesFactoriesModuleEventonloadModulesPre()onloadModulesPost()register()__invoke()onLoadModule()__invoke()__invoke()__invoke()onLoadModule()loadModulelöst aus inloadModules()und loadModule()bindet Listenerin createService()Stellt sicher, dass dieKlasse Module automatischgeladen werden kann.Instanziert die Module.phpbasiert auf ZF2 Beta 5(c) 2012 Michael Romer http://zendframework2.de/cheat-sheet.htmlFeedback? zf2buch@michael-romer.deRuft die MethodegetAutoloaderConfig() inder Module.php auf.Ruft die Methode init() inder Module.php auf.Sorgt dafür, dass die MethodeonBootstrap() in der Module.php fürden Event "bootstrap" derApplication registiriert wird Stellt sicher, dass alle Modul-Klassen, die dasLocatorRegisteredInterface implementieren, im ServiceManager verfügbargemacht werdenonLoadModulesPost()Ruft die MethodegetConfig() derModul-Klasse auf undvereinigt alleKonfigurationen.erzeugterzeugtZend\ModuleManagerListener\ServiceListeeronLoadModulesPost()onLoadModule()Ruft ggf. die Methoden getServiceConfiguration(),getControllerConfiguration(),getControllerPluginConfiguration(),getViewHelperConfiguration() in der Module.php auf,verarbeitet die zusammengeführten Configs und konfiguriertdamit die ServiceManager und ergänzt den ServiceManager umweitere Services. ResponseZend\Http\PhpEnvironmet\ResponseRouteListenerZend\Mvc\RouteListenerViewManagerZend\Mvc\View\ViewMangerConfigurationZend\Mvc\Service\ConfigrationFactoryDependencyInjectorZend\Mvc\Service\DiFactryRouterZend\Mvc\Service\RouteractoryViewFeedRendererZend\Mvc\Service\ViewFedRendererFactoryViewFeedStrategyZend\Mvc\Service\ViewFedStrategyFactoryViewJsonRendererZend\Mvc\Service\ViewJsnRendererFactoryViewJsonStrategyZend\Mvc\Service\ViewJsnStrategyFactoryViewHelperManagerZend\Mvc\Service\ViewHlperManagerFactoryControllerPluginMangerZend\Mvc\Service\ControlerPluginManagerFactoryControllerLoaderZend\Mvc\Service\ControlerLoaderFactoryScoped ServiceManagerbootstraproutedispatch.errorMVC EventsMvcEventdispatchonRoute()Ruft den Router auf, der versucht, einepassende Route für die aufgerufene URL zuermitteln. onDispatch()Instanziert mithilfe des ContollerLoader denim Rahmen des Routings ermitteltenController.onBootstrap()löst aus in run()Bereitet den View Layer vor.renderfinishZend\Mvc\ApplicatinControllerabgeleitet von:Zend\Mvc\Controller\AbtractActionControllerdispatchlöst ausexecute()registriert in onBootstrap()RouteNotFoundStrateyZend\Mvc\View\RouteNotoundStrategieServicesSetzt den Statuscode auf 404, falls keine passendeRoute ermittelt oder kein Controller ermitteltwerden konnen und erzeugt ggf. ein speziellesViewModel für die "File-Not-Found" - Seite. prepareNotFoundViewModel()detectNotFoundError()prepareNotFoundViewModel()ExceptionStrategyZend\Mvc\View\ExceptioStrategybindet listener inbootstrap()prepareExceptionViewModel()Setzt den Statuscode auf 500, falls im MVC-Eventein Error vom Typ Application::ERROR_EXCEPTIONzu finden ist und erzeugt ein spezielles ViewModelfür die "Application Error" - Seite. DefaultRenderingStraegyZend\Mvc\View\DefaultRederingStrategyrender()Stößt das Rendering der View an.ENDEZend\Mvc\View\CreatViewModelListenerZend\Mvc\View\InjectTemplateListeneZend\Mvc\View\InjecViewModelListenerbindet Listener in onBootstrap()send()createViewModelFromArray()createViewModelFromNull()Stellt sicher, dass ein Objekt vom Typ"ViewModel" für das rendering bereitsteht.injectTemplate()Stellt sicher, dass ein Objekt vom Typ"ViewModel" für das rendering bereitsteht.Fügt das passende Template für dasRendering in das ViewModel hinzu.injectViewModel()Fügt das ViewModel dem MVC-Event hinzu.injectViewModel()ViewZend\View\ViewrendererresponseViewEventViewPhpRendererStraegyZend\View\Strategy\PhpRndererStrategyselectRenderer()injectResponse()Wählt den zu verwendenen Renderer und überträgt das Ergebnis des Rederingsvon der View in das Response-Objekt.ViewRendererZend\View\Renderer\PhpendererViewTemplateMapReolverZend\View\Resolver\ViewemplateMapResolverViewTemplatePathStakZend\View\Resolver\ViewemplatePathStackViewResolverZend\View\Resolver\AggrgateResolverFindet den Pfad zu einem Template auf Basis eineszuvor festgelegten Keys in einer Key-ValueDatenstruktur.Findet den Pfad zu einem Template auf Basis eineszuvor festgelegten Stacks vom Pfaden.Aggregiert ViewTemplateMapResolver &ViewTemplatePathStackZend Framework 2 Request Dispatch FlowÜberblick Ablauf Request-Verarbeitung1. Request wird auf index.php umgeschrieben2. index.php: 2.1 Autoloading konfigurieren2.2 application.config.php einlesen 2.3Zend\Mvc\Application::init() aufrufen, dabei Configübergeben3. Zend\Mvc\Application::init() 3.1 initialisiert den ServiceManager3.2 legt Inhalte der application.config.php als Service ab3.3 fordert beim ServiceManager den ModuleManager anund ruft dessen loadModules() - Methode auf3.4 fordert dann beim ServiceManager die Application anund ruft dessen bootstrap() - Methode auf4. index.php: 4.1 ruft Methode run() der Application auf4.2 ruft Methode send() der Application aufEinsprungpunkt für alle Requests durchEinsatz von mod_rewrite und ggf. .htaccess -File.Repräsentiert die gesamte Anwendung und istEinsprungspunkt ins Zend Framework. Bietetdie Klassenmethode init() zur Erzeugungeiniger Basisdienste.Verwaltet die Services der Anwendung.Ermöglicht die Registrierung von Listenernfür Events, wenn der eigentlich zuständigeEventManager noch nicht verfügbar ist.Verwaltet die Module derAnwendung.Erzeugt einen Service, derZugriff auf die vereinteKonfiguration bietet. Ermöglicht es einem anderen Objekte,Ereignisse auszulösen und Listener zuverwalten.ApplicationConfigurationarrayInhalt der application.config.phpServiceIdentifiersSharedEventManager:- ModuleManager- module_manager- Zend\ModuleManager\ModuleManagerIdentifiersSharedEventManager:- application- Zend\Mvc\ApplicationErzeut den ViewHelperManager, derViewHelper zur Nutzung bereitstellt.Erzeut den ControllerPluginmanager,der Controller Plugins zur Nutzungbereitstellt.Erzeut den ControllerLoader, der dieController der Anwendungbereitstellt.Diese Services stellen selbstwieder spezialisierteServiceManager dar.IdentifiersSharedEventManager:- Zend\Stdlib\DispatchableInterface-Zend\Mvc\Controller\AbstractActionController- der erste Teil desNamespaces des ControllersErzeugt aus Templates und ViewModelfinales Markup.Repräsentiert die visuelle Darstellung. create and share your own diagrams at gliffy.com