Архив автора: Dimitry

Zend Framework & Linux: шелл-скрипт для автоматического обновления

Задача: автоматизировать процесс обновления Zend Framework для всех приложений на сервере.

Решение:

  1. Создаем папку типа /var/www/libraries/ZF-last-stable/, которую и будем указывать для всех приложений в /public/index.php
  2. Создаем файл update_ZF_1.x.sh с таким содержимым:
    #!/bin/bash
    echo "Downloading new stable ZF";
    zendname="ZendFramework-1.11.1";
    wget "http://framework.zend.com/releases/$zendname/$zendname-minimal.tar.gz";
    echo "Unpacking"
    tar -xvzf "$zendname-minimal.tar.gz";
    echo "Deleting original directroy!";
    rm -r ZF-last-stable;
    mv "$zendname-minimal" "ZF-last-stable";
    exit
    
  3. Вызываем скрипт sh /var/www/libraries/update_ZF_1.x.sh

Что мы натворили: в переменной zendname мы указываем нужную версию. Архив с этой версией скачивается, распаковывается, удаляется папка zf-last-stable,  папку с разархивированным ZF переименовываем в zf-last-stable.

Получилось, правда, полуавтоматическое обновление, новую версию всё-равно придется указывать вручную. Из вариантов совсем автоматических можно использовать svn export «uri SVN репозитария с последней стабильной версией», но тогда будет неверно работать Zend_Version.

Zend Framework: идеальное веб-приложение (ч. 2 из 2)

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

В прошлой части мы:

  1. Создали структуру БД
  2. С помощью ZF Tool создали файловую структуру приложения (основной костяк, добавили модуль с рядом действий, моделей и форм, экспортировали таблицы из БД в классы приложения)
  3. Прошлись по основным паттернам

Читать далее

Zend Server + Mac OS x + mysql: "ERROR! Manager of pid-file quit without updating file."

На решение проблемы потратил больше часа, поэтому выкладываю решение.

Проблема: после установки Zend Server на Mac Snow Leopard при запуске mysql вылезает ошибка

 ERROR! Manager of pid-file quit without updating file.

Скорей всего, на компьютере уже когда-то был установлен и удален mysql, поэтому вылезает ошибка.

Решение:

sudo /usr/local/zend/bin/uninstall.sh

и повторная установка пакета.

Объяснение: очевидно, стандартное удаление пакета толком не работает, поэтому используем специальный скрипт, который, кстати, нигде не упомянут в официальном мануале.

UP. Смотрите комментарии: Alex рассказывает современное (июль 2011) решение проблемы.

Flex: Тотальный контроль над загружаемым swf-клипом во Flex-приложении

Задачи:

  1. В Flex-приложении динамически подгрузить swf-анимацию и flv-видео (то есть разнотипный медиа-контент)
  2. Запускать воспроизведение медиа-контента по нажатию кнопки в приложении
  3. Проигрывать анимацию один раз

Читать далее

Zend Framework: идеальное веб-приложение (ч. 1 из 2)

Часть вторая

Задача: написать веб-приложение с помощью Zend Framework 1.10.x, которое идеально использовало бы возможности фреймворка для определенного функционала.

Лирическое отступление: конечно, по определению невозможно создать что-то идеальное, поскольку идеальное – это совокупность субъективных образов объективной реальности, а раз программистов много и у всех свои мнения по разным вопросам, то и договориться до идеального видиния веб-приложения не получится. Однако, ведь, всё-равно хочется сделать что-то по-настоящему хорошее и масимально близко к идеалу, правда?) И в действительности к стандартизации, идеализации кода приложений всё дело и идет. Яркий пример тому относительно недавно появившиеся тенденции к использованию паттернов и фреймворков.

Так к чему это всё? В n-ый раз перечитывая нередко меняющийся Zend Framework Quickstart, я заметил, что у них постепенно получается четкая и абсолютно прозрачная схема разработки веб-приложения. Для каждого случая, будь-то работа с формами или выемка данных из БД, есть свой паттерн, общепринятое решение (ну ладно, не всеобщее, а принятое умными дядьками из Zend). Значит, теоретически вполне возможно привести культуру написания кода к такому уровню, что программисты будут писать одинаковый, абсолютно правильный и понятный каждому код, свободный от уязвимостей и ошибок. Увидев постановку задачи, два абсолютно разных программиста в уме уже разметят будущую архитектуру веб-приложения, наборы классов и интерфейсов, и эти архитектуры будут абсолютно идентичны. Вроде Java Beans именно для этого и придумали, да? Для мира php я пока такого не встречал.

Скажете, это будет слишком грустно и неинтересно? Достигнув определенного уровня знания, программирование превратиться в рутину, однообразное складывание одних и тех же кирпичиков, в банальное ремесло? Как знать! Из простых каменных блоков строят и пирамиды в Египте, и великие китайские стены. В конце концов, важнее всего качественный и надежный результат. Впрочем, хватит лирики.)

Что же будет в этой статье? В ней приводится пример веб-приложения, в котором я попробую максимально верно использовать ZF и небольшой набор паттернов для решения простых и рутинных проблем, типа выемки данных из БД, запихивания их в формы, отображения списков и прочее. Конечно, это только моё видиние решения, и чувствуется, что некоторые паттерны я использую не совсем так, и вообще, логика обработки запросов должна быть не в том маппере, а вот в той модели и пр. пр. пр…)

Что будет в приложении:

  • Формы добавления и редактирования записей о научных статья, в том числе с возможностью загрузки статей в различных форматах;
  • Страница со списком всех размещенных статей.

Что будет «под капотом»:

  • Модели и мапперы для основных сущностей (статей и авторов);
  • Отдельные классы-шлюзы для работы с таблицами в БД;
  • Связка классов-шлюзов для выполнения агрегирующих запросов (в случае связей один-ко-многим, многие-ко-многим).

Ну поехали.)

Читать далее

Zend Framework: включение профайлера для FirePHP

Задача: включить профилирование всех запросов к БД.

Решение: в основном файле загрузчика приложения (типа «/application/Bootstrap.php»)  добавить следующий код:

    /**
     * FirePHP profiler enable
     */
    protected function _initProfiler() {
    	$this->bootstrap('db');
        $db = $this->getPluginResource('db');
    	$profiler = new Zend_Db_Profiler_Firebug('All DB Queries');
		$profiler->setEnabled(true);
		$db->getDbAdapter()->setProfiler($profiler);
    }

Up!

В комментариях Roman подсказал еще более удобный способ включения профайлера через конфигурационный файл («/application/configs/application.ini»):

resources.db.params.profiler.enabled = "true"
resources.db.params.profiler.class = "Zend_Db_Profiler_Firebug"

Ссылки по теме

  • FirePHP — дополнение к FireBug, которое позволяет писать в консоль FireBug.

PS: по секрету скажу, что скоро будет добрая статья про один из самых удобнейших способов работы с БД с помощью Zend_Db. Приглашенные звезды: паттерны data mapper и model, класс Zend_Form. Мы разберемся, как делать запросы типа $row->getAuthorsByPaper()  в действительном отсутствии такого метода!)

Мой диплом о разработке и вводе в эксплуатацию веб-приложения

Буквально месяц назад в славном Московском Техническом Университете Связи и Информатики я защищал диплом «Разработка и ввод в эксплуатацию веб-приложения „Сурдосервер“».

Веб-приложение я начинал разрабатывать еще с августа 2009 года в рамках своей работы в лаборатории вместе со своими коллегами, за мной была инженерная часть и проектирование взаимодействия. Самые интересные моменты в плане разработки я апериодически выкладывал в этом блоге. Настала пора опубликовать и сам диплом. Самим приложением можно воспользоваться на сайте http://surdoserver.ru/.

Самые нетерпеливые могут сразу перейти к разделу со ссылками для скачивания всего этого добра.

О дипломе

Что внутри: в дипломе описан весь цикл разработки современного веб-приложения. Что он включает в себя:

  1. Исследование вопроса;
  2. Определение целей, достигать которые поможет веб-приложение;
  3. Экономический расчет;
  4. Проектирование пользовательского взаимодействия (проектирование интерфейса);
  5. Проектирование БД;
  6. Проектирование программной архитектуры;
  7. Разработка;
  8. Тестирование (в том числе нагрузочное тестирование);
  9. Ввод в эксплуатацию.

В этом дипломе в силу правил составления, расчет экономического эффекта (или т.н. технико-экономического обоснования) находится практически в самом конце, и, откровенно говоря, советую особо не вчитываться в полученные цифры, т.к. сделаны довольно… оптимистичные прогнозы =). Также отсутствует описание процесса тестирования кода, однако есть нагрузочное тестирование.

Что использовалось при разработке и какие результаты:

  • Создано полноценное приложение, которое содержит в себе свыше 400 страниц программного кода;
  • Использовались технологий: PHP, Zend Framework, JavaScript, HTML, Adobe Flex, ActionScript 3;
  • Приобретен и настроен «с нуля» удаленный сервер на основе «облачных» вычислений для обеспечения бесперебойной работы приложения в сети Интернет;
  • Приложение размещено на сервере, получены первые положительные отзывы пользователей на форуме глухих, в социальной группе глухих в сети «вКонтакте», а также посредством встроенной системы обратной связи;
  • В период с 1 февраля по 1 июня 2010 года сайт посетило более 4 100 уникальных пользователей, которые совершили более 88 000 переходов по сайту.

Содержание дипломной работы

  • ВВЕДЕНИЕ
  • Глава 1 Проектирование приложения
    • 1.1 Исследование предметной области
      • 1.1.1  Язык жестов
      • 1.1.2  Современные методы обучения языку жестов
      • 1.1.3  Актуальность проблемы интерактивного веб-приложения для изучения русского языка жестов
    • 1.2   Назначение и основные возможности проектируемого приложения
    • 1.3   Общая архитектура приложения
    • 1.4  Проектирование серверной части
    • 1.5    Проектирование базы данных
      • 1.5.1  Системный анализ предметной области
      • 1.5.2  Инфологическое проектирование
      • 1.5.3  Даталогическое проектирование
      • 1.5.4  Физическое проектирование
    • 1.6  Проектирование клиентской части
  • Глава 2 Технологическая платформа приложения
    • 2.1  Требования к серверной части приложения
      • 2.1.1  Операционная система
        • 2.1.1.1  Обзор современных сетевых ОС
        • 2.1.1.2  Выбор ОС в соответствии с предъявленными требованиями
      • 2.1.2  Система управления базами данных
        • 2.1.2.1 Обзор современных СУБД
        • 2.1.2.2 Выбор СУБД в соответствии с предъявленными   требованиями
      • 2.1.3  Языки программирования
      • 2.1.4  Веб-сервер
        • 2.1.4.1  Обзор современных веб-серверов
        • 2.1.4.2 Выбор веб-сервера в соответствии с предъявленными  требованиями
    • 2.2  Требования к клиентской части приложения
  • Глава 3 Техническая платформа
    • 3.1 Серверное аппаратное оснащение
    • 3.2 Клиентское аппаратное оснащение
  • Глава 4 Описание разработанных компонентов
    • 4.1  Архитектура приложения
      • 4.1.1  Теория
      • 4.1.2  Используемая архитектура
      • 4.1.3  Файловая структура
    • 4.2  Разработанные модули
      • 4.2.1  Сурдо
      • 4.2.2  Дактильная азбука
      • 4.2.3  Страницы
      • 4.2.4  Обратная связь
      • 4.2.5  Поиск
      • 4.2.6  Административная панель
  • Глава 5 Введение приложения в эксплуатацию
    • 5.1  Размещение в сети Интернет
      • 5.1.1 Обзор и выбор способов размещения приложения в сети Интернет
      • 5.1.2  Настройка серверов, подключение доменов
      • 5.2.2  Размещение приложения
      • 5.1.4  Настройка резервного копирования
    • 5.2  Нагрузочное тестирование
      • 5.2.1  Методология тестирования
      • 5.2.2  Результаты тестирования
        • 5.2.1.1  Loadimpact.com
        • 5.2.2.2  Apache JMeter
  • Глава 6 Разработка вопросов по экологии и безопасности жизнедеятельности
    • 6.1  Характеристика условий труда программиста
    • 6.2 Анализ опасных вредных факторов и возможных чрезвычайных ситуаций, возникающих во время работы программиста
      • 6.2.1  Уровень шума на рабочем месте
      • 6.2.2  Электромагнитное и ионизирующее излучения
      • 6.2.3  Статические нагрузки и монотонность труда
      • 6.2.4  Недостаточная освещенность
    • 6.3  Разработка мер безопасности
      • 6.3.1  Снижение уровня шума
        • 6.3.1.1  Теория
        • 6.3.1.1  Расчетная часть
      • 6.3.2  Приобретение оборудования, отвечающего стандартам  безопасности
      • 6.3.3  Устранение статических нагрузок и монотонности труда
      • 6.3.4  Расчет освещенности рабочего места программиста
    • 6.4  Выводы
  • Глава 7 Технико-экономического обоснование проекта
    • 7.1  Постановка задачи
    • 7.2  Стоимость разработки приложения
      • 7.2.1  Определение реальных сроков и количества участников разработки и внедрения приложения
      • 7.2.2  Расчет заработной платы персонала
      • 7.2.3  Расчет затрат на приобретение необходимых аппаратных и программных средств для разработки приложения
      • 7.2.4  Расчет затрат на размещение сайта в сети Интернет
      • 7.2.5 Расчет всех затрат
    • 7.3  Оценка эффективности от внедрения приложения
      • 7.3.1  Косвенная экономия средств
      • 7.3.2  Доход от работы сервиса
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ЛИТЕРАТУРЫ
  • Приложение А Программные листинги
  • Приложение Б Графические интерфейсы

Плакаты:

Сам диплом в pdf-формате.

При желании в качестве благодарности вы можете купить дипломную работу здесь.