Категорія: PHP

Маршрут запитів на sitemap.xml звичаєм контролер / дію

За , в середу 6 січня 2010 12:13 ранку

Для того, щоб прямі запити для / sitemap.xml для користувацьких контролера і дії в Zend Framework, програма просто додайте наступне в вашому application.ini або альтернативного конфігураційного файлу (наприклад, я використовую navigation.ini):

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = індекс
 resources.router.routes.sitemap.defaults.action = карта сайту

Приклад коду для виводу можна побачити шляхом створення дії у відповідний контролер (наприклад, моя карта сайту знаходиться в індексі контролер, карта сайту дії):

 < PHP
 Клас IndexController
     розширює Zend_Controller_Action
 {
     / **
      * Надає карта сайту на основі Zend_Navigation установки
      * /
     громадських sitemapAction функції ()
     {
    	 Відлуння $ це-> Вид-> навігація () -> карта сайту ();
    	 $ Це-> Вид-> розкладка () -> disableLayout ();
    	 $ Це-> _helper-> ViewRenderer-> setNoRender (істина);
     }
 }

Sitemaps може швидко і легко бути створені за допомогою Zend_Navigation , великий інструкція (і взагалі дуже корисно для Zend Framework підручники) є Zend виливки - Динамічне створення меню сайту і панірувальні сухарі .

Zend Framework Пер-Модуль на базі настройка

За , п'ятниця 1 січня 2010 10:40 вечора

Я створив наступних на цю посаду, який вимагає менше, див Модуль основі макета - Zend Framework .

При використанні Zend Framework, за допомогою модуля, його очевидним, що якщо ви працюєте в різних (суб-) сайтів з однієї програми вам не обов'язково хочуть того ж сценарії розкладка для кожної частини. Я вирішив піти з наступною структурою сайту:

  / Застосування
     / Контролери
         ...
     / Моделей
     / Модулів
         / По замовчуванню
             / Контролери
             / Макет
                 / Скрипти
             / Переглядів
                 / Скрипти
         / AnotherModule
             ...
     / Скрипти

Проблема полягала в створенні макета скриптів на кожного модуля. Відповідь прийшла через використання помічника дії. Налаштування розкладок на кожного модуля включає в себе три етапи:

  1. Application.ini (або аналогічні установки конфігурації):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ модулі / адміністратор / макети / скрипти"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ модулі / за умовчанням / макети / скрипти"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ модулі / членів / макети / скрипти"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ модулі / філія / макети / скрипти" 
  2. Створіть свій помічник дії:
      <? PHP
     / **
      * Встановлює розташування на шляху кожного модуля
      *
      * @ Автор Ллойд Уоткін <lloyd@evilprofessor.co.uk>
      * @ З 2010-01-01
      * /
     Клас Pro_Controller_Action_Helper_SetLayoutPath
         розширює Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Встановлює розташування шлях, заснований на модулі
          * /
         громадських preDispatch функції ()
         {
        	 Модуль $ = $ цьому-> GetRequest () -> getModuleName ();
    
    	     якщо ($ завантаження = $ цьому-> getActionController ()
    	                        -> GetInvokeArg ('завантаження')) {
    
    	         $ = $ Конфігурації завантаження-> getOptions ();
    
    	         якщо (ISSET ($ CONFIG [$ модуль] ['ресурси'] ['макет'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ CONFIG [$ модуль] ['ресурси'] ['макет'] ['layoutPath'];
    	             $ Це-> getActionController ()
    	                  -> GetHelper («розташування»)
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. І, нарешті boostrap помічник дії:
      ...
         / **
          * Встановлює розташування скриптів на кожного модуля
          * /
         захищена функція _initLayoutHelper ()
    	 {
    	     $ Це-> завантаження ('FrontController');
    	     $ Розташування = Zend_Controller_Action_HelperBroker:: addHelper (
    	         нові Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Доктрина: DATETIME замовчуванням NOW ()

За , в середу 30 грудня 2009 6:30 вечора

Я боровся зі створення схеми бази даних для нової Zend Framework проекту. Я використання намагаються використовувати доктрину ORM для моєї моделі бази даних. Мені потрібно створити схему так, щоб він дозволив мені встановити дату і час за умовчанням для дати і часу `` колонці, наприклад, при додаванні нового повідомлення я отримую поточний час. Після довгих пошуків і експериментів я знайшов рішення, тому я ділю його.

У вашій схемі YAML файл просто зробити наступне:

 Повідомлення:
   ActAs:
     Timestampable:
       створено:
         Назва: created_at
         Тип: мітка
         формат: Ymd H: я: S
       оновлення:
         Назва: last_updated
         Тип: мітка
         формат: Ymd H: я: S
   стовпців:
     ID:
       тип: ціле число
       первинна: ​​Поправді
       автоінкремент: істинний
     Назва: рядок (255)
     електронна пошта: рядок (300)
     повідомлення: рядок (2000)

Якщо, з іншого боку, ви не хочете `` updated_at колонку можна використовувати наступні:

 Повідомлення:
   ActAs:
     Timestampable:
       створено:
         Назва: created_at
         Тип: мітка
         формат: Ymd H: я: S
       оновлення:
         інвалідів: істинний
   стовпців:
     ID:
       тип: ціле число
       первинна: ​​Поправді
       автоінкремент: істинний
     Назва: рядок (255)
     електронна пошта: рядок (300)
     повідомлення: рядок (2000)

PHP Design Patterns - Observer Pattern

За , вівторок 29 грудня 2009 10:02 вечора

Я читав Head First шаблонів проектування недавно і вирішили написати деякі з моделей, як PHP, приклади для мого власного блага. Перше, що я вирішив код на це спостерігач Pattern . Формальне визначення шаблону спостерігача є:

Спостерігач шаблон (підмножина асинхронних публікації / підписки шаблон ) є програмним забезпеченням шаблон дизайну , в якому об'єкт , званий предмет, зберігає список своїх утриманців, званих спостерігачів, і повідомляє їх автоматично будь-яких змін стану, як правило, по телефону одним з їх методів . Він в основному використовується для реалізації розподілених систем обробки подій.

Як системи стають все більш слабо пов'язані переконавшись, що, коли відбувається подія всі системи, які вимагають знання ці оновлення повідомляється. Наприклад, повідомлення в блозі, після збереження запису ми, можливо, буде потрібно оновлення пошукової системи (наприклад, Lucene), оновлюємо нашу карту сайту, теги, електронної пошти підписалися користувачів і т. д. спостерігача закономірність дозволяє розробникам додавати додаткові приймачі, не редагуючи їх спостережуваного об'єкта . Вводячи спостерігачів (тобто пошукової системи оновлення спостерігача, генератор карти сайту і т.д.) в предмет (наприклад, повідомлення в блозі редагування системи) ми можемо дозволити їй виконувати всі необхідні оновлення без будь-яких змін.

Продовжити читання 'PHP Шаблони дизайну - Observer Pattern' »

Управління Grid Computing використанням віртуальних середовищ - Частина 4

За , в п'ятницю 4 грудня 2009 11:59 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетна обробка мільйони записів даних кожен день, і я думав недавно про всі машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей, я буду дивитися на потенційні вигоди від використання офісу сітки використання віртуалізованих середовищах.

У частині 3 ми створили віртуальну машину обробки та налаштування вікна машини, щоб стати часу простою працівників.

Запуск останньої версії коду

Неминуче після створення робочих бізнес-логіки буде змінюватися, помилки будуть знайдені, швидше більш ефективний код буде випускатися в результаті чого ваші працівники сиділи обробки даних, використовуючи старі смердючі код . Як же ми гарантуємо, що ми завжди з використанням новітня і найкраща версія нашого сценарії обробки?

Є декілька дуже легко прості способи, якими ми могли б зробити це, трюк, однак, полягає в зниженні потужності і мережевий трафік в досягненні цієї мети. Давайте почнемо з найпростіших рішень і покращити її повільно, протягом пари ітерацій.

Перший метод буде просто підключитися до нашої роботи серверний елемент управління (через Samba, FTP, або подібний) і опустіть останню версію коду. Не дуже ефективно, але він буде робити цю роботу. Дозволяє покращити щось, а як щодо створення Rsync сценарій і використанні, що кожного разу замість цього? Крім те, що про введення наших останніх обробки скрипта в підривній перевірити код спочатку, а потім просто оновлюємо нашу код при кожному запуску ( запускали )?

Врешті-решт ми могли б закінчити з Баш скрипт (названий крон кожні 10 хвилин), який виглядає, як просто, як це:

  #! / Бен / ш
 пс, якщо сокира | Grep-V Grep | Grep PHP > / Dev / нуль
 потім
     відлуння "Робота в даний час обробки, вихід"
 ще
     відлуння "Робота не працює, почніть прямо зараз"
     кд / шлях / к / робочої / копії
     запускали
     PHP yourJobProcessingScript.php
 Fi 

Тепер ми можемо бути впевнені, що з кожним запуском ми безумовно встановлена ​​остання коду. Ми забезпечення цього шляхом оновлення нашої бази коду кожного разу, коли ми виконуємо запуску і зниження мережевого трафіку тільки на передачу файлів відмінності між нашою мережі.

У моїй демонстрації установки, я зробив саме так, як вище. Subversion був встановлений на моєму сервері обробки роботу, і я просто витягнув останній код від «робочий» філії за допомогою "запускали". Я також додав теги номер версії моєї обробки скрипта, який був повернутий в базу даних як частина дав результати. Таким чином, я міг бачити, що мій код оновлюється кожного разу, коли я скопіював мій стовбур в те відділення працівника, що я точно встановлена ​​остання обробка сценарію.

На підставі останніх даних

Якщо ваша робота обробки використовує джерела даних, то в якийсь момент ці будуть оновлені. Якщо ви називаєте джерел даних на основі дуже рідко ви збираєтеся повені мережі з трафіком, як тільки ваші працівники почнуть виконуватися чого все в глухий кут. Для мого рішення, я вирішив, що я хотів би перенести джерел даних в усьому з моєї віртуальних машин.

Тримайте ви коні там! Що робити, якщо джерела даних ВЕЛИЧЕЗНИЙ? Ну це дійсно випадок, який обсяг даних може йти мова? Це може бути більш економічно ефективним, щоб встановити додатковий ємний жорсткий диск в кожну машину, ніж придбати додатковий сервер обробки. Це питання про бюджет і становить до бізнесу, щоб вирішити. Це, може бути, що ваш джерела даних настільки великий, що його просто неможливим зберегти цей обсяг даних в ваших машин працівника. У такому випадку, що б ви зробили? Ну, ми могли дивитися на виклик локального сервера даних, але це може викликати проблеми з мережею. У цьому випадку сітка системи, такі як це може стати нереальним включити в офісному середовищі. Він також може бути те, що ви можете подивитися в альтернативних стратегій роботи, наприклад, тільки зателефонувавши в робочі між 8 вечора і 6 ранку щоночі, та / або дроселювання джерела даних запитів.

Рухаємося далі скажемо нашим даними джерел складе 100 ГБ даних. Ну так, це досить багато даних для переміщення по мережі на оновлення. Як би ми гарантуємо, що у нас є остання копія даних в цьому випадку? Rsync є можливість, але особисто я думаю, запустивши ваш останній джерело даних на сервері обробки замовлення і налаштуванням як майстер у реплікації (з хороший довгий журнал бен), може бути шлях:

реплікації При установці кожного з ваших працівників як рабів для управління завданнями сервером оновлень до джерел даних сочиться вниз приємно, щоб ваші працівники, не величезне зростання мережевої активності (тобто, якщо ви виконуєте величезну оновлення даних, і всі ваші робочі удар в відразу). Це має переваги в порівнянні з Rsync в тому, що ви не отримаєте довгу паузу перед кожній роботі; як оновлення баз даних, MySQL демона на вашому робочому будемо постійно оновлювати свої дані, а обробка триває.

Це, як я створив мій демонстрація сервера. Щоб налаштувати реплікацію я пішов за керівництво на сайті MySQL ( Налаштування реплікації ) і протягом 20 хвилин у мене був Початковий працівника тиражування управління завданнями серверів даних. За кожен додатковий працівник налаштування реплікації і процес працював кожен раз, коли В. М. був скопійований.

Резюме

У цій частині статті ми розглянули, як легко і безболісно це зберегти ваш код обробки аж до теперішнього часу using Rsync або subverion (SVN), щоб зробити роботу і зменшити мережевий трафік, в той же time. Ми також обговорили, як зберегти ваші дані у джерелі інформації останню дату, що дозволяє йому сочитися вниз до кожної з ваших працівників. Таким чином, ми сфері забезпечення того, щоб ми в ногу з бізнес-логікою та інформації в нашій системі сітки офісу. Там, очевидно, буде незліченні альтернативи виконанню цих завдань, але тут були два простих прикладу, щоб показати, наскільки легко рішення прибути.

Наступний раз

У заключній частині цієї серії, влучно назвав частина 5 , ми обговоримо розгортанні цієї системи. Я буду резюмувати, що було вивчено і те, що мені вдалося створити.

Управління Grid Computing використанням віртуальних середовищ - Частина 3

За , в п'ятницю 4 грудня 2009 11:37 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетна обробка мільйони записів даних кожен день, і я думав недавно про всі машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей, я буду дивитися на потенційні вигоди від використання офісу сітки використання віртуалізованих середовищах.

У частині 2 ми розглянули роботу сервер буде працювати, і як робочі місця повинні бути налаштовані для досягнення найбільшої обсяг обробки в той час як забезпечення того, щоб кожну вимогу обслуговується в обов'язковому порядку.

Налаштування робочого - чи LIMP сервері

Наступним кроком у цьому процесі, щоб налаштувати віртуальні робочі. Для цього я буду використовувати установки CentOS використанні VirtualBox. Я збираюся встановити MySQL і PHP на сервері, також відомий як LIMP (Li ммк, м ySQL, Р л.с.) Сервера (я, можливо, зробили це ім'я вгору).

  • Встановити VirtualBox на вашій машині вікна (слідуйте посиланню)
  • Завантажити та встановити CentOS (поточна версія 5.3) в межах створюваних віртуальних машин

Там немає сенсу мені буде це там, напевно, 1000-х роках велику підручники там (ну гаразд, ось один: Створення та Managing CentOS віртуальній машині під VirtualBox ). Важливо відзначити, я вважаю, є те, що я назвав свою віртуальну машину GridMachine.

Що стосується мого вибору віртуалізації клієнтів і операційної системи, туди не таке вже велике вагомих причин для кожного варіанта. VirtualBox є те, що я використовую на моєму домашньому комп'ютері і при підтримці трьох основних операційних систем. Я вибрав CentOS як його гарним стабільним ОС і я використовую його на свій веб-сервер. Я дуже вірю в правильні інструменти для роботи (хоча я подаю заяву "використовувати швидкий і простий для вас" менталітет тут), так що, якщо операційна система X працює ваш код швидше і більш ефективно використовувати його замість:)

Важливо переконатися, що ваша VM використовує DHCP, в іншому випадку для кожної нової віртуальної машини повинні бути налаштовані окремо, що те, що ми не want.By використанням DHCP нам не потрібні налаштування мережевих параметрів індивідуально для робочого машин, DHCP вручить з IP-адрес для вас. Тому ви можете скопіювати ваші віртуальні машини біля офісу, не піклуючись про настройку кожного з вгору (це покращує масштабованість і знижує працівник адміністрації).

Процес, який ви повинні прагнути до досягнення б отримати нову фізичну машину, встановити VirtualBox, а потім в значній мірі розгорнути віртуальний образ, не більше того. Це може бути мудрим, щоб налаштувати всі ваші працівники в іншій підмережі, щоб можна було хоча б дізнатися, скільки машин працює. Вам також необхідно налаштувати машини на довгострокову оренду або необмежену оренди DHCP.

Як запустити Вакансії на працівника

Це цікавий напрямок і Є кілька допустимих методів для обробки завдань на працівника. Тут я просто обговорити два найбільш очевидних:

  • Постійно працює сценарій: сценарій, будь то скрипт або скрипт PHP виконується один раз на працівника і працює як частина нескінченного циклу. Я знижкою цей метод як один крах сценарію і, можливо, ваші працівники перестануть працювати без якогось втручання.
  • Cron заснований виконання скрипта: Кожні Х хвилин хрон демон стартує дзвінок на ваш сценарій, щоб отримати речі, що йдуть. Без будь-якої перевірки це може призвести до багатьох багато копій ваших запущених сценаріїв працівника.

Моє рішення було піти з хрон який стартує скрипт кожні 10 minutes.Â Мій скрипт виконує наступні задачі:

  1. Отримати список процесів і GREP це для 'PHP'. Якщо не знайдений, то продовжити.
  2. Зателефонуйте своєму роботи коду, в моєму випадку це було б щось PHP заснованих
  3. Працівник скрипт завершує свій біг
  4. Готові йти знову на наступній відповідний виклик

Мій Баш скрипт виглядає приблизно так:

  #! / Бен / ш
 пс, якщо сокира | Grep-V GREP | GREP PHP> / Dev / нуль
 потім
     відлуння "Робота в даний час обробки, вихід"
 ще
     відлуння "Робота не працює, почніть прямо зараз"
     PHP yourJobProcessingScript.php
 Fi 

Примітка: відлуння майже повністю безглуздим, але може допомогти наступний людина, яка приходить, щоб спробувати і редагувати їх.

На цьому ми завершуємо настройку працівника віртуальній машині, швидко, просто і легко скопіювати, до кожного нового частину обладнання, яке отримано. 'Ум' сітки система дійсно не в візуалізовані ОС, її все робити з код, створений для обробки завдань, роботу конфігурації, а в тому, щоб завдання виконується в разі необхідності (наприклад, коли господар знаходиться в режимі очікування ).

Налаштування ОС Windows для ініціалізації робочих

Першим завданням є вироблення команд, необхідних для запуску віртуальної машини з командного рядка Windows. Якщо ви встановили VirtualBox в папку за замовчуванням, і ви назвали ваш робочий GridMachine то команда вимагає, щоб завантажити ваш працівник є:

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

Однак, щоб запустити сценарій в "безголовий" державу ми повинні використовувати:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - VRDP = вимкнено 

Це призведе до запуску віртуальної машини без графічного інтерфейсу користувача і дозволяє йому зберегти стан витончено. Другий аргумент вимикається RDP тому він не вступає в протиріччя з вікнами, RDP, або дати вам повідомлення про те, на порт 3389. Ім'я віртуальної машини з урахуванням регістру!

Далі, ми повинні встановити вікна вгору, щоб почати наш робочий В. М. раз машина була простоювати. Для цього (на Windows XP), ви повинні будете піти Пуск -> Всі програми -> Стандартні -> Службові -> Призначені завдання, як показано нижче:

запланованих завданнях

Потім натисніть на "Додати завдання" з наступним переглядом, щоб додати користувача програми. Перейдіть на VBoxManage сценарій і натисніть кнопку ОК. Розклад ваше завдання для будь-якого з варіантів (ми змінимо це в хвилину) і продовжити. Після пропуску наступному екрані вікна будуть просити вас, хто ви хочете виконати це завдання, я пропоную або "Адміністратор" або створення нового привілейованого користувача. Пам'ятайте, що ми не хочемо втручатися в стандартній облікового персоналу на машині в будь-який момент. Натисніть кнопку Далі, щоб перевірити показати додаткові параметри для цього завдання.

До кінця запустити текстове додати нашу рядок 'startvm GridMachine і гарантії, які працюють тільки тоді, коли увійшли в систему залишається дану опцію. Відвідати Розклад завдання наступного і змінити графік опуститися до опцію 'в режимі очікування ", виберіть кількість часу ви хочете машину сидіти склавши руки, перш ніж перейти до наступної закладки.

Нарешті зніміть опцію у якому говориться, зупинити задачу, якщо вона працює вже в X кількість часу, але відзначте опцію, щоб зупинити завдання, якщо машина не простоює.

графік

Ось саме тоді для установки хост вікна!

Резюме

У цій частині ми створили віртуальну машину для роботи в якості працівника, а також те, як ми називаємо і виконати наші сценарії обробки завдань (для себе сценарій PHP). Звідси ми розглянемо, як налаштувати наші копії вікна для запуску віртуальної машини в режимі обезголовлений, коли комп'ютер не діє, і зберегти свій стан, коли користувач відновлює використання машини. Сподіваюся, в цей момент ви бачите, як просто створити таку систему і свербіж, щоб отримати деякі експерименти збираєтеся самі!

Наступний раз

У частині 4 ми будемо дивитися на використанні інструменти для того, що ви використовуєте останню версію коду і даних джерел, з тим, що отримані результати, завжди актуальні, актуальний з останніми бізнес-інформації і логіку.

Управління Grid Computing використанням віртуальних середовищ - Частина 1

За , в п'ятницю 4 грудня 2009 11:23 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетна обробка мільйони записів даних кожен день, і я думав недавно про всі машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей, я буду дивитися на потенційні вигоди від використання офісу сітки використання віртуалізованих середовищах.

Як PHP- розробник я збираюся використовувати інструменти, які я використовую кожен день, а саме, Linux, MySQL , PHP, VirtualBox та Subversion (SVN). Однак я сподіваюся, що це керівництво буде адаптуватися до інших мов і технологій так само добре.

Рішення, яке я надаєте, буде частково заснований на тип обробки ми повинні були б досягти однак це не може бути правдою через всю статтю, як я буду щось змінити, для простоти, або для отримання більш цікавих варіантів використання.

Ці віртуалізованих середовищах, працюватиме на Windows-машин, так як це те, що більшість відділень перспективі. Обробки, офісної техніки, не повинні заважати співробітникам за допомогою цих машин, повинні не вимагають обслуговування в машині, і бути легко адаптується до нових машин, як вони стають доступними. Крім того, нові віртуальні машини не вимагає ніяких додаткових налаштувань, оскільки це значно знижує масштабованість і простота, при якому сітка система може бути розширена.

Чому розгортання сітки Управління обчислювальної?

По-перше ви можете подумати, чому б не використовувати ресурс хмарних обчислень, таких як платформи EC2 амазонки ? Ну причин може бути декілька, наприклад:

  • Ви не будете доручати певну даних у середовищі хмарних обчислень
  • Ви не можете помістити деякі дані в середовищі хмарних обчислень з юридичних причин (наприклад, дані з країни), потенційно з юридичних причин, наприклад, NHS записів.
  • Ви хочете, щоб ваша апаратура обробки тісні і мати повний контроль над апаратної занадто
  • У вас немає коштів проекту для запуску хмара випадках
  • Ваш офіс не має підключення до Інтернету, і тому її не можна використовувати хмара ресурсів
  • Вам не подобається дощ, хмари пропоную дощ, тому ви тримаєте подалі

Я впевнений, що список можна продовжити, але я думаю, що це достатньо.

Переваги Grid Computing Управління

Ну, давайте робити деякі математики (а в істинному стилі фізики дозволяє зробити деякі радикальні припущення). Уявіть, у вас є великий м'язистий сервер обробки працює 100 робочих місць на день. В офісі у вас є 50 машин, які простоюють по 16 годин на день, кожна з цих машин складає 10%, як потужний, як ваш м'язистий розірвати обробки. (Усі результати тут округлюються до недооцінюють збільшення продуктивності).

Так, 1 машина * 10% потужності * 2 / 3 часу = 0,067 тобто 1 настільний обробки в режимі часу можуть обробляти 6 повний робочий день.

Якщо ви зараз масштаби цього до нього займає 15 простою робочі столи для обробки, як багато робочих місць в день в якості основного сервера обробки робить.

Отже, в нашому офісі претендує 50 машин ми могли б збільшити нашу обчислювальну потужність від 1 сервер, що підтримує до 4 повних серверів, що обробляють, або ми могли б бути обробки 400 робочих місць на день замість 100.

Зверніть увагу, для будь-яких інвестицій у нове обладнання Ваш компанія тільки що збільшив свою пакетну обробку потужністю 4 рази! Потенційно ви збираєтеся збільшити споживання енергії, але в більшості офісів Я був на машинах, як правило, залишається на ніч в будь-якому випадку, щоб ви могли бачити це як зелений ініціативу.

Інші переваги також означати, що інвестиції в нові (або оновлені) обробка серверів може бути відкладено, якщо ваша машина офісу є достатніми і що, як вам поліпшити потужність вашої машини офіс офісі сітка стає більш потужним автоматично.

Технології

Що вам потрібно? (Чи, точніше те, що я використовував):

  • Idle офісне обладнання (в моєму випадку запасних старі вікна XP ноутбук)
  • VirtualBox (або іншого програмного забезпечення віртуалізації клієнта)
  • Віртуальну машину з PHP, MySQL running працює скоротити OS, я дзвоню ці мої LIMP серверів:)
  • Вакансії для запуску
  • Робота сервера (може бути інший віртуальної машини десь)

Типові Вакансії

Типи робочих місць, що ця система призначена для роботи виглядає наступним чином:

  • Система отримує список даних, на яких ми повинні порівнювати і повертають результати
  • Включає в себе перевірку відповідності / пошуку декілька (досить статична) джерел даних
  • Результати з джерел даних можуть зажадати подальшої перевірки, зливаючись, перевірка додаткових джерел даних у відповідь на результати
  • Дані повертаються з відповідними записами, повністю перевірені і оброблені
  • Кожна запис протягом роботи не залежить від інших

Тому в основному ми дивимося на запущених завдань, які вимагають суміш пошук у базі даних і деякого числа хрускіт, досить типовий сценарій в бізнес-середовищі.

Сітка рішення не тільки вигідно для обробки робочих місць такого типу. В принципі, будь-який процес, який може бути розділена на незалежні модулі можуть працювати паралельно. Див цей Вікіпедії прикладів і додаткової інформації: Grid Computing , але пару відомих прикладів SETI @ Home і BIONC . Є рамки для виконання обчислювальних мереж, і вони також заслуговує вивчення.

Що ми досягли?

До кінця цих статтях я сподіваюся показати, що розгортання офісу сітки не повинні бути дуже дорогим або багато часу. Я збираюся обговорити наступні питання:

  • Налагодження системи управління завданнями, робота конфігурації
  • Створення відповідної обробки віртуальної машини
  • Як налаштувати систему на вікна машини
  • Забезпечення ви використовуєте останню версію коду і даних
  • Розгортання та тестування
  • Забігаючи вперед

Я буду вдома (добре, я збудував, а потім написав це) приклад програми для тестування концепцій на локальній машині через Windows XP, і мій "GridMachine" віртуальної машини. Моя робота серверний елемент управління буде моєю основною машиною, яка працює Fedora 11 .

Це зовсім не означало, щоб продемонструвати повністю робочий надійні системи, її важило більше, демонстрації та обговорення показують, що ці речі можуть бути досягнуті в розумно короткі строки і з мінімальними витратами. Будь ласка, не соромтеся, надсилайте мені будь-які коментарі, виправлення або поліпшення, і я зроблю все можливе, щоб ця стаття оновлено до матчу.

Наступний раз

У частині 2 я почну, дивлячись на системи управління роботою, і вивчити, як робочі місця повинні бути налаштовані для досягнення найбільшої обсяг обробки в той час як забезпечення того, щоб кожну вимогу обслуговується в обов'язковому порядку.

Управління Grid Computing використанням віртуальних середовищ - Частина 2

За , в п'ятницю 4 грудня 2009 11:23 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетна обробка мільйони записів даних кожен день, і я думав недавно про всі машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей, я буду дивитися на потенційні вигоди від використання офісу сітки використання віртуалізованих середовищах.

У частині 1 я дав огляд системи і технології, я буду використовувати, а також обговорили деякі з потенційних причин, чому ви хотіли б створити офіс сітки.

Керування завданнями

Якщо ви збираєтеся бути запущений робочі місця, то ви будете мати потребу, якимось чином управляти ними. Ваше завдання системи управління (на вашу роботу сервера) повинен бути дуже добре продумані, перш ніж навіть намагатися запустити офіс сітки. Так по-перше, які завдання для системи управління завданнями:

  • Роздайте робочих місць на вимогу робітників
  • Скажіть робочим, який тип запуску завдань
  • Трек робочих місць
  • Переконайтеся, що робочі місця запускати тільки один раз
  • Забезпечити роботу цих працівників, або хоча б сказати їм, де його отримати

Крім того, система повинна бути розширюваної, який діє на даний момент в рамках однієї справи може бути продовжений до запуску кількох типів робочих місць, як бізнес бачить себе в сітці рішення. Наприклад, робочі місця можуть отримати пріоритети, більше ніж один тип завдання можуть існувати (тобто кілька баз код), у результаті ви можете навіть запустити кілька різних машин працівника, які оптимізовані для кожного типу завдання (хоча це ніяк відійти від "загального працівника "ідея). Завжди прагніть думати про майбутнє, при розробці системи, коротке бачення строк може призвести до довгостроковій перспективі розчарування і збільшення часу розвитку.

Робота сервера

Ми збираємося потрібно десь контролювати свої робочі місця з, це повинна бути єдина система у вашій сітці, яка має фіксовану локатор ресурсу, будь то IP-адресу, ім'я хоста, URL-адреса (з використанням внутрішнього DNS) і т.д. Це відбувається тому, що робітники повинні знати, де шукати роботу, працівникам необхідно знайти систему управління завданнями (не система управління завданнями знайти працівників).

Роботи самого сервера насправді не складне завдання (у базовій системі чи інакше), він повинен зберігати список завдань, роздавати робочі місця, отримувати результати, а потім зберігати їх для подальшого використання. Як ці частини (наприклад, "роздавати робочі місця") визначаються може бути дуже простий. Пізніше ми можемо розширити системи включають адміністративний інтерфейс для додавання, редагування, видалення, призупинити роботу, але це виходить за цю вправу.

Існує ніяких підстав, те, що ваша робота сервера не може бути віртуальна машина працює протягом вашого основного сервера обробки умови, що вона не зливає воду занадто багато ресурсів з нього. Роботу сервера однак потребує високої доступності, якщо він йде вниз, у п'ятницю ввечері ви будете втрачати всі вихідні обробки, потенційно варто Вам пару тижнів вартує часу обробки (в порівнянні з вашою основною сервер обробки поодинці) . You may want to consider putting your job server on a load balanced environment for high availability.

Basic Setup

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.

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.

Резюме

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

Введення

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?
  • 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.

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.

Стоп!

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.

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.

Фон

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.

Резюме

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.












Панорама тему, Themocracy

9 visitors online now
5 guests, 4 bots, 0 members
Максимум сьогодні: 17 в 6:54 ранку UTC
В цьому місяці: 17 в 18-08-2011 6:54 ранку UTC
У цьому році: 130 в 28-03-2011 10:40 вечора UTC
За весь час: 130 в 28-03-2011 10:40 вечора UTC