Категория: 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) и т.д. Это происходит потому, что рабочие должны знать, где искать работу, работникам необходимо найти систему управления заданиями (не система управления заданиями найти работников).

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

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

Основные настройки

Базовые настройки для нашей работы сервера будет состоять из того, что я звоню одному из моих LIMP серверов (то есть Li ммк, м ySql, Р л.с.). Код, выполняемый на работников Теа действительно будет работать, какие работы он может работать, взаимодействуя с работой баз данных системы управления. 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.

Следующий раз

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

Управление Grid Computing использованием виртуальных сред - Часть 5

По , в пятницу 4 декабря 2009 11:03 вечера

Введение

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. Таким образом,

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

Развертывание

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: основы - Обзор

По , в субботу 28 ноября 2009 10:42 вечера

Мой работодатель недавно заплатили за группой из нас разработчикам использовать Zend Framework: основы Конечно, здесь я буду резюмировать мои мысли и мнения относительно курса для других. Для тех, кто хочет сэкономить время, вот мое резюме:

Для разработчиков, не было времени, чтобы смотреть на Zend Framework, этот курс (Zend Framework: основы) обеспечивает хорошее общее представление о рамках познакомить вас с ключевых областях и давать достаточно информации для того, чтобы продолжить. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

Фон

Я PHP разработчик около 5-6 лет, и начали работу с Zend Framework, на основе компонентов в течение последних 6 месяцев. Я разработал и / или был разработчиком пара небольших Zend Framework MVC sites.Â Я буду честен, я не имел огромное количество контактов с другими рамки, кодирование точки зрения, но провел несколько часов исследования проекта веб-сайтов и оценки them. рамки и окружающим сообществом Zend Framework вполне интересной и там, кажется, огромные возможности в том, где его собираются.

О курса

Конечно поставляется более чем 9 двухчасовой сессии WebEx (с 10-минутный перерыв в середине). Времени тратится проходит набор слайдов, предоставляемые Zend с обсуждением в любое время. Вы можете использовать микрофон для общения с инструктором, но, честно говоря, я не вижу никого использовать что-нибудь больше, чем окно чата. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. Конечно лидер разговаривает с участниками либо по решению интегрированный VoIP, или вы можете позвонить в использовании одной из многих во всем мире набрать в цифрах.

В ходе материал состоит из краткого обзора рамок и шаблон MVC, прежде чем отправиться в пример приложения гостевой книге. Дискуссия показала загрузку, Zend_Application, таблиц БД, Доступ к базам данных, формы, Фильтрация, ACL, Пользователи и т.д., и т.д. В основном, охватывающих все темы, которые вы бы требовать, чтобы получить основной сайт до работает все время давая вам инструменты для пойти и получить более продвинутыми в рамках (хотя это количество на "Смотрите сайт" большую часть времени).

Время задается в коде какие-то примеры, а также разработать "гостевая книга" и применение простых "вики". Лично я чувствовал, что предоставление кода или каждое приложение, а затем просят нас развивать то, что, по сути копию рядом на самом деле не обеспечивают хороший опыт. Я бы предпочел, чтобы разработать приложение похожи, но не идентичны. для примера приложения с выгода от наличия руководство для обозначения. Кроме здания приложений с нуля, с демонстратора бы, возможно привело к больше вопросов о том, почему и каким образом, что дает более полное представление о рамках, в конце концов вы можете посмотреть специфику после окончания курса.

Последняя лекция состояла из работающих на вики приложения с помощью / руководством инструктора. После курса обратной связи было принято, было подчеркнуто несколько раз через курс, который берет Zend обратная связь очень серьезно, на самом деле по-видимому наша версия курса была совсем новой. Некоторые из других разработчиков в компании будет принимать конечно скоро так и будет интересно посмотреть, если это случилось.

Конечно стиль был неформальный, разрешенных к обратной связи и взаимодействия между участниками и инструктором. Руководитель курса был дружелюбен, доступным (адреса электронной почты были поделены на вопросы), и в то время своего выступления из слайдов была немного неуверенно, казалось полностью компетентны в рамках. Он явно кого-то, кто использовал рамках на регулярной основе, а не тот, кто учит учить, конечно, мне понравился опыт "реального мира" в этом отношении.

Общее ощущение

В некотором смысле я нашел конечно пустая трата времени, в других это было очень удобно. Надеюсь, я получу мои доводы по всему ясно, и, возможно, обеспечит определенную пищу для размышлений или полезную обратную связь (зная меня это вряд ли!).

Для меня этот курс был направлен на слишком низком уровне. Пройдя через Руководство по быстрому старту, читать Роба Аллена Zend Framework в действии, а также работал с рамками немногое, что я действительно не получить что-нибудь слишком много. I would of liked the course to pick up from the end of the quickstart and develop additional skills.

Тем не менее, название курса делает четко "Zend Framework: основы" и в этом смысле конечно достигает того, что он намеревается делать. Другие члены команды разработчиков, которые не потратили время на поиски в рамках каждой сессии закончил с энтузиазмом и задаваемых вопросов, который был действительно приятно видеть.

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%. Кроме того, было время, что я получил, чтобы сесть с каждым днем ​​и думать о кодировании с использованием рамок и будущих проектов, то я бы не стал из смогли сделать в противном случае (вы можете себе представить Вашу компанию согласились, что:)). Не в последнюю очередь вы также получите хороший сертификат Zend сказать, что вы приняли участие в курсе (хотя и по электронной почте).

Zend Framework сертификации

Это был один вопрос, который все приходили на ум во время курса, не правда ли подготовить меня к сертификации? Быстро, легко это громкое нет. 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.

Резюме

Учитывая все, что я уже писал выше, я буду суммировать все, что в два простых пунктов маркированного списка:

  • Новое в Zend Framework: Этот курс делает именно то, что Вы ожидали бы, это дает вам хорошее введение в структуру и хорошую подготовку по основам, из которых можно строить. Конечно, кажется, вызвать интерес и энтузиазм в рамках среди разработчиков.
  • Используется в Zend Framework: В то время это было приятно, чтобы укрепить некоторые из самых основ, я чувствовал, времени, усилий и средств, чтобы взять курс может из было лучше потратить в другом месте. Это будет приятно СЭЭУ Zend создать новый, более высокий уровень курса принять разработчикам следующего уровня -. По крайней мере, стандарт сертификации и за ее пределами Для этого я подписался бы немедленно.












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

6 посетителей онлайн
5 гостей, 1 ботов, 0 пользователей
Максимум сегодня: 11 в 2:07 утра UTC
В этом месяце: 47 на 03-10-2011 2:47 вечера UTC
В этом году: 130 в 28-03-2011 10:40 вечера UTC
За все время: 130 в 28-03-2011 10:40 вечера UTC