#11, Март'2005 :: frameworks

52
11 Март '05 Zend Platform: подробности Где моя CVS, чувак? Frameworks... 2005 Четвертая международная конференция, г. Киев «Современные технологии эффективной разработки веб-приложений с использованием PHP» издается с февраля 2004 года, www.phpinside.ru

Upload: vital-b

Post on 17-Mar-2016

231 views

Category:

Documents


3 download

DESCRIPTION

Каркасы, каркасы, каркасы Freeform Framework - первые шаги Языки описания пользовательских интерфейсов Где моя CVS, чувак? Zend Platform: Подробности Интервью с Денисом Колисниченко - автором книг по PHP и Linux

TRANSCRIPT

Page 1: #11, Март'2005 :: Frameworks

No 11Март 05

Zend Platform подробностиГде моя CVS чувак

Frameworks

2005Четвертая международная конференция г Киев

laquoСовременные технологии эффективной разработкивеб-приложений с использованием PHPraquo

издается с февраля 2004 года wwwphpinsideru

PHP Inside 11

СодержаниеВ фокусе Каркасы каркасы каркасы5 Знакомство с Freeform Framework 11 Freeform Framework ndash первые шаги 17Идеи Языки описания пользовательских интерфейсов21 Где моя CVS чувак36 Zend Platform Подробности 44Люди Наши Денис Колисниченко ndash автор книг по PHP и Linux 48План врезок 52

Анонс Конференция в Киеве

PHPClub (httpphpclubru) совместно c компанией Миротел(httpmirotelnet) и редакцией журнала laquoPHP Insideraquo(httpwwwphpinsideru) проводят 4-ю международную конферен-цию laquoСовременные технологии эффективной разработки веб-приложений с использованием PHPraquo

Киев Украина 12-13 мая 2005 г

httpwwwphpconfru2005

Конференция проводимая под эгидой PHP-Клуба в последниедва года является уникальным мероприятием собирающим со всегопостсоветского пространства ведущих веб-программистов PHP-эн-тузиастов и других талантливых программистов чья профессио-нальная деятельность в той или иной степени связана с веб-техноло-гиями

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

Место проведения - Киев величественная красота его золотыхкуполов раскинутых на правом берегу Днепра цветущие каштаныкоторые каждую весну превращают город в сказочное королевствоПриглашаем вас своими глазами увидеть достойный удивления ивосхищения неповторимый облик Киева

2

Команда номера

Авторы и переводчикиДенис БаженовДенис ПопельАндрей ОлищукДмитрий ШейкоДанил Миронов

Редакционная коллегияАлександр СмирновАлександр ВойцеховскийАндрей Олищук [nw]Антон ЧаплыгинДмитрий ПоповЕлена Тесля

Выпуск номераАндрей Олищук [nw]Антон Чаплыгин Денис ЗеньковичАлексей Волков

Контактные данные httpphpinsideru nwphpinsideru

PHP Inside 11

Тематика конференции включает следующиенаправленияbull XML Sapiens как универсальная концепция сайтостроения в раз-

резе XMLPHP

bull Две стороны документирования - PHPdocumentor и DocBook

bull Поддержка нескольких СУБД в проекте

bull Свой проект свободно распространяемого Программного Обеспе-чения

bull Вебсервисы на примере Xforms

bull Разработка современной CMS

bull Оптимизация PostgreSQL

bull MySQL индексы и оптимизация

bull Влияние тестирования на дизайн PHP кода (TDD в PHP)

bull Платежные системы - это не страшно (мастер-класс)

bull XML в PHP5

С подробной программой конференции можно познакомитьсяпо адресу httpphpconfruindexphpm=4

Труды конференции будут опубликованы в виде полных тек-стов принятых статей в специальном номере журнала PHPInside(httpphpinsideru)

Время и место проведения PHP конференции12-13 мая 2005 г КиевЭкспоПлаза павильон 2 зал 1 мет-

ро Нивки

Стоимость регистрационного взноса 560 грн (3000 руб) В стоимость регистрационного взноса

входит

bull Возможность участия во всех мероприятиях конференции (2 дня)

bull Получение раздаточных материалов

bull Кофе-брейки и обеды

bull Участие в лотерее участников конференции

PS Участие докладчиков в конференции - бесплатно (+ не-большой бонус)

Внимание Скидки для групп от 3-х участников - с одногочлена группы 500грн (2600руб)

Контактные данные

Оргкомитет конференции httpwwwphpconfru

E-mail 2005phpconfru

3

PHP Inside 11

Телефон +380 44 494 03 50

Факс +380 44 494 03 51

Председатель оргкомитета

Андрей Зинченко+380 67 440 49 41

2005phpconfru

Информационный партнер в Москве

Александр Смирнов

phpclubramblerru

7-095-783-2659

PHP Inside 11 Каркасы каркасы каркасыhellip

В фокусеКаркасы каркасы каркасыhellip

В девятом выпуске PHPInside была размещена моя статьяlaquoТеория разработки Framework системraquo После ее публикации в фо-руме phpclubrsquoа прошло маленькое обсуждение Направление этогообсуждения привело меня к пониманию того что некоторые мо-менты требуют пояснения (хочу поблагодарить критиков за заме-чания и советы по доработке статьи) Так же я решил сделатьописание нескольких уже существующих framework ndash систем

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

От читателя данной статьи я ожидаю знаний понятия паттернакак такового а также знание архитектуры паттерна MVC в частно-сти Излагать этот материал я не вижу смысла так как все уже давнонаписано и выверено Любой желающий может найти достаточноматериала по данному вопросу

Описание существующих решенийphpMVC

Вообще phpMVC ndash это порт знаменитой laquoJakarta StrutsFrameworkraquo на PHP Java наверное довольно неплохая платформадля WEB-приложений Однако о phpMVC я подобного сказать немогу

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

То количество классов которые используется в системе пора-жает Реализация паттернов слишком запутанная Разобраться в та-кой канонаде классов будет непросто особенно человеку не профес-сионалу который не знаком с понятием паттерна и основными реа-лизациями

Структурного контроля системы я не увидел Приложения ин-тегрируют код системы на этапе выполнения

Контроля ошибок выполнения тоже нет Исключительные си-туации генерируемые во время выполнения приложения ndash обраба-тываются стандартным обработчиком ошибок

5

Автор Денис Баженов

PHP Inside 11 Каркасы каркасы каркасыhellip

Стандартные (тестовые) приложения которые поставляются ссистемой (и по сути являются ее визитной карточкой) реализованыявно не в рамках паттерна MVC Разделения бизнес-логики и пред-ставления я не увидел PHP-код идет вставками в шаблонах При-дется искать верстальщика со знанием PHP или постоянно отвле-кать программиста иначе есть риск того что верстальщик испортиткод приложения В системе присутствует популярный шаблониза-тор Smarty25 что наталкивает на мысль о том что какое-то разде-ление все-таки существует однако примеров его использования илиописания как использовать я не нашел Наверное все делается черезбанальный laquoincluderaquo а далее документация по Smarty в руки ивперед

Поддержка БД реализована в виде драйверов к механизмамабстракции PEARDB и ADODb Никакой унификации интерфей-сов для этих двух пакетов я не увидел Поэтому смысла в этихдрайверах тоже не вижу С таким же успехом можно использоватьPEAR или ADO напрямую

Исходный код отлично документирован так что необходимуюинформацию все же найти можно Но отсутствие структурной доку-ментации все же затрудняет этот процесс

Ну и наконец время генерирования пустой страницы Из всехпредставленных frameworkrsquoов у phpMVC самый низкий результат0191-0209 секунды Не тяжело понять что один поток сервера намоем компьютере более четырех-пяти страниц за секунду не обра-ботает Даже для моей пусть не серверной платформы (AMD25GHz512MB RAM) это довольно низкий результат

В общем у меня осталось довольное серое впечатление обэтом frameworkrsquoе

LIMB (WACT based)Этот пакет разрабатывается нашими соотечественниками В

качестве базиса используется другой framework WACT Этоединственный известный мне случай когда на основе одногоframeworkrsquoа строят другой судя по названию совсем отличный отбазового

На самом деле ребята взялись лишь за высокоуровневые ин-терфейсы приложения Интерфейс БД и шаблонизатор были взятыиз WACTrsquoа

Система обладает довольно интересной и что на мой взгляднемаловажно оптимальной архитектурой Я советую изучить ееперед тем как браться за что-то свое Несмотря на относительнуюсложность структуры (которая в принципе схожа с phpMVC) онадовольно прозрачна и вполне достойна быть ориентиром для лю-дей которые испытывают сложности в проектировании Разобрать-ся в laquoпотрохахraquo limbrsquoа не доставит вам больших трудностей А еслидоставит то всегда можно обратиться к разработчикам которые лю-безно отвечали на вопросы во время моей работы с этим пакетомНадо заметить что вопросов было немного

6

Тем временем

В MySQL существует функцияSUBSTRING_INDEX(strdelimcount)которая возвращает часть строки strсостоящую из count количестваподстрок разделенныхделимитерами delim

Пример использования mysqlgtSELECT SUBSTRING_INDEX(wwwmysqlcom 2)-gt wwwmysql

Информацию по другим строковымфункциям MySQL можно найти поадресуhttpdevmysqlcomdocmysqlrustring-functionshtml

PHP Inside 11 Каркасы каркасы каркасыhellip

WACT обладает неплохим интерфейсом работы с базами дан-ных Вы можете работать c ADODb с PEARDB либо через классыпрямого доступа к БД В отличие от phpMVC интерфейс абстраги-рован и вам не понадобиться менять код приложений при сменесервера баз данных или смене интерфейса

Шаблонный движок WACTrsquoа тоже достоин рассмотренияШаблоны похожи на XML-документы и частично реализуют идеюASPNET Однако сносной документации по движку мне найти неудалось как в принципе и по системе в целом Разработчики утвер-ждают что скоро будет выпущена структурная документация нарусском языке В целом шаблонный движок показался мне немногосложным Разработчики сделали отображение более приоритетнымДанные достаются отображением из модели Это усиливает нагруз-ку на верстальщика который в принципе и не должен знать что та-кое модель или паттерн На мой взгляд идеальным является случайкогда верстальщик и программист принимают соглашение обименовании переменных программист заполняет их а верстальщиких выводит в нужном месте

Никакого контроля ошибок времени выполнения к сожале-нию опять таки нет

На мой взгляд очень неплохая платформа для реализациисвоих приложений Было бы идеально присутствие в системе XSLTшаблонизатора но такого в ближайшее время не предвидится

Framework-системы Путь к величию илисамообманFramework система ndash это laquoважнейшая часть интеллектуальнойсобственности и даже корпоративной культуры компаниизанимающейся web-разработками всерьезraquo(httpphpclubrutalkshowthreadphpthreadid=62146 ndash Авторmariroz)

Frameworkhellip Когда я слышу это слово меня переполняет це-лая масса эмоций Что такое framework Это вопрос на которыйеще не было дано должного и исчерпывающего ответа Мою пози-цию подтверждает окружающая действительность Ведь куда не по-смотришь везде frameworkrsquoи а остановить свой взгляд на чем-токонкретном и не получается Есть отличная литература в которойрассматривается архитектура подобных систем но четких ответовна интересующие вопросы нет Каждый волен думать и поступатьтак как ему хочется

Мне же кажется что обсуждение систем подобного плананадо вести в другом ракурсе В форуме мне не раз указали на такиевещи как programming pattern и прочее Да это все хорошо И впринципе без этого теперь немыслима ни одна каркасная системаНо мы с вами говорим не о том Рассмотрение таких фундаменталь-ных вещей как MVC singleton ORM которые находят прямое при-менение во frameworkrsquoах - это тема как минимум для одной книгии нельзя сказать что маленькой Да и надо ли этим заниматься

7

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 2: #11, Март'2005 :: Frameworks

PHP Inside 11

СодержаниеВ фокусе Каркасы каркасы каркасы5 Знакомство с Freeform Framework 11 Freeform Framework ndash первые шаги 17Идеи Языки описания пользовательских интерфейсов21 Где моя CVS чувак36 Zend Platform Подробности 44Люди Наши Денис Колисниченко ndash автор книг по PHP и Linux 48План врезок 52

Анонс Конференция в Киеве

PHPClub (httpphpclubru) совместно c компанией Миротел(httpmirotelnet) и редакцией журнала laquoPHP Insideraquo(httpwwwphpinsideru) проводят 4-ю международную конферен-цию laquoСовременные технологии эффективной разработки веб-приложений с использованием PHPraquo

Киев Украина 12-13 мая 2005 г

httpwwwphpconfru2005

Конференция проводимая под эгидой PHP-Клуба в последниедва года является уникальным мероприятием собирающим со всегопостсоветского пространства ведущих веб-программистов PHP-эн-тузиастов и других талантливых программистов чья профессио-нальная деятельность в той или иной степени связана с веб-техноло-гиями

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

Место проведения - Киев величественная красота его золотыхкуполов раскинутых на правом берегу Днепра цветущие каштаныкоторые каждую весну превращают город в сказочное королевствоПриглашаем вас своими глазами увидеть достойный удивления ивосхищения неповторимый облик Киева

2

Команда номера

Авторы и переводчикиДенис БаженовДенис ПопельАндрей ОлищукДмитрий ШейкоДанил Миронов

Редакционная коллегияАлександр СмирновАлександр ВойцеховскийАндрей Олищук [nw]Антон ЧаплыгинДмитрий ПоповЕлена Тесля

Выпуск номераАндрей Олищук [nw]Антон Чаплыгин Денис ЗеньковичАлексей Волков

Контактные данные httpphpinsideru nwphpinsideru

PHP Inside 11

Тематика конференции включает следующиенаправленияbull XML Sapiens как универсальная концепция сайтостроения в раз-

резе XMLPHP

bull Две стороны документирования - PHPdocumentor и DocBook

bull Поддержка нескольких СУБД в проекте

bull Свой проект свободно распространяемого Программного Обеспе-чения

bull Вебсервисы на примере Xforms

bull Разработка современной CMS

bull Оптимизация PostgreSQL

bull MySQL индексы и оптимизация

bull Влияние тестирования на дизайн PHP кода (TDD в PHP)

bull Платежные системы - это не страшно (мастер-класс)

bull XML в PHP5

С подробной программой конференции можно познакомитьсяпо адресу httpphpconfruindexphpm=4

Труды конференции будут опубликованы в виде полных тек-стов принятых статей в специальном номере журнала PHPInside(httpphpinsideru)

Время и место проведения PHP конференции12-13 мая 2005 г КиевЭкспоПлаза павильон 2 зал 1 мет-

ро Нивки

Стоимость регистрационного взноса 560 грн (3000 руб) В стоимость регистрационного взноса

входит

bull Возможность участия во всех мероприятиях конференции (2 дня)

bull Получение раздаточных материалов

bull Кофе-брейки и обеды

bull Участие в лотерее участников конференции

PS Участие докладчиков в конференции - бесплатно (+ не-большой бонус)

Внимание Скидки для групп от 3-х участников - с одногочлена группы 500грн (2600руб)

Контактные данные

Оргкомитет конференции httpwwwphpconfru

E-mail 2005phpconfru

3

PHP Inside 11

Телефон +380 44 494 03 50

Факс +380 44 494 03 51

Председатель оргкомитета

Андрей Зинченко+380 67 440 49 41

2005phpconfru

Информационный партнер в Москве

Александр Смирнов

phpclubramblerru

7-095-783-2659

PHP Inside 11 Каркасы каркасы каркасыhellip

В фокусеКаркасы каркасы каркасыhellip

В девятом выпуске PHPInside была размещена моя статьяlaquoТеория разработки Framework системraquo После ее публикации в фо-руме phpclubrsquoа прошло маленькое обсуждение Направление этогообсуждения привело меня к пониманию того что некоторые мо-менты требуют пояснения (хочу поблагодарить критиков за заме-чания и советы по доработке статьи) Так же я решил сделатьописание нескольких уже существующих framework ndash систем

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

От читателя данной статьи я ожидаю знаний понятия паттернакак такового а также знание архитектуры паттерна MVC в частно-сти Излагать этот материал я не вижу смысла так как все уже давнонаписано и выверено Любой желающий может найти достаточноматериала по данному вопросу

Описание существующих решенийphpMVC

Вообще phpMVC ndash это порт знаменитой laquoJakarta StrutsFrameworkraquo на PHP Java наверное довольно неплохая платформадля WEB-приложений Однако о phpMVC я подобного сказать немогу

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

То количество классов которые используется в системе пора-жает Реализация паттернов слишком запутанная Разобраться в та-кой канонаде классов будет непросто особенно человеку не профес-сионалу который не знаком с понятием паттерна и основными реа-лизациями

Структурного контроля системы я не увидел Приложения ин-тегрируют код системы на этапе выполнения

Контроля ошибок выполнения тоже нет Исключительные си-туации генерируемые во время выполнения приложения ndash обраба-тываются стандартным обработчиком ошибок

5

Автор Денис Баженов

PHP Inside 11 Каркасы каркасы каркасыhellip

Стандартные (тестовые) приложения которые поставляются ссистемой (и по сути являются ее визитной карточкой) реализованыявно не в рамках паттерна MVC Разделения бизнес-логики и пред-ставления я не увидел PHP-код идет вставками в шаблонах При-дется искать верстальщика со знанием PHP или постоянно отвле-кать программиста иначе есть риск того что верстальщик испортиткод приложения В системе присутствует популярный шаблониза-тор Smarty25 что наталкивает на мысль о том что какое-то разде-ление все-таки существует однако примеров его использования илиописания как использовать я не нашел Наверное все делается черезбанальный laquoincluderaquo а далее документация по Smarty в руки ивперед

Поддержка БД реализована в виде драйверов к механизмамабстракции PEARDB и ADODb Никакой унификации интерфей-сов для этих двух пакетов я не увидел Поэтому смысла в этихдрайверах тоже не вижу С таким же успехом можно использоватьPEAR или ADO напрямую

Исходный код отлично документирован так что необходимуюинформацию все же найти можно Но отсутствие структурной доку-ментации все же затрудняет этот процесс

Ну и наконец время генерирования пустой страницы Из всехпредставленных frameworkrsquoов у phpMVC самый низкий результат0191-0209 секунды Не тяжело понять что один поток сервера намоем компьютере более четырех-пяти страниц за секунду не обра-ботает Даже для моей пусть не серверной платформы (AMD25GHz512MB RAM) это довольно низкий результат

В общем у меня осталось довольное серое впечатление обэтом frameworkrsquoе

LIMB (WACT based)Этот пакет разрабатывается нашими соотечественниками В

качестве базиса используется другой framework WACT Этоединственный известный мне случай когда на основе одногоframeworkrsquoа строят другой судя по названию совсем отличный отбазового

На самом деле ребята взялись лишь за высокоуровневые ин-терфейсы приложения Интерфейс БД и шаблонизатор были взятыиз WACTrsquoа

Система обладает довольно интересной и что на мой взгляднемаловажно оптимальной архитектурой Я советую изучить ееперед тем как браться за что-то свое Несмотря на относительнуюсложность структуры (которая в принципе схожа с phpMVC) онадовольно прозрачна и вполне достойна быть ориентиром для лю-дей которые испытывают сложности в проектировании Разобрать-ся в laquoпотрохахraquo limbrsquoа не доставит вам больших трудностей А еслидоставит то всегда можно обратиться к разработчикам которые лю-безно отвечали на вопросы во время моей работы с этим пакетомНадо заметить что вопросов было немного

6

Тем временем

В MySQL существует функцияSUBSTRING_INDEX(strdelimcount)которая возвращает часть строки strсостоящую из count количестваподстрок разделенныхделимитерами delim

Пример использования mysqlgtSELECT SUBSTRING_INDEX(wwwmysqlcom 2)-gt wwwmysql

Информацию по другим строковымфункциям MySQL можно найти поадресуhttpdevmysqlcomdocmysqlrustring-functionshtml

PHP Inside 11 Каркасы каркасы каркасыhellip

WACT обладает неплохим интерфейсом работы с базами дан-ных Вы можете работать c ADODb с PEARDB либо через классыпрямого доступа к БД В отличие от phpMVC интерфейс абстраги-рован и вам не понадобиться менять код приложений при сменесервера баз данных или смене интерфейса

Шаблонный движок WACTrsquoа тоже достоин рассмотренияШаблоны похожи на XML-документы и частично реализуют идеюASPNET Однако сносной документации по движку мне найти неудалось как в принципе и по системе в целом Разработчики утвер-ждают что скоро будет выпущена структурная документация нарусском языке В целом шаблонный движок показался мне немногосложным Разработчики сделали отображение более приоритетнымДанные достаются отображением из модели Это усиливает нагруз-ку на верстальщика который в принципе и не должен знать что та-кое модель или паттерн На мой взгляд идеальным является случайкогда верстальщик и программист принимают соглашение обименовании переменных программист заполняет их а верстальщиких выводит в нужном месте

Никакого контроля ошибок времени выполнения к сожале-нию опять таки нет

На мой взгляд очень неплохая платформа для реализациисвоих приложений Было бы идеально присутствие в системе XSLTшаблонизатора но такого в ближайшее время не предвидится

Framework-системы Путь к величию илисамообманFramework система ndash это laquoважнейшая часть интеллектуальнойсобственности и даже корпоративной культуры компаниизанимающейся web-разработками всерьезraquo(httpphpclubrutalkshowthreadphpthreadid=62146 ndash Авторmariroz)

Frameworkhellip Когда я слышу это слово меня переполняет це-лая масса эмоций Что такое framework Это вопрос на которыйеще не было дано должного и исчерпывающего ответа Мою пози-цию подтверждает окружающая действительность Ведь куда не по-смотришь везде frameworkrsquoи а остановить свой взгляд на чем-токонкретном и не получается Есть отличная литература в которойрассматривается архитектура подобных систем но четких ответовна интересующие вопросы нет Каждый волен думать и поступатьтак как ему хочется

Мне же кажется что обсуждение систем подобного плананадо вести в другом ракурсе В форуме мне не раз указали на такиевещи как programming pattern и прочее Да это все хорошо И впринципе без этого теперь немыслима ни одна каркасная системаНо мы с вами говорим не о том Рассмотрение таких фундаменталь-ных вещей как MVC singleton ORM которые находят прямое при-менение во frameworkrsquoах - это тема как минимум для одной книгии нельзя сказать что маленькой Да и надо ли этим заниматься

7

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 3: #11, Март'2005 :: Frameworks

PHP Inside 11

Тематика конференции включает следующиенаправленияbull XML Sapiens как универсальная концепция сайтостроения в раз-

резе XMLPHP

bull Две стороны документирования - PHPdocumentor и DocBook

bull Поддержка нескольких СУБД в проекте

bull Свой проект свободно распространяемого Программного Обеспе-чения

bull Вебсервисы на примере Xforms

bull Разработка современной CMS

bull Оптимизация PostgreSQL

bull MySQL индексы и оптимизация

bull Влияние тестирования на дизайн PHP кода (TDD в PHP)

bull Платежные системы - это не страшно (мастер-класс)

bull XML в PHP5

С подробной программой конференции можно познакомитьсяпо адресу httpphpconfruindexphpm=4

Труды конференции будут опубликованы в виде полных тек-стов принятых статей в специальном номере журнала PHPInside(httpphpinsideru)

Время и место проведения PHP конференции12-13 мая 2005 г КиевЭкспоПлаза павильон 2 зал 1 мет-

ро Нивки

Стоимость регистрационного взноса 560 грн (3000 руб) В стоимость регистрационного взноса

входит

bull Возможность участия во всех мероприятиях конференции (2 дня)

bull Получение раздаточных материалов

bull Кофе-брейки и обеды

bull Участие в лотерее участников конференции

PS Участие докладчиков в конференции - бесплатно (+ не-большой бонус)

Внимание Скидки для групп от 3-х участников - с одногочлена группы 500грн (2600руб)

Контактные данные

Оргкомитет конференции httpwwwphpconfru

E-mail 2005phpconfru

3

PHP Inside 11

Телефон +380 44 494 03 50

Факс +380 44 494 03 51

Председатель оргкомитета

Андрей Зинченко+380 67 440 49 41

2005phpconfru

Информационный партнер в Москве

Александр Смирнов

phpclubramblerru

7-095-783-2659

PHP Inside 11 Каркасы каркасы каркасыhellip

В фокусеКаркасы каркасы каркасыhellip

В девятом выпуске PHPInside была размещена моя статьяlaquoТеория разработки Framework системraquo После ее публикации в фо-руме phpclubrsquoа прошло маленькое обсуждение Направление этогообсуждения привело меня к пониманию того что некоторые мо-менты требуют пояснения (хочу поблагодарить критиков за заме-чания и советы по доработке статьи) Так же я решил сделатьописание нескольких уже существующих framework ndash систем

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

От читателя данной статьи я ожидаю знаний понятия паттернакак такового а также знание архитектуры паттерна MVC в частно-сти Излагать этот материал я не вижу смысла так как все уже давнонаписано и выверено Любой желающий может найти достаточноматериала по данному вопросу

Описание существующих решенийphpMVC

Вообще phpMVC ndash это порт знаменитой laquoJakarta StrutsFrameworkraquo на PHP Java наверное довольно неплохая платформадля WEB-приложений Однако о phpMVC я подобного сказать немогу

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

То количество классов которые используется в системе пора-жает Реализация паттернов слишком запутанная Разобраться в та-кой канонаде классов будет непросто особенно человеку не профес-сионалу который не знаком с понятием паттерна и основными реа-лизациями

Структурного контроля системы я не увидел Приложения ин-тегрируют код системы на этапе выполнения

Контроля ошибок выполнения тоже нет Исключительные си-туации генерируемые во время выполнения приложения ndash обраба-тываются стандартным обработчиком ошибок

5

Автор Денис Баженов

PHP Inside 11 Каркасы каркасы каркасыhellip

Стандартные (тестовые) приложения которые поставляются ссистемой (и по сути являются ее визитной карточкой) реализованыявно не в рамках паттерна MVC Разделения бизнес-логики и пред-ставления я не увидел PHP-код идет вставками в шаблонах При-дется искать верстальщика со знанием PHP или постоянно отвле-кать программиста иначе есть риск того что верстальщик испортиткод приложения В системе присутствует популярный шаблониза-тор Smarty25 что наталкивает на мысль о том что какое-то разде-ление все-таки существует однако примеров его использования илиописания как использовать я не нашел Наверное все делается черезбанальный laquoincluderaquo а далее документация по Smarty в руки ивперед

Поддержка БД реализована в виде драйверов к механизмамабстракции PEARDB и ADODb Никакой унификации интерфей-сов для этих двух пакетов я не увидел Поэтому смысла в этихдрайверах тоже не вижу С таким же успехом можно использоватьPEAR или ADO напрямую

Исходный код отлично документирован так что необходимуюинформацию все же найти можно Но отсутствие структурной доку-ментации все же затрудняет этот процесс

Ну и наконец время генерирования пустой страницы Из всехпредставленных frameworkrsquoов у phpMVC самый низкий результат0191-0209 секунды Не тяжело понять что один поток сервера намоем компьютере более четырех-пяти страниц за секунду не обра-ботает Даже для моей пусть не серверной платформы (AMD25GHz512MB RAM) это довольно низкий результат

В общем у меня осталось довольное серое впечатление обэтом frameworkrsquoе

LIMB (WACT based)Этот пакет разрабатывается нашими соотечественниками В

качестве базиса используется другой framework WACT Этоединственный известный мне случай когда на основе одногоframeworkrsquoа строят другой судя по названию совсем отличный отбазового

На самом деле ребята взялись лишь за высокоуровневые ин-терфейсы приложения Интерфейс БД и шаблонизатор были взятыиз WACTrsquoа

Система обладает довольно интересной и что на мой взгляднемаловажно оптимальной архитектурой Я советую изучить ееперед тем как браться за что-то свое Несмотря на относительнуюсложность структуры (которая в принципе схожа с phpMVC) онадовольно прозрачна и вполне достойна быть ориентиром для лю-дей которые испытывают сложности в проектировании Разобрать-ся в laquoпотрохахraquo limbrsquoа не доставит вам больших трудностей А еслидоставит то всегда можно обратиться к разработчикам которые лю-безно отвечали на вопросы во время моей работы с этим пакетомНадо заметить что вопросов было немного

6

Тем временем

В MySQL существует функцияSUBSTRING_INDEX(strdelimcount)которая возвращает часть строки strсостоящую из count количестваподстрок разделенныхделимитерами delim

Пример использования mysqlgtSELECT SUBSTRING_INDEX(wwwmysqlcom 2)-gt wwwmysql

Информацию по другим строковымфункциям MySQL можно найти поадресуhttpdevmysqlcomdocmysqlrustring-functionshtml

PHP Inside 11 Каркасы каркасы каркасыhellip

WACT обладает неплохим интерфейсом работы с базами дан-ных Вы можете работать c ADODb с PEARDB либо через классыпрямого доступа к БД В отличие от phpMVC интерфейс абстраги-рован и вам не понадобиться менять код приложений при сменесервера баз данных или смене интерфейса

Шаблонный движок WACTrsquoа тоже достоин рассмотренияШаблоны похожи на XML-документы и частично реализуют идеюASPNET Однако сносной документации по движку мне найти неудалось как в принципе и по системе в целом Разработчики утвер-ждают что скоро будет выпущена структурная документация нарусском языке В целом шаблонный движок показался мне немногосложным Разработчики сделали отображение более приоритетнымДанные достаются отображением из модели Это усиливает нагруз-ку на верстальщика который в принципе и не должен знать что та-кое модель или паттерн На мой взгляд идеальным является случайкогда верстальщик и программист принимают соглашение обименовании переменных программист заполняет их а верстальщиких выводит в нужном месте

Никакого контроля ошибок времени выполнения к сожале-нию опять таки нет

На мой взгляд очень неплохая платформа для реализациисвоих приложений Было бы идеально присутствие в системе XSLTшаблонизатора но такого в ближайшее время не предвидится

Framework-системы Путь к величию илисамообманFramework система ndash это laquoважнейшая часть интеллектуальнойсобственности и даже корпоративной культуры компаниизанимающейся web-разработками всерьезraquo(httpphpclubrutalkshowthreadphpthreadid=62146 ndash Авторmariroz)

Frameworkhellip Когда я слышу это слово меня переполняет це-лая масса эмоций Что такое framework Это вопрос на которыйеще не было дано должного и исчерпывающего ответа Мою пози-цию подтверждает окружающая действительность Ведь куда не по-смотришь везде frameworkrsquoи а остановить свой взгляд на чем-токонкретном и не получается Есть отличная литература в которойрассматривается архитектура подобных систем но четких ответовна интересующие вопросы нет Каждый волен думать и поступатьтак как ему хочется

Мне же кажется что обсуждение систем подобного плананадо вести в другом ракурсе В форуме мне не раз указали на такиевещи как programming pattern и прочее Да это все хорошо И впринципе без этого теперь немыслима ни одна каркасная системаНо мы с вами говорим не о том Рассмотрение таких фундаменталь-ных вещей как MVC singleton ORM которые находят прямое при-менение во frameworkrsquoах - это тема как минимум для одной книгии нельзя сказать что маленькой Да и надо ли этим заниматься

7

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 4: #11, Март'2005 :: Frameworks

PHP Inside 11

Телефон +380 44 494 03 50

Факс +380 44 494 03 51

Председатель оргкомитета

Андрей Зинченко+380 67 440 49 41

2005phpconfru

Информационный партнер в Москве

Александр Смирнов

phpclubramblerru

7-095-783-2659

PHP Inside 11 Каркасы каркасы каркасыhellip

В фокусеКаркасы каркасы каркасыhellip

В девятом выпуске PHPInside была размещена моя статьяlaquoТеория разработки Framework системraquo После ее публикации в фо-руме phpclubrsquoа прошло маленькое обсуждение Направление этогообсуждения привело меня к пониманию того что некоторые мо-менты требуют пояснения (хочу поблагодарить критиков за заме-чания и советы по доработке статьи) Так же я решил сделатьописание нескольких уже существующих framework ndash систем

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

От читателя данной статьи я ожидаю знаний понятия паттернакак такового а также знание архитектуры паттерна MVC в частно-сти Излагать этот материал я не вижу смысла так как все уже давнонаписано и выверено Любой желающий может найти достаточноматериала по данному вопросу

Описание существующих решенийphpMVC

Вообще phpMVC ndash это порт знаменитой laquoJakarta StrutsFrameworkraquo на PHP Java наверное довольно неплохая платформадля WEB-приложений Однако о phpMVC я подобного сказать немогу

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

То количество классов которые используется в системе пора-жает Реализация паттернов слишком запутанная Разобраться в та-кой канонаде классов будет непросто особенно человеку не профес-сионалу который не знаком с понятием паттерна и основными реа-лизациями

Структурного контроля системы я не увидел Приложения ин-тегрируют код системы на этапе выполнения

Контроля ошибок выполнения тоже нет Исключительные си-туации генерируемые во время выполнения приложения ndash обраба-тываются стандартным обработчиком ошибок

5

Автор Денис Баженов

PHP Inside 11 Каркасы каркасы каркасыhellip

Стандартные (тестовые) приложения которые поставляются ссистемой (и по сути являются ее визитной карточкой) реализованыявно не в рамках паттерна MVC Разделения бизнес-логики и пред-ставления я не увидел PHP-код идет вставками в шаблонах При-дется искать верстальщика со знанием PHP или постоянно отвле-кать программиста иначе есть риск того что верстальщик испортиткод приложения В системе присутствует популярный шаблониза-тор Smarty25 что наталкивает на мысль о том что какое-то разде-ление все-таки существует однако примеров его использования илиописания как использовать я не нашел Наверное все делается черезбанальный laquoincluderaquo а далее документация по Smarty в руки ивперед

Поддержка БД реализована в виде драйверов к механизмамабстракции PEARDB и ADODb Никакой унификации интерфей-сов для этих двух пакетов я не увидел Поэтому смысла в этихдрайверах тоже не вижу С таким же успехом можно использоватьPEAR или ADO напрямую

Исходный код отлично документирован так что необходимуюинформацию все же найти можно Но отсутствие структурной доку-ментации все же затрудняет этот процесс

Ну и наконец время генерирования пустой страницы Из всехпредставленных frameworkrsquoов у phpMVC самый низкий результат0191-0209 секунды Не тяжело понять что один поток сервера намоем компьютере более четырех-пяти страниц за секунду не обра-ботает Даже для моей пусть не серверной платформы (AMD25GHz512MB RAM) это довольно низкий результат

В общем у меня осталось довольное серое впечатление обэтом frameworkrsquoе

LIMB (WACT based)Этот пакет разрабатывается нашими соотечественниками В

качестве базиса используется другой framework WACT Этоединственный известный мне случай когда на основе одногоframeworkrsquoа строят другой судя по названию совсем отличный отбазового

На самом деле ребята взялись лишь за высокоуровневые ин-терфейсы приложения Интерфейс БД и шаблонизатор были взятыиз WACTrsquoа

Система обладает довольно интересной и что на мой взгляднемаловажно оптимальной архитектурой Я советую изучить ееперед тем как браться за что-то свое Несмотря на относительнуюсложность структуры (которая в принципе схожа с phpMVC) онадовольно прозрачна и вполне достойна быть ориентиром для лю-дей которые испытывают сложности в проектировании Разобрать-ся в laquoпотрохахraquo limbrsquoа не доставит вам больших трудностей А еслидоставит то всегда можно обратиться к разработчикам которые лю-безно отвечали на вопросы во время моей работы с этим пакетомНадо заметить что вопросов было немного

6

Тем временем

В MySQL существует функцияSUBSTRING_INDEX(strdelimcount)которая возвращает часть строки strсостоящую из count количестваподстрок разделенныхделимитерами delim

Пример использования mysqlgtSELECT SUBSTRING_INDEX(wwwmysqlcom 2)-gt wwwmysql

Информацию по другим строковымфункциям MySQL можно найти поадресуhttpdevmysqlcomdocmysqlrustring-functionshtml

PHP Inside 11 Каркасы каркасы каркасыhellip

WACT обладает неплохим интерфейсом работы с базами дан-ных Вы можете работать c ADODb с PEARDB либо через классыпрямого доступа к БД В отличие от phpMVC интерфейс абстраги-рован и вам не понадобиться менять код приложений при сменесервера баз данных или смене интерфейса

Шаблонный движок WACTrsquoа тоже достоин рассмотренияШаблоны похожи на XML-документы и частично реализуют идеюASPNET Однако сносной документации по движку мне найти неудалось как в принципе и по системе в целом Разработчики утвер-ждают что скоро будет выпущена структурная документация нарусском языке В целом шаблонный движок показался мне немногосложным Разработчики сделали отображение более приоритетнымДанные достаются отображением из модели Это усиливает нагруз-ку на верстальщика который в принципе и не должен знать что та-кое модель или паттерн На мой взгляд идеальным является случайкогда верстальщик и программист принимают соглашение обименовании переменных программист заполняет их а верстальщиких выводит в нужном месте

Никакого контроля ошибок времени выполнения к сожале-нию опять таки нет

На мой взгляд очень неплохая платформа для реализациисвоих приложений Было бы идеально присутствие в системе XSLTшаблонизатора но такого в ближайшее время не предвидится

Framework-системы Путь к величию илисамообманFramework система ndash это laquoважнейшая часть интеллектуальнойсобственности и даже корпоративной культуры компаниизанимающейся web-разработками всерьезraquo(httpphpclubrutalkshowthreadphpthreadid=62146 ndash Авторmariroz)

Frameworkhellip Когда я слышу это слово меня переполняет це-лая масса эмоций Что такое framework Это вопрос на которыйеще не было дано должного и исчерпывающего ответа Мою пози-цию подтверждает окружающая действительность Ведь куда не по-смотришь везде frameworkrsquoи а остановить свой взгляд на чем-токонкретном и не получается Есть отличная литература в которойрассматривается архитектура подобных систем но четких ответовна интересующие вопросы нет Каждый волен думать и поступатьтак как ему хочется

Мне же кажется что обсуждение систем подобного плананадо вести в другом ракурсе В форуме мне не раз указали на такиевещи как programming pattern и прочее Да это все хорошо И впринципе без этого теперь немыслима ни одна каркасная системаНо мы с вами говорим не о том Рассмотрение таких фундаменталь-ных вещей как MVC singleton ORM которые находят прямое при-менение во frameworkrsquoах - это тема как минимум для одной книгии нельзя сказать что маленькой Да и надо ли этим заниматься

7

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 5: #11, Март'2005 :: Frameworks

PHP Inside 11 Каркасы каркасы каркасыhellip

В фокусеКаркасы каркасы каркасыhellip

В девятом выпуске PHPInside была размещена моя статьяlaquoТеория разработки Framework системraquo После ее публикации в фо-руме phpclubrsquoа прошло маленькое обсуждение Направление этогообсуждения привело меня к пониманию того что некоторые мо-менты требуют пояснения (хочу поблагодарить критиков за заме-чания и советы по доработке статьи) Так же я решил сделатьописание нескольких уже существующих framework ndash систем

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

От читателя данной статьи я ожидаю знаний понятия паттернакак такового а также знание архитектуры паттерна MVC в частно-сти Излагать этот материал я не вижу смысла так как все уже давнонаписано и выверено Любой желающий может найти достаточноматериала по данному вопросу

Описание существующих решенийphpMVC

Вообще phpMVC ndash это порт знаменитой laquoJakarta StrutsFrameworkraquo на PHP Java наверное довольно неплохая платформадля WEB-приложений Однако о phpMVC я подобного сказать немогу

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

То количество классов которые используется в системе пора-жает Реализация паттернов слишком запутанная Разобраться в та-кой канонаде классов будет непросто особенно человеку не профес-сионалу который не знаком с понятием паттерна и основными реа-лизациями

Структурного контроля системы я не увидел Приложения ин-тегрируют код системы на этапе выполнения

Контроля ошибок выполнения тоже нет Исключительные си-туации генерируемые во время выполнения приложения ndash обраба-тываются стандартным обработчиком ошибок

5

Автор Денис Баженов

PHP Inside 11 Каркасы каркасы каркасыhellip

Стандартные (тестовые) приложения которые поставляются ссистемой (и по сути являются ее визитной карточкой) реализованыявно не в рамках паттерна MVC Разделения бизнес-логики и пред-ставления я не увидел PHP-код идет вставками в шаблонах При-дется искать верстальщика со знанием PHP или постоянно отвле-кать программиста иначе есть риск того что верстальщик испортиткод приложения В системе присутствует популярный шаблониза-тор Smarty25 что наталкивает на мысль о том что какое-то разде-ление все-таки существует однако примеров его использования илиописания как использовать я не нашел Наверное все делается черезбанальный laquoincluderaquo а далее документация по Smarty в руки ивперед

Поддержка БД реализована в виде драйверов к механизмамабстракции PEARDB и ADODb Никакой унификации интерфей-сов для этих двух пакетов я не увидел Поэтому смысла в этихдрайверах тоже не вижу С таким же успехом можно использоватьPEAR или ADO напрямую

Исходный код отлично документирован так что необходимуюинформацию все же найти можно Но отсутствие структурной доку-ментации все же затрудняет этот процесс

Ну и наконец время генерирования пустой страницы Из всехпредставленных frameworkrsquoов у phpMVC самый низкий результат0191-0209 секунды Не тяжело понять что один поток сервера намоем компьютере более четырех-пяти страниц за секунду не обра-ботает Даже для моей пусть не серверной платформы (AMD25GHz512MB RAM) это довольно низкий результат

В общем у меня осталось довольное серое впечатление обэтом frameworkrsquoе

LIMB (WACT based)Этот пакет разрабатывается нашими соотечественниками В

качестве базиса используется другой framework WACT Этоединственный известный мне случай когда на основе одногоframeworkrsquoа строят другой судя по названию совсем отличный отбазового

На самом деле ребята взялись лишь за высокоуровневые ин-терфейсы приложения Интерфейс БД и шаблонизатор были взятыиз WACTrsquoа

Система обладает довольно интересной и что на мой взгляднемаловажно оптимальной архитектурой Я советую изучить ееперед тем как браться за что-то свое Несмотря на относительнуюсложность структуры (которая в принципе схожа с phpMVC) онадовольно прозрачна и вполне достойна быть ориентиром для лю-дей которые испытывают сложности в проектировании Разобрать-ся в laquoпотрохахraquo limbrsquoа не доставит вам больших трудностей А еслидоставит то всегда можно обратиться к разработчикам которые лю-безно отвечали на вопросы во время моей работы с этим пакетомНадо заметить что вопросов было немного

6

Тем временем

В MySQL существует функцияSUBSTRING_INDEX(strdelimcount)которая возвращает часть строки strсостоящую из count количестваподстрок разделенныхделимитерами delim

Пример использования mysqlgtSELECT SUBSTRING_INDEX(wwwmysqlcom 2)-gt wwwmysql

Информацию по другим строковымфункциям MySQL можно найти поадресуhttpdevmysqlcomdocmysqlrustring-functionshtml

PHP Inside 11 Каркасы каркасы каркасыhellip

WACT обладает неплохим интерфейсом работы с базами дан-ных Вы можете работать c ADODb с PEARDB либо через классыпрямого доступа к БД В отличие от phpMVC интерфейс абстраги-рован и вам не понадобиться менять код приложений при сменесервера баз данных или смене интерфейса

Шаблонный движок WACTrsquoа тоже достоин рассмотренияШаблоны похожи на XML-документы и частично реализуют идеюASPNET Однако сносной документации по движку мне найти неудалось как в принципе и по системе в целом Разработчики утвер-ждают что скоро будет выпущена структурная документация нарусском языке В целом шаблонный движок показался мне немногосложным Разработчики сделали отображение более приоритетнымДанные достаются отображением из модели Это усиливает нагруз-ку на верстальщика который в принципе и не должен знать что та-кое модель или паттерн На мой взгляд идеальным является случайкогда верстальщик и программист принимают соглашение обименовании переменных программист заполняет их а верстальщиких выводит в нужном месте

Никакого контроля ошибок времени выполнения к сожале-нию опять таки нет

На мой взгляд очень неплохая платформа для реализациисвоих приложений Было бы идеально присутствие в системе XSLTшаблонизатора но такого в ближайшее время не предвидится

Framework-системы Путь к величию илисамообманFramework система ndash это laquoважнейшая часть интеллектуальнойсобственности и даже корпоративной культуры компаниизанимающейся web-разработками всерьезraquo(httpphpclubrutalkshowthreadphpthreadid=62146 ndash Авторmariroz)

Frameworkhellip Когда я слышу это слово меня переполняет це-лая масса эмоций Что такое framework Это вопрос на которыйеще не было дано должного и исчерпывающего ответа Мою пози-цию подтверждает окружающая действительность Ведь куда не по-смотришь везде frameworkrsquoи а остановить свой взгляд на чем-токонкретном и не получается Есть отличная литература в которойрассматривается архитектура подобных систем но четких ответовна интересующие вопросы нет Каждый волен думать и поступатьтак как ему хочется

Мне же кажется что обсуждение систем подобного плананадо вести в другом ракурсе В форуме мне не раз указали на такиевещи как programming pattern и прочее Да это все хорошо И впринципе без этого теперь немыслима ни одна каркасная системаНо мы с вами говорим не о том Рассмотрение таких фундаменталь-ных вещей как MVC singleton ORM которые находят прямое при-менение во frameworkrsquoах - это тема как минимум для одной книгии нельзя сказать что маленькой Да и надо ли этим заниматься

7

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 6: #11, Март'2005 :: Frameworks

PHP Inside 11 Каркасы каркасы каркасыhellip

Стандартные (тестовые) приложения которые поставляются ссистемой (и по сути являются ее визитной карточкой) реализованыявно не в рамках паттерна MVC Разделения бизнес-логики и пред-ставления я не увидел PHP-код идет вставками в шаблонах При-дется искать верстальщика со знанием PHP или постоянно отвле-кать программиста иначе есть риск того что верстальщик испортиткод приложения В системе присутствует популярный шаблониза-тор Smarty25 что наталкивает на мысль о том что какое-то разде-ление все-таки существует однако примеров его использования илиописания как использовать я не нашел Наверное все делается черезбанальный laquoincluderaquo а далее документация по Smarty в руки ивперед

Поддержка БД реализована в виде драйверов к механизмамабстракции PEARDB и ADODb Никакой унификации интерфей-сов для этих двух пакетов я не увидел Поэтому смысла в этихдрайверах тоже не вижу С таким же успехом можно использоватьPEAR или ADO напрямую

Исходный код отлично документирован так что необходимуюинформацию все же найти можно Но отсутствие структурной доку-ментации все же затрудняет этот процесс

Ну и наконец время генерирования пустой страницы Из всехпредставленных frameworkrsquoов у phpMVC самый низкий результат0191-0209 секунды Не тяжело понять что один поток сервера намоем компьютере более четырех-пяти страниц за секунду не обра-ботает Даже для моей пусть не серверной платформы (AMD25GHz512MB RAM) это довольно низкий результат

В общем у меня осталось довольное серое впечатление обэтом frameworkrsquoе

LIMB (WACT based)Этот пакет разрабатывается нашими соотечественниками В

качестве базиса используется другой framework WACT Этоединственный известный мне случай когда на основе одногоframeworkrsquoа строят другой судя по названию совсем отличный отбазового

На самом деле ребята взялись лишь за высокоуровневые ин-терфейсы приложения Интерфейс БД и шаблонизатор были взятыиз WACTrsquoа

Система обладает довольно интересной и что на мой взгляднемаловажно оптимальной архитектурой Я советую изучить ееперед тем как браться за что-то свое Несмотря на относительнуюсложность структуры (которая в принципе схожа с phpMVC) онадовольно прозрачна и вполне достойна быть ориентиром для лю-дей которые испытывают сложности в проектировании Разобрать-ся в laquoпотрохахraquo limbrsquoа не доставит вам больших трудностей А еслидоставит то всегда можно обратиться к разработчикам которые лю-безно отвечали на вопросы во время моей работы с этим пакетомНадо заметить что вопросов было немного

6

Тем временем

В MySQL существует функцияSUBSTRING_INDEX(strdelimcount)которая возвращает часть строки strсостоящую из count количестваподстрок разделенныхделимитерами delim

Пример использования mysqlgtSELECT SUBSTRING_INDEX(wwwmysqlcom 2)-gt wwwmysql

Информацию по другим строковымфункциям MySQL можно найти поадресуhttpdevmysqlcomdocmysqlrustring-functionshtml

PHP Inside 11 Каркасы каркасы каркасыhellip

WACT обладает неплохим интерфейсом работы с базами дан-ных Вы можете работать c ADODb с PEARDB либо через классыпрямого доступа к БД В отличие от phpMVC интерфейс абстраги-рован и вам не понадобиться менять код приложений при сменесервера баз данных или смене интерфейса

Шаблонный движок WACTrsquoа тоже достоин рассмотренияШаблоны похожи на XML-документы и частично реализуют идеюASPNET Однако сносной документации по движку мне найти неудалось как в принципе и по системе в целом Разработчики утвер-ждают что скоро будет выпущена структурная документация нарусском языке В целом шаблонный движок показался мне немногосложным Разработчики сделали отображение более приоритетнымДанные достаются отображением из модели Это усиливает нагруз-ку на верстальщика который в принципе и не должен знать что та-кое модель или паттерн На мой взгляд идеальным является случайкогда верстальщик и программист принимают соглашение обименовании переменных программист заполняет их а верстальщиких выводит в нужном месте

Никакого контроля ошибок времени выполнения к сожале-нию опять таки нет

На мой взгляд очень неплохая платформа для реализациисвоих приложений Было бы идеально присутствие в системе XSLTшаблонизатора но такого в ближайшее время не предвидится

Framework-системы Путь к величию илисамообманFramework система ndash это laquoважнейшая часть интеллектуальнойсобственности и даже корпоративной культуры компаниизанимающейся web-разработками всерьезraquo(httpphpclubrutalkshowthreadphpthreadid=62146 ndash Авторmariroz)

Frameworkhellip Когда я слышу это слово меня переполняет це-лая масса эмоций Что такое framework Это вопрос на которыйеще не было дано должного и исчерпывающего ответа Мою пози-цию подтверждает окружающая действительность Ведь куда не по-смотришь везде frameworkrsquoи а остановить свой взгляд на чем-токонкретном и не получается Есть отличная литература в которойрассматривается архитектура подобных систем но четких ответовна интересующие вопросы нет Каждый волен думать и поступатьтак как ему хочется

Мне же кажется что обсуждение систем подобного плананадо вести в другом ракурсе В форуме мне не раз указали на такиевещи как programming pattern и прочее Да это все хорошо И впринципе без этого теперь немыслима ни одна каркасная системаНо мы с вами говорим не о том Рассмотрение таких фундаменталь-ных вещей как MVC singleton ORM которые находят прямое при-менение во frameworkrsquoах - это тема как минимум для одной книгии нельзя сказать что маленькой Да и надо ли этим заниматься

7

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 7: #11, Март'2005 :: Frameworks

PHP Inside 11 Каркасы каркасы каркасыhellip

WACT обладает неплохим интерфейсом работы с базами дан-ных Вы можете работать c ADODb с PEARDB либо через классыпрямого доступа к БД В отличие от phpMVC интерфейс абстраги-рован и вам не понадобиться менять код приложений при сменесервера баз данных или смене интерфейса

Шаблонный движок WACTrsquoа тоже достоин рассмотренияШаблоны похожи на XML-документы и частично реализуют идеюASPNET Однако сносной документации по движку мне найти неудалось как в принципе и по системе в целом Разработчики утвер-ждают что скоро будет выпущена структурная документация нарусском языке В целом шаблонный движок показался мне немногосложным Разработчики сделали отображение более приоритетнымДанные достаются отображением из модели Это усиливает нагруз-ку на верстальщика который в принципе и не должен знать что та-кое модель или паттерн На мой взгляд идеальным является случайкогда верстальщик и программист принимают соглашение обименовании переменных программист заполняет их а верстальщиких выводит в нужном месте

Никакого контроля ошибок времени выполнения к сожале-нию опять таки нет

На мой взгляд очень неплохая платформа для реализациисвоих приложений Было бы идеально присутствие в системе XSLTшаблонизатора но такого в ближайшее время не предвидится

Framework-системы Путь к величию илисамообманFramework система ndash это laquoважнейшая часть интеллектуальнойсобственности и даже корпоративной культуры компаниизанимающейся web-разработками всерьезraquo(httpphpclubrutalkshowthreadphpthreadid=62146 ndash Авторmariroz)

Frameworkhellip Когда я слышу это слово меня переполняет це-лая масса эмоций Что такое framework Это вопрос на которыйеще не было дано должного и исчерпывающего ответа Мою пози-цию подтверждает окружающая действительность Ведь куда не по-смотришь везде frameworkrsquoи а остановить свой взгляд на чем-токонкретном и не получается Есть отличная литература в которойрассматривается архитектура подобных систем но четких ответовна интересующие вопросы нет Каждый волен думать и поступатьтак как ему хочется

Мне же кажется что обсуждение систем подобного плананадо вести в другом ракурсе В форуме мне не раз указали на такиевещи как programming pattern и прочее Да это все хорошо И впринципе без этого теперь немыслима ни одна каркасная системаНо мы с вами говорим не о том Рассмотрение таких фундаменталь-ных вещей как MVC singleton ORM которые находят прямое при-менение во frameworkrsquoах - это тема как минимум для одной книгии нельзя сказать что маленькой Да и надо ли этим заниматься

7

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 8: #11, Март'2005 :: Frameworks

PHP Inside 11 Каркасы каркасы каркасыhellip

По этой тематике существует немалое количество качествен-ной литературы Да реализация этих технологий тоже порой нелег-кое дело Но ведь мы с вами на самом деле не сделали и более про-стых вещей А именно ядра этой системы Наверное в прошлойстатье я не очень ясно выразил свое мнение по отношению к ядруэтих систем Если вы работали с какими-то конкретными frameworkсистемами то задайтесь вопросом laquoА где в моей framework систе-ме ядроraquo Сможете ли вы дать четкий и ясный ответ на этот во-прос В большинстве случаев вряд ли Почему В одном форумебыло дано такое определение framework системе laquoэто обычно про-сто набор стандартных библиотекraquo С технологической точки зре-ния примерно так все и обстоит Но скажите мне тогда и PEAR ndashэто framework система Я так не считаю Возможно вы уже зада-лись вопросом laquoА зачем вообще нужно ядро как таковоеraquo Давайтеподумаемhellip

А как должно бытьКонечно же мои слова не претендуют на роль последней ис-

тины ndash это было бы слишком самоуверенно с моей стороны Но яхочу изложить свой взгляд на порядок вещей в нашем вопросе

Framework-система ndash это не просто набор стандартных биб-лиотек Это система которая определяет некоторые стандарты коди-рования и обладает интерфейсом работы с модулями Модули ndash этоключевое понятие для CMF системы Ядро обладает лишь систем-ной функциональностью и даже не подозревает о том что такоебазы данных или паттерн MVC Вся необходимая функциональ-ность реализуется в модулях Зачем это надо Поймите меня пра-вильно я люблю MVC я уважаю XML и все XML-подобное и неимею ничего против множества других полезных технологий Ноиногда мне нужно писать чистый PHP код без контроллеров моде-ли отображения и всех прочих благ которые в большинстве другихслучаев очень ценю Иногда у меня возникает необходимость пи-сать целые приложения без использования паттерна MVC или ша-блонизатора как такового Например группа скриптов для работы сграфиками (построение графиков по данным по функциям) или сизображениями (генерирование картинки предпросмотра с малень-ким разрешением и сохранение ее в кэше сервера) Поэтому я хочуиметь под рукой такую систему от которой я бы смог отключитьвсе ненужное и подключить все нужное одним взмахом руки надклавиатурой И в итоге получить приложение максимально эффек-тивное по соотношению удобство программированиябыстродей-ствие (а как вы знаете эти величины находятся в обратно-пропорци-ональной зависимости) К сожалению многие framework системыэтого не позволяют так как данная функциональность (вроде интер-фейса MVC паттерна или интерфейса к БД) в них laquoвшитаraquo Еслибыть точнее то система как раз и заключается в этой функциональ-ности и не существует сама по себе Для реализации же того о чемя говорю необходимо абстрактное модульное ядро Ядро загруз-чик модуль и приложение - вот ключевые компоненты системыПроведите аналогию с родственными терминами из теории Опера-ционных Систем и возможно вам многое станет яснее

8

Тем временем

Для перекодирования строковыхзначений из одной кодировки вдругую в PHP существуютнесколько функций К примеру дляперекодировки из кириллическойкодировки windows-1251 в другуюкириллическую KOI8-R можноиспользовать функциюconvert_cyr_string($stringwk)Подробную информацию пожданной функции смотрите здесьhttpruphpnetmanualrufunctionconvert-cyr-stringphp

Если одна из кодировок не являетсяисключительно кириллической (илиобе) то лучше всего использоватьфункцию iconv() Вот примерперекодирования из KOI8U в UTF-8iconv(KOI8-U UTF-8 $string)Подробнее о функции iconv() можнопрочитать здесьhttpwwwphpnetmanualrufunctioniconvphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 9: #11, Март'2005 :: Frameworks

PHP Inside 11 Каркасы каркасы каркасыhellip

Я пришел к пониманию того что framework система должнаобладать хорошо выраженной структурой с централизованнымуправлением с помощью этого самого ядра Ядро может выполнятьразные функции но главная из них коммуникативная На основа-нии API этого ядра должна создаваться вся остальная функциональ-ность Это в некоторой мере облегчает создание более высокоуров-невых компонентов так как определенная функциональность ужевыполняется ядром К этой функциональности можно отнестинапример функции обработки ошибок и работы с конфигурацион-ным хранилищем

Проблемы отраслиДа У этой отрасли инженерного знания конечно же есть

проблемы И вы их наверное хорошо понимаете Отсутствие хоро-шей теоретической информации именно по построению ядра такихсистем а не высокоуровневых компонентов Наверное это обуслов-лено тем что та интегрирующая (коммуникативная) функция ядра окоторой мы говорим почти заканчивается на операторе laquoincluderaquoОднако надо помнить что laquoкачественноеraquo ядро должно уметь имного другого Например оно должно обладать удобными механиз-мами генерирования URLrsquoов Все эти вопросы остаются на усмотре-ние программиста Наверное это и есть самое страшное

Еще одна проблема которую я уже высказывал ndash это невер-ное на мой взгляд понимание задач Например из всех мною ви-денных framework-систем только несколько перехватывали ошибкивремени выполнения Разработчики зря обходят этот вопрос сторо-ной Ведь PHP предоставляет отличные средства для отладки Дляпримера взгляните на отладочную информацию которую генериру-ет моя framework-система в случае исключительной ситуации Сточки зрения средств языка ndash ничего экстраординарного

Необходимо рассматривать framework-систему как laquoчерныйящикraquo о задачах которого ничего неизвестно И наращивать функ-циональность слоями - это способствует модульности системы и бо-лее низкому уровню связанности модулей

ВыводыЭто очень тяжелая тема И я вам скажу мое мнение по поводу

того почему она такая тяжелая Отнюдь не потому что люди не мо-гут применять паттерн MVC или уровень абстракции от БД Она тя-желая потому что framework-система определяет стиль кодирова-ния который нам иногда так не хочется менять (если только не мысами его придумали) Она тяжелая потому что как я считаюframework-систему легче написать самому для себя так же как легчесамому составить распорядок своего дня потому что никто не сде-лает это лучше вас так как этот laquoкто-тоraquo не знает СТИЛЯ вашейжизни Тем более что написание основы такой системы - дело впринципе довольно не сложное и не должно занять много времени

9

Тем временем

Чтобы получить информацию нетолько о браузере пользователя нои о его возможностях (напримерподдержка JavaScript и CSS) можновоспользоваться функциейget_browser() которая возвращаетвсю полезную информацию в видеPHP-массива

Более подробно о функцииget_browser() можно узнать здесьhttpruphpnetmanualrufunctionget-browserphp

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 10: #11, Март'2005 :: Frameworks

PHP Inside 11 Каркасы каркасы каркасыhellip

Еще одним очень важным моментом является документацияДокументация CMF системы ndash это ее жизнь Без качественной доку-ментации система не представляет никакой ценности ни для кого ичерез определенный промежуток времени даже для ее разработчикаКто-то уже высказал идею о том что документацию framework-си-стемы надо писать раньше чем саму систему Именно этими прави-лами я руководствовался при создании своей framework-системы

Я думаю что рано или поздно мы создадим достаточно хоро-шую framework-систему которая устроит если не всех тобольшинство И тогда в наш мир ворвется еще одна революционнаявещь сродни NET Framework или Delphi VCL (а ведь это тоже вопределенной степени framework-система) Остается только рабо-тать и верить

10

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 11: #11, Март'2005 :: Frameworks

PHP Inside 11 Знакомство с Freeform Framework

Знакомство с Freeform FrameworkС выходом первых версий РНР5 веб-разработчики получили

богатый арсенал современных технологий написания приложенийСамым революционным шагом стало внедрение развитого и мощ-ного объектно-ориентированного расширения которое включает иинтерфейсы и исключения и механизм рефлексии С другой сторо-ны многие соглашаются с мыслью что классическое использова-ние РНР как смеси простых инструкций и HTML-кода являетсяочень неэффективным для разработки и поддержки больших кор-поративных приложений При таком подходе проблематичнымиостаются редизайн добавление новых компонентов или быстроеизменение частей кода в существующих страницах

В таком традиционном подходе пользователю веб-приложе-ния предлагается взаимодействовать со страницами сайта в то вре-мя как для разработчика намного привычней создавать программ-ные модули которые реагируют на действия этого пользователя -переход по гиперссылке с некоторыми параметрами для приложе-ния или заполнение формы

Многие могут поспорить что написание скрипта который ге-нерирует страницу в ответ на отправку данных в форме от пользова-теля не есть ничто иное чем реакция на действия пользователя нона самом деле разработчик в первую очередь создает программныйкод который обрабатывает поступившие данные

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

На самом деле этот подход уже давно широко используется иназывается MVC-паттерн Главная его идея - разделить обработкуданных хранение и выборку данных и подготовку результирующейстраницы между разными довольно независимыми разработчикамиили их командами Наибольшее применение он нашел при разра-ботке именно веб-приложений существует целое множество системначиная от обработчиков форм и шаблонных систем до полноцен-ных фреймворков - наборов скриптов или классов которые позволя-ют быстро создавать большие приложения командой разработчиковКонечно поскольку РНР является самым популярным (хотя пока ине самым приемлимым для разработки корпоративных веб-приложе-ний) создано множество MVC-фреймворков для РНР Но с прихо-дом РНР5 многие оказались неготовы использовать его новые пре-имущества кроме того большинство - это клоны имеющихся си-стем из JavaApache Projects

11

Автор Денис Попель

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 12: #11, Март'2005 :: Frameworks

PHP Inside 11 Знакомство с Freeform Framework

Большинство на самом деле не имеют встроенного средстваобработки шаблонов поэтому приходится кроме самой системыизучать и отдельный продукт - обработчик шаблонов В связи сэтим нами была предпринята достаточно успешная попытка создатьоригинальный (не портированный) объектно-ориентированныйпроект который бы действительно был легок в изучении и исполь-зовании и решал все недостатки существующих систем В концепрошлого года была выпущены первые пробные версии FreeformFramework нового MVC фреймворк Основными его отличиями яв-ляются

1 Очень четкая понятная и расширяемая архитектура

2 Компактное абстрактное ядро

3 Мощный доступный по умолчанию обработчик шаблонов

4 Единый интерфейс для обработки данных форм

5 Поддержка неограниченного числа клиентов - архитектура не на-кладывает ограничений на обработчики шаблонов они могут ге-нерировать любые выходные документы - веб-страницы XML-файлы картинки и тд Кроме того фреймворк поддерживает об-работку входных данных от различных клиентов например дан-ные могут приходить и с PDF-документа или какого-либо друго-го источника но они всегда будут доступны через единый интер-фейс к данным запроса поэтому код является абсолютно клиен-тонезависимым

6 Развитое средство эмулирования пакетов классов и файлов ресур-сов - отказ разработчиков от пакетов (пространств имен) вызвалигорячую дискуссию и сомнения что этот шаг не позволит созда-вать с помощью РНР действительно масштабированные и управ-ляемые библиотеки или приложения Freeform Framework частич-но решает эту проблему через эмуляцию пакетов классов Конеч-но это не полноценная замена соответствующих синтаксическихконструкций поэтому разработчики должны следить за тем что-бы все классы имели уникальные имена С другой стороны прииспользовании Freeform разработчики уже не должны беспоко-иться о включении необходимых файлов классов - используя но-вые возможности РНР5 система сама подгружает файлы классовпо мере необходимости (те при первом обращении к какому-либо классу) Кроме того в месте с пакетами можно распростра-нять и файлы ресурсов - шаблоны страниц мультимедиа и тдИнтерфейс доступа к ресурсам позволяет очень просто находитьтакие файлы независимо от путей инсталляции самого приложе-ния Пакеты также поддерживают конфигурирование и доступ кконфигурационной информации через простой интерфейс

Простая архитектураКак уже было отмечено одной из целей разработки была про-

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

1 Каждый запрос обрабатывается фронт-контроллером

12

Тем временем

Функция phpinfo() можетиспользоваться с параметрами спомощью которых есть возможностьвыводить на экран не полнуюинформацию а только нужныечасти

К примеру вызов phpinfo(32)приведет к выводу на экран толькосекции с предопределеннымипеременными включая переменныеокружения

Более подробную информациюсмотрите по адресуhttpru2phpnetmanualrufunctionphpinfophp

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 13: #11, Март'2005 :: Frameworks

PHP Inside 11 Знакомство с Freeform Framework

2 В зависимости от типа входного запроса выбирается класс-адап-тер который понимает как разобрать запрос (например РНРпонимает только GET и POST запросы типа applicationx-www-form-urlencoded и multipartform-data в то время как приложениеможет быть спроектировано так что оно должно принимать дан-ные например в XML-формате) Адаптер обрабатывает запрос ивозвращает его данные в виде понятном для остальной частиприложения

3 Создается экземпляр класса-обработчика сессии

4 В зависимости от входящих данных строится и инициализирует-ся экземпляр класса Action который и является реализацией ме-ханизма обработки действия пользователя Следуя идеологииMVC для каждой функциональности приложения создаетсяотдельный класс-потомок Action

5 Применяется политика безопасности и в зависимости от тогоимеет ли пользователь право выполнять текущее действие вызы-вается тот или другой метод экземпляра класса Action

6 Документ который является результатом выполнения действияпользователя возвращается ему через сеть или пользовательперенаправляется на другую страницу

РасширяемостьИспользуя Freeform каждый разработчик вправе сам решать

какие шаблонную систему менеджер сессий систему регистрациипользователей ему использовать Используя интерфейсы введенныев пятую версию РНР ядро может взаимодействовать с любыми та-кими системами - достаточно чтобы они реализовывали тот илииной интерфейс Например разработчик может создать свой соб-ственный обработчик сессий который реализует интерфейсSessionHandler и изменить одну строчку в конфигурационном файле

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

БезопасностьВопросы безопасности - ключевой момент разработки веб-

приложений В Freeform каждый запрос подвергается проверке напредмет того может ли он быть выполнен в текущем окруженииВсякий раз когда пользователь переходит по ссылке или отправляетданные формы строится экземпляр класса Action в котором опреде-лен метод getAccessController() который должен возвратить экзем-пляр класса реализующего интерфейс AccessController

13

Тем временем

Вы можете задать для веб-сервераApache 13x свой обработчик тогоили иного типа файлов используядирективы Action и AddHandler ВотпримерAddHandler my-file-type xyzAction my-file-type xyzhandlerphp

Дополнительно смотритеинформацию по адресуhttphttpdapacheorgdocsmodmod_actionshtmlaction

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 14: #11, Март'2005 :: Frameworks

PHP Inside 11 Знакомство с Freeform Framework

Этот интерфейс декларирует единственные метод isAccessible() который должен сообщить может ли данный Action быть выпол-нен в текущем окружении

С помощью этого интерфейса создаются классы ответствен-ные за применение политики безопасности Таким образом создаваяприложение разработчик строит иерархию классов которые могутбыть повторно использованы в других приложениях Кроме тогоотдельные пакеты которые реализуют некоторую стандартнуюфункциональность (например форум) могут быть сконфигурирова-ны таким образом чтобы использовать эти классы при проверке до-ступа к своим функциям Таким образом достигается очень простаяинтеграция программного обеспечения от третьих лиц

Обработка формОбработка данных форм - это пожалуй самая часто использо-

ванная функция приложения Freeform предлагает стандартный ин-терфейс программирования форм По сути форма - это своего родафильтр который анализирует данные запроса Форма умеет отли-чать была она отправлена или нет которые ее поля заполнены пра-вильно а какие - неправильно Формы состоят из полей - отдельныхклассов которые собственно и проверяют правильность заполнениякаждого из них Кроме того стандартная система обработки шабло-нов которая доступна в каждой инсталляции имеет все средствадля автоматизации отображения полей ввода форм

Архитектурной особенностью программирования форм яв-ляется то что этот класс не сопряжен никаким образом с классомAction что дает возможность использовать несколько форм на од-ной странице или использовать одну и ту же форму на несколькихстраницах Создав подкласс этого класса можно в нем определитькакие поля форма имеет и какой Action будет ее обрабатывать

Система обработки шаблоновВ каждой инсталляции Freeform имеется пакет html который

является примером реализации системы подготовки выходных доку-ментов Основной класс пакета HTMLDocument реализует интер-фейс Document и позволяет создавать сложные HTML документы наоснове XML шаблонов Отличительной особенностью этого пакетаявляется возможность создавать собственные тэги - классы которыеотвечают за обработку одноименных тэгов шаблона

Такие классы используются для циклического или условногоотображения частей шаблона создания меню или деревьев в ре-зультирующем документе вставки гиперссылок и отображения по-лей форм Так создание ссылок на другие страницы теперь происхо-дит без изучения всех адресов и параметров дизайнерами - специ-альные тэги сами определят какие URL отображать на основе дан-ных их приложения

14

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 15: #11, Март'2005 :: Frameworks

PHP Inside 11 Знакомство с Freeform Framework

Также нет необходимости прописывать путь к обработчикуформы или метод ее отправки не говоря о списках выбора и осталь-ных полях - все данные заполняются автоматически обработчикомшаблона В последней версии имеется более десяти специализиро-ванных тэгов нацеленных на упрощение и ускорение создания вы-ходных документов

Стандартные классыВ Freeform также имеется отдельный пакет - набор вспомога-

тельных классов и интерфейсов которые могут использоваться влюбых ситуациях Здесь например содержатся интерфейсы Iterableи PaginatedIterable которые используются для создания итераторов спостраничным доступом абстрактный класс Validator который ис-пользуется для создания классов для проверки правильности значе-ния а также классы IterablePearDbResult и IterableADORecordSetкоторые позволяют организовать вывод данных полученных припомощи библиотек PearDB и ADOdb средствами пакета html

Вспомогательные приложенияНа данный момент создано одно вспомогательное приложе-

ние - Freddy - средство просмотра документирующих комментариевв файлах классов и пакетной документации Это отдельный пакеткоторый в режиме реального времени генерирует документацию длявсех установленных пакетов и классов Он также позволяет исполь-зовать отдельные файлы документации распространяемые вместе сресурсами пакетов а также вставлять ссылки на пакеты классы иметоды и использовать рисунки в документации

Экспериментальные пакетыПредыдущие дистрибутивы Freeform имеют еще два экспери-

ментальных пакета Один из них является попыткой создания соб-ственной библиотеки абстракции баз данных а другой - мощноесредство организации объектных баз данных

Особенный интерес представляет именно это средство по-скольку в отличии от других похожих средств оно не используеткакие-либо дополнительные механизмы как генератор SQL кода иликлассов по схеме улучшителей классов и тд

Для построения собственной объектной базы не надо знатьничего другого кроме собственно языка РНР Инструменты данногопакета сами создадут реляционную модель базы по определениюкаждого класса и в случае изменения этих определений перестроятбазу

Экземпляры классов сами отвечают за сохранение всех изме-нений своих полей так что разработчик работает с этими экземпля-рами как с любыми другими классами

15

Тем временем

Если PHP установлен на платформеwindows то можт возникнутьнеобходимость работать с почтовымклиентом Outlook

Как это делается можно посмотретьздесьhttpwwwsevernsolutionscouktwblogarchive20041119phpoutlookdcom

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 16: #11, Март'2005 :: Frameworks

PHP Inside 11 Знакомство с Freeform Framework

Кроме того пакет позволяет выбирать экземпляры несколькихклассов одной иерархии в одном запросе позволяет создавать пер-систентные массивы и коллекции объектов принадлежащих одномувладельцу

С помощью Freeform Framework было создано приложениеProjectsHosted онлайн-каталог проектов с собственной системой от-слеживания ошибок менеджером релизов новостей подписок фо-румами и тд Приложение работает по адресуhttpdev6php5nedlinuxcom оттуда можно получить последнююверсию Freeform и других пакетов

В этой вводной статье мы представили Freeform Framework вобщих чертах Далее мы детально опишем технические аспекты реа-лизации некоторых компонентов с целью лучшего ознакомления сосредствами РНР5 и примерами их использования в разработке веб-приложений

Последнюю версию Freeform Framework можно скачать ссайта httpdev6php5nedlinuxcom

16

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 17: #11, Март'2005 :: Frameworks

PHP Inside 11 Freeform Framework ndash первые шаги

Freeform Framework ndash первые шагиДля демонстрации возможностей MVC архитектуры

средств обработки форм и стандартной шаблонной системыпредлагаемых Freeform Framework рассмотрим простое предло-жение которое отображает форму ввода имени пользователя и вслучае его правильного заполнения выводит приветствие

Это простейшее веб-приложение будет состоять из одногокласса и использовать один шаблон

Начнем с класса который будет отвечать за отображениестраницы ndash мы назовем его HWHome Все классы которые обраба-тывают действия пользователя расширяют абстрактный классAction из пакета lsquofreeformrsquo Поскольку мы имеем дело с формойопределяем в классе переменную которая будет содержать ссылкуна объект формы

При построении экземпляра нашего класса который будетотображать форму и приветствие фронт-контроллер вызовет методonInit() в котором мы создадим экземпляр класса формы Для созда-ния формы нужно определить объект Request который содержитданные полученные от пользователя Каждый объект Action полу-чает ссылку на такой объект при своем создании Также форме нуж-но сообщить кто обрабатывает отправку формы В данном случаеэто объект класса HWHome (те мы сами обрабатываем данныеформы) Последний параметр указывает метод отправки - здесь ис-пользуется HTTP GET

Здесь мы также добавляем в форму поле ввода В данном слу-чае форма содержит единственное поле для ввода строки текста сименем name Это поле - объект класса TextInputField который ис-пользуется для представления полей ввода строки текста При по-строении поля ввода мы задаем значение по умолчанию котороеотобразится при первом обращении к странице с формой а такжефильтр - объект класса RegexValidator (реализующего интерфейсValidator) который проверит содержит ли введенное пользователемимя хотя бы один символ

17

class HWHome extends Action private $form = null

function onInit() $this-gtform = new Form($this-gtgetRequest() new Location($this)RequestMETHOD_GET)

$this-gtform-gtaddField( name new TextInputField((Ваше имя) new RegexValidator(+)))

Автор Денис Попель

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 18: #11, Март'2005 :: Frameworks

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь определяем метод process() который отвечает за соб-ственно обработку данных пользователя и подготовку выходногодокумента Здесь мы проверим отправил ли пользователь свое имяи если это так то в результате он увидит персональное приветствие

Для этого мы сперва получаем объект Responce связанный свызванным Action Каждый Action получает ссылку на такой объектпри создании Через объект Responce мы возвращаем выходной до-кумент (экземпляр класса который реализует интерфейс Document)тело которого будет возвращено пользователю

Дальше создаем выходной документ В данном случае - этообъект класса HTMLDocument который содержится в пакете html ипозволяет создавать сложные документы на основе XML шаблоновДля его построения мы должны указать объект Responce которыйбудет возвращать его тело

Теперь документу нужно указать путь к файлу шаблона По-скольку мы будем держать файл шаблона как файл ресурса то ис-пользуем встроенные средства поиска этого файла С помощьюобъектов Package мы можем получить доступ к ресурсам пакета

Дальше мы проверяем была ли форма отправлена и еслида то верно была ли она заполнена Если все проверки успешны по-лучаем значение поля ввода name из нашей формы если же нет ndash тоформа или не была отправлена или была заполнена с ошибками Внашем примере шаблон сам определит имела ли место ошибка иавтоматически отобразит напоминание (код шаблона см ниже)

Теперь мы готовы отправить выходной документ пользовате-лю Для этого устанавливаем две шаблонные переменные первая изкоторых будет содержать имя введенное пользователем а вторая ndashссылку на объект формы чтобы документ смог автоматически отоб-разить поля и их значения возможные предупреждения об ошибкахи тд В последней строчке мы передаем объекту Responce выходнойдокумент После этой строчки Freeform отправит тело документапользователю

18

function process() $r = $this-gtgetResponce()

$d = new HTMLDocument($r)

$p = $this-gtgetPackage() $d-gtsetTemplate($p-gtgetResourcePath(HWHomehtml))

if($this-gtform-gtisValidSubmission()) $n = $this-gtform-gtgetField(name)-gtgetValue() else $n = Гость

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 19: #11, Март'2005 :: Frameworks

PHP Inside 11 Freeform Framework ndash первые шаги

Теперь рассмотрим шаблон который будет использоватьсядля создания выходного документа классом HWHome только чтосозданным нами Каждый шаблон для документов классаHTMLDocument - это XML-файл очень похожий на обычныйHTML документ но возможно содержащий специальные теги

Эта строчка выводит приветствие Обратите внимание как мыобращаемся к переменной шаблона

Следующий тег отображает форму Обратите внимание чтодля отображения формы средствами Freeform Framework мы указы-ваем только имя шаблонной переменной содержащей форму вводаОстальные атрибуты (метод отправки адрес обработчика и тд) бу-дут добавлены автоматически

Этот тег отображает поле ввода Тип поля проставляетсяисходя из класса объекта-поля ввода значение выводится также ав-томатически Заметьте что в этом теге можно использовать атрибу-ты для стиля или скриптов

Следующий тег отобразит свое содержимое только в томслучае если поле ввода name было заполнено с ошибками Чтобыувидеть это предупреждение отправьте форму с пустым полем

19

$d-gtsetVariable(name $n) $d-gtsetVariable(form $this-gtform) $r-gtsetDocument($d)

ltxml version=10 encoding=UTF-8gtlthtmlgt ltheadgt lttitlegtHello Worldlttitlegt ltheadgt ltbodygt

Привет namelthrgt

ltHTMLShowForm key=formgt Ваше имя

ltHTMLInput name=name size=25gt ltinput type=submit value= Вперед gtltbrgt

ltHTMLIfInputFieldError key=namegt ltbgtПожалуйста введите ваше имяltbgt ltHTMLIfInputFieldErrorgt

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 20: #11, Март'2005 :: Frameworks

PHP Inside 11 Freeform Framework ndash первые шаги

Завершаем шаблон следя за тем чтобы все открывающие тегибыли правильно закрыты

Эти файлы Вы можете получить в приложении к номеру (тамони сохранены в кодировке UTF-8) Для испытания этого примераВам понадобится Freeform Framework последнюю версию которогоможно скачать с сайта httpdev6php5nedlinuxcom а также РНРверсии 503 (предыдущие версии имеют ошибку в обработчикеXML документов) В дистрибутиве Freeform Framework содержатсяинструкции по его инсталляции а в комментариях файловHWHomephp5 и HWHomehtml ndash подсказки куда их записать Есливы проделали все правильно пример можно запустить набрав вброузере что-то типа httplocalhostindexphp5action=HWHome

Языки описания пользовательскихинтерфейсов

20

ltHTMLShowFormgt ltbodygtlthtmlgt

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 21: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

ИдеиЯзыки описания пользовательскихинтерфейсов

Данная статья обозревает перспективные концепции декла-рирования пользовательских интерфейсов для веб-приложений Вней рассматриваются технологии UIML XUL XAML MXML и WebApplications

Пользовательские интерфейсы и вебЧто такое пользовательский интерфейс По логике вещей это

то с чем мы сталкиваемся каждый день в повседневной жизни сто-ловые приборы дверные ручки пульты управления телевизором итд Сложилось так что в мире информационных технологий поль-зовательский интерфейс прежде всего ассоциируется с GUI опера-ционной системы Это неудивительно ведь ныне элементы управле-ния компьютерными программами нам столь же привычны как итумблеры бытовых электроприборов Пользовательские интерфей-сы - неотъемлемая часть любого веб-приложения Любой сайт к ко-торому мы можем обратиться посредством Интернет является поль-зовательским интерфейсом для доступа к информации Однако в на-стоящее время задача программирование пользовательских интер-фейсов для веб несколько иное нежели в случае настольных про-грамм

Современная операционная система базируется на устоявшем-ся стандарте пользовательского интерфейса для всех взаимодей-ствующих с нею программ Соответственно имеется определеннаямодель которой подчиняются любые интерфейсные решения в про-граммах для данной операционной системы А раз так то созданиепользовательского интерфейса сводиться к использованию функцийстандартных библиотек Например это могут быть функции Win32API или объекты MFC для программ MS Windows

Подобный подход имеет одно замечательное свойство Еслипользователь научился пользоваться хотя бы одной программой онбыстро освоится с любой другой для той же операционной системыНо такое положение вещей не может быть отнесено к веб-приложе-ниям Каждый новый сайт ndash это новый информационный и графиче-ский дизайн а также новый пользовательский интерфейс В данномслучае едва ли применимы программные библиотеки для какого-тоодного определенного стандарта пользовательского интерфейса

И до сих пор чаще всего при разработке сайтов используетсяlaquoручноеraquo программирование что подразумевает внесистемное зада-ние оформления и программных реакций для каждого элементапользовательского интерфейса и для каждого его состояния В слу-чае крупного полнофункционального решения подобный подходозначает laquoначало концаraquo Но давайте обратимся к существующим иперспективным стандартам в области описания пользовательскихинтерфейсов

21

Автор Дмитрий ШейкоВедущий программист RedGraphic Systemswwwcmsdevelopmentcom

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 22: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

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

Win32 API (httpmsdnmicrosoftcomlibraryen-usdnanchorhtmlanch_win32comasp)MFC (httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usvcmfc98htmlmfchmasp)

Язык пользовательских интерфейсов UIMLВ 90х годах HTML обрел огромную популярность и прежде

всего за счет свой простоты Для того что бы создать небольшойсайт не требовалось особых навыков в программировании и специ-альных инструментальных средств Любой желающий мог это сде-лать и почти каждый попробовал Однако прародитель HTML языкSGML подразумевал структуризацию документов а это значительноболее глубокая модель нежели простое оформление внешнего видаданных Изначальная идея упорядоченной структуры распределен-ных данных вернулась вместе с XML и породила эпоху мета описа-ния абстрактных составляющих веб-ресурсов

На этом фоне четко вырисовывалась задача вынесения размет-ки UI из программного кода приложений Кроме того появиласьтехнология каскадных таблиц стилей (CSS) что открыло путь к со-зданию настраиваемого под конкретное устройство оформления ин-терфейсов Эти обстоятельства явились предпосылками созданиюязыка UIML (User Interface Markup Language) Первая спецификацияUIML была представлена компанией Harmonia в январе 1998 годаНыне доступна спецификация 30 на сайте проекта wwwuimlorg

Что представляет собой UIML В общих чертах это концеп-ция в которой путь данных от приложения до физического устрой-ства отображения данных пролегает через абстрактные области ло-гики интерфейса и представления Область интерфейса включаетописание структуры стилей содержания и поведения элементов За-дача языка UIML эффективно реализовать область интерфейса

Если взглянуть глубже то выясниться что UIML определяетследующее

bull составные элементы пользовательского интерфейса

bull каким образом будут представлены элементы пользовательскогоинтерфейса (визуальновербальнотактильно)

bull какого рода содержание будет использовано в пользовательскоминтерфейсе (текст изображения звуки и тд)

bull какова будет реакция элементов пользовательского интерфейсана действия пользователя

bull каким образом будет производиться контроль событий пользова-тельского интерфейса (Java Swing classes или теги HTML)

bull с каким внешним API будет взаимодействовать пользовательскийинтерфейс

22

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 23: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Рис 1 Модель кросс- платформенных пользовательских ин-терфейсов

Но довольно теории давайте взглянем на то как это работаетНиже приведен пример UIML документа Мы определяем областьприложения с помощью элемента APP и далее назначаем группыдля его элементов Внутри групп мы определяем элементы пользо-вательского интерфейса Мы также можем определить свойства эле-ментов посредством контейнера DEFINE

23

ltUIMLgt ltHEADgt ltTITLEgtCMS loosely remind of BCWBltTITLEgt ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgt ltDATEgt170205ltDATEgt ltVERSIONgt01ltVERSIONgt ltHEADgt ltAPP NAME=CMS CLASS=Appgt ltGROUP NAME= MainFrame CLASS=framegt ltGROUP NAME=Common CLASS=menugt ltELEM NAME=DocEdit CLASS=menuitemgt ltELEM NAME=DocView CLASS=menuitemgt ltELEM NAME=Quit CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Structure CLASS=menuortoolbargt ltELEM NAME=AddItem CLASS=menuitemgt ltELEM NAME=ChangeItem CLASS=menuitemgt ltELEM NAME=DeleteItem CLASS=menuitemgt ltGROUPgt ltGROUP NAME=Templates CLASS=menuortoolbargt ltELEM NAME=AddTemplate CLASS=menuitemgt ltELEM NAME=ChangeTemplate CLASS=menuitemgt ltELEM NAME=DeleteTemplate CLASS=menuitemgt ltGROUPgt Листинг 1 Документ UIML (продолжение на следующей странице)

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 24: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Надо также заметить благодаря активному использованиюCSS документ не кажется перегруженным излишней информациейСтилевой файл для UIML может содержать как CSS так и Java AWT(Abstract Windowing Toolkit)

24

ltELEM NAME=Desktop CLASS= DesktopAreagt ltGROUPgt ltAPPgt ltDEFINE NAME=Quitgt ltPROPERTIESgt ltCLASS VALUE=menuitemgt ltACTION VALUE=MainFrameVISIBLE=false TRIGGER= select gt ltPROPERTIESgt ltDEFINEgt ltUIMLgt Листинг 1 (продолжение) Документ UIML

ltAUTHORgtDmitry Sheiko Red Graphic SystemsltAUTHORgtltDATEgt170205ltDATEgtltVERSIONgt01ltVERSIONgtAPPApp +TOOLKIT jfc +RENDERING-PREFIX javaawt GROUPframe RENDERING javaawtFrame LAYOUT BorderLayout SIZE 400400 FONT-FACE Serif FONT-SIZE 10 FONT-STYLEPlain CONTENT ErrorNo Content GROUPmenu RENDERING javaawtMenu ELEMmenuitem RENDERING javaawtMenuItem GROUPmenuortoolbar RENDERING javaawtMenu ELEM DesktopArea RENDERING javaawtPanel ALIGNMENT Center Листинг 2 Стилевой файл для UIML

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 25: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Теперь структура и внешний вид интерфейса описаны Опыт-ный разработчик к этому моменту наверняка задумается о форматесодержания элементов пользовательского интерфейса В UIML ис-пользуется база данных контента (Content Database) где и хранитсясодержание элементов интерфейса

UIML на мой взгляд представляет собой наиболее удачное ре-шение именно по части описания логики пользовательских интер-фейсов из ныне существующих Что вполне закономерно учитываятот факт что его инициатор компания Harmonia специализируетсяна пользовательских интерфейсах Однако в отличие от прочих язы-ков рассматриваемых в данном обзоре UIML не поддерживаетсякакими-либо браузерами Для выполнения UIML-трансформацииследует воспользоваться одним из сторонних UIML-процессоров настороне сервера Впрочем по адресу(httpwwwuimlorgtoolsindexhtm) представлен внушительныйсписок open source процессоров UIML

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

UIML ( httpwwwuimlorg)Java AWT (httpwwworeillycomcatalogjavawtbook)

laquoНет больше данных есть только XULraquoВ настоящее время весьма популярен язык описания пользова-

тельских интерфейсов XUL (XML User-interface Language) XUL яв-ляется частью среды разработки кросс- платформенных интерфей-сов известной как XPFE Это полнофункциональный язык размет-ки на объекты приложений такие как окна метки и кнопки Языксоответствует стандарту W3C XML 10 Приложения написанные наXUL также могут использовать HTML CSS DOM Java-script Иглавное XUL пытается разделить представление данных и логикуприложений Делается это посредством следующих абстрактныхслоев

bull Содержание (content) объявление окон и элементов пользова-тельского интерфейса ассоциированных с ними

bull Оформление (skin) включение CSS и изображений определениевида приложения

bull Локализация (locale) текст отображаемый в пределах приложе-ния распределен по специальным локальным файлам что обес-печивает переносимость языка

25

Record format Key Name (from uiml file) Attribute ValueEnglishQuittingDialog CONTENT Are you sureEnglishQuittingFinishedMsg CONTENT Good-byeEnglishDocEdit CONTENT Edit documentEnglishOKButton CONTENT OK Листинг 3 База данных контента

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 26: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Теоретически XUL обеспечивает кросс- платформенные ин-терфейсы (по крайней мере на данный момент он доступен в опера-ционных системах Windows Unix Mac) Впрочем первое яркое впе-чатление от технологии сразу же омрачает ее жесткая привязка кядру Mozilla (Gecko)

Кстати говоря с названием технологии связан один курьезныйслучай Так сложилось что аббревиатура XUL происходит от имениперсонажа Зуул из фильма laquoОхотники за приведениямиraquo Ключевойоказалась фраза из фильма laquoНет больше Даны есть только Зуулraquoтрансформировавшаяся в слоган laquoНет больше данных есть толькоXULraquo Может быть именно по этому сообщество XUL так усердноследит за корректностью произношения названия языка

Пример простого интерфейса Drag amp Drop на языке XUL

Источник httpwwwxulplanetcomtutorialsxultudragexhtml

26

ltwindow title=Widget Dragger id=test-window orient=horizontal xmlns=httpwwwmozillaorgkeymastergatekeeperthereisonlyxulgt ltscript src=chromeglobalcontentnsDragAndDropjsgt ltscript src=chromeglobalcontentnsTransferablejsgt ltscript src=dragboardjsgt ltstack id=board style=width300px height 300px max-width 300px max-height 300px ondragover=nsDragAndDropdragOver(eventboardObserver) ondragdrop=nsDragAndDropdrop(eventboardObserver)gt ltstackgt ltvboxgt ltbutton label=Button elem=button ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Check Box elem=checkbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltbutton label=Text Box elem=textbox ondraggesture=nsDragAndDropstartDrag(eventlistObserver)gt ltvboxgt ltwindowgt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 27: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример интерфейса таблиц посредством XUL

httpwwwdevxcomwebdevArticle93120page3

Между XUL и FlexВ то время как XUL располагает такими преимуществами каквзаимодействие с различными популярными объектно-ориентированными языками полноценная поддержка XPath и CSSFlex небезосновательно предвещает эпоху насыщенных веб-приложений (RIA) На этом фоне возникают гибридныетехнологии такие как ZULU Это еще один язык разметки кросс-платформенных пользовательских интерфейсов совмещающийстандарт XUL и технологический возможности Flash MXСCылки по теме httpzulunetspeditioncomzulumainoverviewshtml

httpwwwmozillaorgdocsweb-developer httpwwwmozillaorgxpfe httpwwwxulplanetcom httpwwwsitepointcomprint1140 httpxpointruforumsprogrammingXULfaqxhtml

27

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 28: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

laquoXAML ndash язык авалонскийraquoБыло бы странно если бы столь перспективную нишу рынка

проигнорировала компания Microsoft Ныне в активном развитииXAML (eXtemsible Application Markup Language) ndash язык интерфей-сов платформы Windows Longhorn

Модель приложений Longhorn включает объект ApplicationЕго набор свойств методов и событий позволяет объединить веб-до-кументы в связанное приложение Объект Application контролируетвыполнение программы и генерирует события для пользовательско-го кода Документы приложения пишутся на XAML Впрочем с по-мощью XAML описывается прежде всего пользовательский интер-фейс Логика приложения по-прежнему управляется процедурнымкодом (С VB и тд) XAML может использоваться как для брау-зер-базированных приложений так и для локальных настольныхприложений

XAML включает основные четыре категории элементов пане-ли элементы управления элементы связанные с документом и гра-фические фигуры Заявлено 7 классов панелей которые задаютпринципы отображения вложенных в них элементов Для заданияположения элементов относительно границ родительской панели ис-пользуются атрибуты на манер свойств в объектно-ориентирован-ных языках Подобный синтаксис не очень вяжется с рекомендация-ми CSS но будет привычен программистам настольных приложе-ний

Пример задания атрибутов элементам в XAML

Приложения объявленные в XAML могут включать множе-ство страниц Элемент управления PageViewer позволяет разбиватьсодержание на страницы и обеспечивает навигацию по ним Эле-мент ContextMenu помогает в создании навигационных меню прило-жения Код процедурного языка может быть размещен непосред-ственно в файле XAML или же назначен при сборке проекта

В настоящее время стабильной версии Longhorn нет ноMicrosoft выпустила в ноябре 2004 Avalon CTP позволяющий ис-пользовать XAML на платформах Windows XP и Windows Server2003 Последнюю версию этого пакета можно найти по этому адре-суhttpwwwmicrosoftcomdownloadsdetailsaspxfamilyid=C8F904E1-B4CA-402B-ACCF-AAA2BD60DA74ampdisplaylang=en

28

ltBorder Background=green CanvasTop=100px CanvasLeft=100px Height=100px Width=100px gt

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 29: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример простого интерфейса на XAML с 3-мя кнопками ви-зуализация одной из которых зависит от наличия ее содержания

Источникhttpwwwjoemarinicomtutorialstutorialpagesxamlpropertytriggersphp

Пример пользовательского интерфейса XAML с динамическиизменяемым оформлением

Источник httpwwwoptimrucs20043AvalonAvalonasp

29

ltDockPanel xmlns=httpschemasmicrosoftcomwinfxavalon2005 Background=ffffffff xmlnsx=httpschemasmicrosoftcomwinfxxaml2005gt ltDockPanelResourcesgt ltStylegt ltButton Margin=5gt ltStyleVisualTriggersgt ltPropertyTrigger Property=ButtonHasContent Value=False gt ltSet PropertyPath=Visibility Value=Collapsed gt ltSet PropertyPath=Margin Value=0 gt ltPropertyTriggergt ltStyleVisualTriggersgt ltStylegt ltDockPanelResourcesgt ltButton Height=30 Width=100gtButton OneltButtongt ltButton Height=30 Width=100gtButton TwoltButtongt ltButton Height=30 Width=100gtButton ThreeltButtongt ltButton Height=30 Width=100 IsEnabled=FalsegtButton FourltButtongt ltDockPanelgt

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 30: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

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

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-usdnintlonghtmllonghornch03asp

Язык насыщенных веб-приложений MXMLMacromedia традиционно выделяется на рынке поставщиков

веб-технологий нетипичным подходом Так скажем ныне повсе-местно используемый Flash столь разительно отличается от прочихтехнологий доставки информации что его было бы как-то не ловкодаже рассматривать в параллели с теми же языками разметки Одна-ко в эпоху XML и Macromedia не осталась в стороне от моды на де-кларативные языки Ответ компании обозначился технологией Flexсодержащей XML-базированный язык MXML (Macromedia FlexMarkup Language)

Как и рабочая группа Mozilla и компания Microsoft разработ-чики Flex стремились создать язык эффективно сочетающий две по-пулярных парадигмы язык разметки и объектно-ориентированныйпрограммный язык MXML позволяет наглядно описать структурупользовательского интерфейса по которой он будет воссоздан кли-ентским приложением ActionScript выполняет задачи контроллера(программная реакция на события в среде) и обеспечивает уровеньмодели приложения

Что стоило бы выделить среди преимуществ Flex Flex помимо стандартных элементов форм ввода данных со-

держит столь актуальные компоненты пользовательского интерфей-са как Tree component (структуризация данных) DataGrid component(управление большими массивами данных) различные навигацион-ные компоненты (TabNavigator ViewStack Accordion и прочее)

Как помнится одно из основоположных свойств XML - воз-можно назначения собственных тегов Flex эффективно наследуетэту идею Мы можем создать приложение поместить его в отдель-ный файл с именем MyInnerAppmxml после чего в приложенияхFlex станет доступным тег ltMyInnerApp gt ссылающийся на исход-ный код

Flex располагает средствами для интеграции приложений Мыможем воспользоваться протоколом SOAP и передать их Flex-при-ложения инструкции удаленному сервису а затем принять от негоданные Это позволяет использовать при разработке приложенийFLEX сервис ориентированную архитектуру (SOA)

Специфика интерфейсов от Macromedia в их интерактивностимультимедийной насыщенности Очевидно что имеется богатаябиблиотека спецэффектов (библиотека событий) доступных эле-ментам приложений Flex Надо отметить что и документация к тех-нологии Flex выполнена в лучших традициях Macromedia Особен-но впечатляет интерактивный тур в технологиюhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

30

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 31: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

На клиентской стороне приложения Flex устанавливаются набраузерах располагающих расширением Flash Player 7 Данное об-стоятельство обеспечивает приложениям Flex самую широкую под-держку на клиентских устройствах С другой стороны необходимаясерверная поддержка реализуется компонентом Flex PresentationServer устанавливаемым на сервер приложений J2EE (MacromediaJRun IBM Websphere BEA WebLogic Apache Tomcat и тд) Этотот самый механизм который строит новое поколение насыщенныхприложений (RIAs - Rich Internet Applications) Начальная цена FlexPresentation Server составляет 12 тыс долл

Пример одного из подходов к разделению слоев структурыинтерфейса и программного контроллера в MXML приложении

Источник httpwwwrewindlifecomarchives000121cfm

Пример электронного магазина Источникhttpwwwmacromediacomsoftwareflexproductinfobrz_overview

31

ltxml version=10 gt ltmxApplication xmlnsmx=httpwwwmacromediacom2003mxml initialize=appControllerinitialize()gt ltTempConverterController view=this id=appController gt ltmxLabel text=Temperature in Farenheit gt ltmxTextInput id=farenheit width=120 gt ltmxButton id=myButton label=Convert gt ltmxLabel text=Temperature in Celsius gt ltmxLabel id=celsius width=120 fontSize=18 gt ltmxApplicationgt class TempConverterController [Inspectable] public var view function initialize() viewmyButtonaddEventListener(click this) function click(event) viewcelsiustext=(viewfarenheittext-32)18

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 32: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Оперная партия веб-приложенийЕсли бы разработчики браузеров в полной мере придержива-

лись одних и тех же стандартов это очень облегчило жизнь веб-раз-работчикам Написав приложения под один из браузеров можнобыло не беспокоиться о том что оно иначе поведет себя в другомКазалось бы о поддержке стандартов W3C заявлено всеми крупны-ми игроками на этом рынке но не для кого не секрет что один и тотже HTML-код может по-разному транслироваться браузерами IENetscape и Opera не всегда одинаково воспринимается ими CSS Апро Java-script и DOM полагаю не стоит даже упоминать Разработ-чики браузеров в стремлении привлечь большее внимание к своимпродуктам технологически опережают независимые организации постандартизации В результате на рынке множество сопоставимыхно разных технологий что кроме всего прочего создает жесткуюконкуренцию Когда группа Mozilla шествует по миру под флагамиXUL Microsoft предвещает эру LonghornXAML Opera Sofware про-сто вынуждена сделать какой-либо ответный шаг По крайней меремне именно в таком свете видится работа компании над специфика-цией Web Applications 10 (httpwwwwhatwgorgspecsweb-appscurrent-work) Данная спецификация не несет в себе каких-либо революционных новаций но обрисовывает многие актуальные(по крайней мере для браузера Opera) задачи

bull управление pop-up меню и контекстными меню

bull обслуживание событий сервера в приложении без перегрузкистраницы Удаленный вызов процедур на стороне сервера и ма-нипуляции фрагментами XML-документов

bull обслуживание устройство независимых событий DOM

bull формы пользовательского интерфейса для отображения динами-ческих деревьев и списков

bull предустановленный редактор HTML

bull API для DragampDrop

bull API для манипуляций с выделениями в содержании

bull API для буфера обмена

Данная спецификация еще совсем сырая Ее редакция от 1марта 2005 буквально пестрит красными пометками laquoвозможно этобудет так но может быть и иначеhellipraquo Завершение ее разработки ве-роятно обогатит браузер Opera новыми возможностями но вряд лиэто будет заметно на фоне более значимых инноваций конкурентов

32

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 33: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Пример Задание модели событий для формы календарь

Источник httpwwwwhatwgorgspecsweb-appscurrent-work

ИтогиОбщая картина вырисовывается следующим образом

Microsoft сконцентрировала усилия на то что бы стереть грань меж-ду браузером и настольными приложениями Для этого создаетсяплатформа Longhorn включающая язык разметки интерфейсовXAML В основе Longhorn предусмотрен системный слой CLR га-рантирующий переносимость приложений для различных устройств

В тоже время рабочая группа Mozilla не покушается на стерео-типы веб-разработчиков но тем не менее предоставила инструментXUL позволяющий писать веб-приложения по функциональностиблизкие к настольным Очевидное преимущество сообществаMozilla на данный момент в наличии целого ряда уже реализован-ных приложений представленных на сайте MozDevorg В сторонеот схватки сообщества open source и софтверной империи Microsoftкомпания Macromedia успешно продвигает технологию Flex

Решения от Macromedia традиционно отличаются впечатляю-щим мультимедиа и Flex не исключение из этого правила Популяр-ность Flash в проектах презентационного характера трудно переоце-нить а технологический дуэт MXML и ActionScript 2 открываетMacromedia нишу полнофункциональных бизнес-порталов Впро-чем эффект от качественных Flex-приложений по-прежнему требу-ет дополнительных трудозатрат так что смею предполагать этатехнология не станет основным инструментом большинства веб-раз-работчиков

33

ltcalendargt ltdiv class=vcalendargt ltspan class=prodidgt-hCalendarENltspangt ltspan class=versiongt20ltspangt ltp class=veventgt lta href=httpwwwweb2concomgt ltspan class=dtstartgt20041005ltspangt- ltspan class=dtendgt20041007ltspangt ltspan class=summarygtWeb 20 Conferenceltspangt ltagt ltpgt ltdivgt ltcalendargt

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 34: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Но спустимся на грешную землю Типовое техническое зада-ние на веб-проект включает требования поддержки наиболее попу-лярных браузеров Те автоматически отпадают технологии XAMLи XUL Можно было выбрать Flex ведь плагин Flash Player легкоинтегрируется в различные браузеры Однако стоимость FlexPresentation Server ставит под сомнение рентабельность длябольшинства компаний занятых в веб-разработке Кроме того каж-дое из заявленных решений влечет язык разметки пользовательскогоинтерфейса

Однако в каждом из случаев это скорее язык браузераплат-формы нежели концепция описания интерфейса Именно по этому явключил в обзор язык UIML не привязанный к какой-либо платфор-ме но четко разделяющий абстрактные приложения Таким об-разом UIML задает структуру интерфейса его оформление его со-держание и его поведение Это модель описания интерфейсов кото-рая просто-напросто наиболее интуитивно понятна А так UIML апо-литичен на мировом ИТ-рынке он с одинаковой легкостью можетиспользоваться для трансляции кода в любые браузеры на любыеустройства UIML не разрушает привычный технологический про-цесс веб-разработки но дополняет его

Разработчик может по-прежнему опираться на выбранные ра-нее технологии HTML XHTML CSS XSL WML и тд А что каса-ется доступности то нам остается лишь выбрать на свой вкус одиниз open source процессоров UIML и установить его на свой сервер

Сравнительная таблица языков разметки пользовательскогоинтерфейса

Язык разметки MXML XAML XUL UIML

Готовность В настоящеевремя

Официальноожидается в

2006 году

В настоящее время В настоящеевремя

Доступностьприложений

Платформы Выполняетсяна любой

платформечерез Flash

Player 7

Выполняетсятолько наLonghorn

Выполняется наплатформах

WindowsUnixMacчерез Gecko-

базированныйбразуер

Преобразованныйдокумент доступен

на любыхплатформах

Устройства - Независимостьв рамках CLR

- Устройство-независимый язык

Серверная часть FlexPresentation

Server

Longhorn Нет специальныхтребований

Любой из UIML-процессоров настороне сервера

34

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 35: #11, Март'2005 :: Frameworks

PHP Inside 11 Языки описания пользовательских интерфейсов

Объектно-ориентированныйпрограммный язык

ActionScript20

Языкисемейства NET

Javascript PythonC++

Java Javascript

Расширенныеэлементыпользовательскогоинтерфейса длянавигации иконтроля данных

Отлично Хорошо Средне Нет поддержки

Векторнаяграфика

Отлично Отлично Средне Нет поддержки

Спецэффектыэлементовпользовательскогоинтерфейса

Отлично Хорошо Средне Использует JavaAWT

Модель событий(диапазонконтролируемыхсобытийэффективностьмодели)

Хорошо Хорошо Хорошо Отлично

Ассоциативныйуровеньвосприятиямодели

Хорошо Средне Средне Отлично

Документация Отлично Средне Средне Хорошо

35

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 36: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

Где моя CVS чувакТакой немного отвязный заголовок был взят для этой статьи

неспроста Цель данного материала ndash рассказать о базовых воз-можностях системы контроля версий CVS (Concurrent VersionsSystem) Работать с этой технологией довольно просто но для ра-боты с ней необходимо прежде всего установить и настроить сер-верную часть системы Установка и настройка CVS-сервера дляновичка - это вопрос довольно обширный и автору не хотелось быостанавливаться на нем подробно так как это немного отвлекаетот ответа на главные вопросы ndash что же умеет CVS и как без осо-бых временных затрат поработать с ней на практике Поэтомудля начала попробуем поэксперементировать на бесплатном CVS-хостинге httpcvsdudeorg (Dude (англ) ndash чувак)

Для чего нужны системы контроля версийПодобные системы позволяют вести полную историю измене-

ний ваших файлов с исходными кодами Всегда можно посмотретьпредыдущие редакции (в терминологии CVS это называется ревизи-ями) файлов с исходниками ознакомиться с комментариями длякаждой ревизии и выстроить общую картину внесенных измененииа если это необходимо то и совершить откат к предыдущим верси-ям Помимо выполнения своей архивной функции CVS фактиче-ски является инструментом групповой разработки и позволяетнескольким разработчикам вести одновременную работу над темиили иными файлами

Представьте простую ситуацию когда вы взяли из общегохранилища PHP-файл и начали дописывать в него некоторый код Вэто же время ваш коллега обнаружил в этом файле очень опаснуюошибку также скачал его к себе поправил ошибку и снова положилфайл в общее хранилище Вы не зная об этом дописали свой код иположили обновленный файл туда же Что произойдет Тем самымвы затрёте все изменения сделанные вашим коллегой в то время какон будет думать что ошибка в скрипте им закрыта Конечно можнорассылать друг другу уведомления или разделять файлы на ldquoсферывлиянияrdquo однако CVS гораздо эффективнее решает подобныепроблемы

CVS помогает в работе даже в том случае если над проектомработает один разработчик В практике веб-разработчиков нередкислучаи когда PHP-система написанная для одного заказчика начи-нает развиваться и к другому заказчику попадает уже в более про-двинутом виде а на пути к третьему клиенту ее совсем не узнатьтак как в ней могут быть переписаны ключевые моменты При всемпри этом необходимо сопровождать все три версии

Для решения этого вопроса также можно воспользоваться раз-личными уловками однако CVS послужит в данной ситуации нетолько централизованным архивом но и даст разработчику в рукиинструменты для отслеживания изменений и параллельного разви-тия нескольких версий одной системы

36

Автор Андрей Олищук

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 37: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

К плюсам CVS можно отнести то что она работает на различ-ных платформах (в том числе и Win32) и распространяется бесплат-но на условиях GPL Помимо нескольких вариантов реализациисерверной части существует множество клиентских программ ко-торые также работают под различными платформами и распростра-няются бесплатно

ИнструментарийДля работы с CVS необходимы две вещи CVS-сервер и CVS-

клиент Как было сказано в самом начале статьи в качестве серверамы будем использовать бесплатный CVS-хостинг на сервереcvsdudeorg чтобы сразу не погружаться в установку и настройкусвоего собственного так как это лучше сделать поcле некоторогознакомства с системой

Вы можете самостоятельно посетить cvsdudeorg и зареги-стрировать отдельный аккаунт чтобы далее работать с ним (реко-мендуется) а можете также использовать тот тестовый аккаунт ко-торый был заведен специально для этой статьи (подробнее о на-стройках далее) Бесплатный CVS-хостинг на cvsdudeorg имеетограничения на объемы закачиваемой информации в 2 мегабайта(что вполне достаточно для веб-проектов) и ограничение на количе-ство пользователей одного проекта Разрешено всего два пользова-теля собственно сам администратор и еще один дополнительныйпользователь При внесении изменений в репозиторий (хранилище)всем пользователям на e-mail рассылаются уведомления с описани-ем внесенных изменений

Теперь определимся с программой-клиентом Здесь оченьмногое зависит от операционной системы вашего компьютера с ко-торого вы планируете работать с CVS Не смотря на то что средивеб-разработчиков существует огромное количество почитателейnix многие из них в качестве ldquoдомашнейrdquo операционной системы(ОС) используют Windows PHP к счастью в большинстве случаевпозволяет писать и тестировать код под одной ОС а использоватьего в работе на другой ОС

Я для себя выбрал клиентскую программу под Windows -tortoiseCVS (httpwwwtortoisecvsorg) Вам не обязательно уста-навливать эту программу если вы хотите попробовать какую-тодругую или по тем или иным причинам вам доступно только иноеПО Если же сейчас для вас нет никакой разницы в выборе CVS-кли-ента то tortoiseCVS будет очень хорошим стартом В любом случаевсе примеры в данной статье будут приводиться именно наtortoiseCVS но это не исключает возможности использования любо-го другого CVS-клиента

Итак для начала посетите сайт httpwwwtortoisecvsorg скачайте последнюю версию программы и установите ее на своемкомпьютере Установка не отличается какими либо особенностямипоэтому ее рассмотрение опустим Теперь вам нужен только доступв интернет и подготовку инструментария можно считать выполнен-ной

37

Тем временем

Если вы хотите чтобы HTML-кодгенерируемый вашим PHP-скриптомбыл более читабельным в исходномвиде (например при использованиикоманды браузера View Source илиView HTML) то в конце каждойвыводимой на экран строки ставьтеспециальные символы rn Примерltphpecho ldquolth1gtЗаголовокlth1gtrnltpgtАбзацltpgtldquo gt

Для получения размера файла вкилобайтах можно использоватьследующий код

$KB_size = number_format(filesize($file_name)1024) Kб

Подробнее об использованиифункции number_format() можноузнать по адресуhttpru2phpnetmanualrufunctionnumber-formatphp

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 38: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

Самые основы CVSПеред тем как приступить к работе с CVS необходимо позна-

комиться с некоторыми терминами и принципами ее работы

Схема работы с системой довольно проста На сервере (в на-шем случае это cvsdudeorg) существует репозиторий (хранилилще)в котором хранятся все файлы и служебная информация к ним Дляначала работы в репозитории создается модуль ndash прообраз самосто-ятельного проекта

Начиная разработку программист скачивает на свою локаль-ную машину копию репозитория (процедура скачивания называетсяcheck out) и в последствии работает уже с этой копией на своей ма-шине После окончания работы отредактированные локальныефайлы заливаются обратно в репозиторий и хранятся там (операцияldquoзаливкиrdquo называется check in или commit)

Когда будет необходимость приступить к редактированию вследующий раз то вам уже не понадобится делать check out всегомодуля Достаточно будет выполнить команду update и к вам на ма-шину зальются только те файлы которые были обновлены со време-ни вашего последнего чекаута

Конечно же CVS предоставляет разработчикам множестворазличных возможностей но в рамках данной статьи будут упомя-нуты только некоторые из них

Начинаем работуКак было сказано выше в рамках статьи мы рассматриваем

работу CVS-клиента tortoiseCVS на операционной системе WindowsЭтот клиент отличается тем что встраивается в контекстное меню ине имеет единого графического интерфейса (кроме диалоговых окондля конкретных команд и окна конфигурационных настроек) поэто-му не ищите эту программу в меню программ Windows Там вынайдете только окно конфигурации и справочные материалы Воттак может выглядеть контекстное меню после установки клиента

Если вы регестрировали свой аккаунт на cvsdudeorg (что ре-комендуется) то для начала работы вам необходимо создать модульна их CVS-сервере Для этого создайте директорию на локальномдиске (к примеру с именем mymodule) зайдите в эту директориюсоздайте какой нибудь простой PHP-файл откройте контекстноеменю и выберите команду CVS -gt Make new module

38

Тем временем

Если из строки содержащей путь кфайлу нужно извлечь имя самогофайла то можно воспользоватьсяфункцией basename() Напримерназвание текущего файла можнополучить следующим образом $curr_file = basename($PHP_SELF)

Более подробную информацию поиспользованию функции basename()можно получить по адресуhttpruphpnetmanualrufunctionbasenamephp

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 39: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

Далее введите ваши данные по образцу

Нажмите кнопку ОК Теперь модуль будет создан

Для начала работы над уже заведенным мной тестовом моду-лем зайдите используя проводник Windows (explorer) в ту директо-рию в которую хотите скачать рабочую версию проекта К примеруCCVS Далее в контекстном меню (открывается нажатием правойкнопки мыши) выберите пункт CVS Checkout и введите данные ко-торые показаны на рисунке ниже Если вы регистрировали свой ак-каунт на cvsdude то введите данные по аналогии

39

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 40: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

Когда данные введены жмите кнопку OK Для подключения кCVS-серверу cvsdudecom у вас конечно же должно быть установ-лено соединение с интернетом и должен быть открыт порт 2401(обычно его закрывают только в корпоративных локальных сетях)

При первом подключении будет запрошен пароль В окошкеввода пароля наберите phpinside и нажмите кнопку ОК При после-дующих подключениях пароль обычно не запрашивается Если всепрошло удачно то на вашем локальном диске появится новая папкаtest_module в которой и хранятся все файлы проекта Далее вампредстоит работать с ней поэтому не рекомендуется ее удалятьдаже не смотря на то что в любые другие места вы можете скачатьнеограниченное количество копий (ограничения накладывает толькообъем вашего жесткого диска)

Работа над проектомКогда модуль скачан на локальный компьютер приходит вре-

мя начать работу непосредственно с его файлами Благодаря CVS сними можно выполнять целый ряд операций

40

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 41: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

Создание и фиксация файлов в проектеВ только что полученной директории модуля создайте файл

testphp и поместите в него какой либо PHP-код Вы можете такжевернуться к редактированию спустя некоторое время После тогокак вы решили что файл готов для фиксации в CVS выделите егокликом мыши откройте контекстное меню и выберите командуAdd Эта команда регистрирует файл на сервере CVS но пока ещене добавляет сам файл в репозиторий

Когда команда Add будет выполнена вы увидите что пикто-грамма файла сменилась с вопросительного знака на плюсик Этосвидетельствует о том что изменился и статус файла в вашей ло-кальной системе Вопросительный знак означал что CVS не знаеттакого файла Появившийся плюсик говорит о том что данная вер-сия файла еще не фиксировалась на CVS-сервере с этого компью-тера Другими словами плюсик означает статус ldquoфайл известенCVS но не сохранен в репозиторииrdquo

Для фиксации файла через контекстное меню выберите ко-манду CVS commit Перед вами откроется окно управления фикса-цией где к данной версии (ревизии) можно написать какой либокомментарий Не поленитесь и впишите пару строк текста Коммен-тарий будет относится не просто к файлу а к этой конкретной вер-сии файла Если файл в дальнейшем будет обновляться то к каж-дой его версии можно будет создавать комментарий и таким об-разом выстраивать целую историю изменений Подтвердите фикса-цию нажатием кнопки OK Пиктограмма зафиксированного файлаизменится на другую

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

пользователь Для имитации действий второго пользователя попро-буйте скопировать к себе модуль в другую локальную директориюуказав в параметрах чекаута имя пользователя phpinside2 и парольphpinside Если вы заводили свой аккаунт то зайдите в его настрой-ки на cvsdudecom и заведите дополнительного пользователя (менюсайта project management -gt authorized accounts)

После проведенного чекаута у вас на машине будет две ло-кальные копии текущего модуля (проекта) В старой копии (сделан-ной от имени первого пользователя) измените PHP-файл и зафикси-руйте его в репозитории командой контекстного меню CVS commit

Таким образом возникнет такая ситуация когда во второй ва-шей локальной копии файлы окажутся устаревшими Поэтомуперед тем как начать работу со второй копией выделите ее директо-рию кликом мыши и выполните команду контекстного меню CVSupdate CVS-система сама сравнит версии всех файлов локальной ко-пии и версии хранящиеся в репозитории и положит вам в локаль-ную копию все обновления Те файлы которые были не тронуты современи последнего чекаута так и останутся в репозитории и не со-здадут лишнего интернет-траффика

41

Тем временем

Для того чтобы получитьвчерашнюю дату можновоспользоваться возможностямифункции date() к примеруследующим образом

$yesterday = date(dmy mktime(0 00 date(m) date(d) - 1 date(Y)))

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 42: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

История версийКаждая команда CVS commit не просто фиксирует ревизию

файла на CVS-сервере но и обозначает его как новую версиюОбычно самой первой ревизии присваивается номер 11 а следую-щей соответственно ndash 12 Для всех последующих ревизий прираще-ние идет на 01 Конечно существуют возможности повлиять на этунумерацию но с этим вы сможете разобраться позже самостоятель-но

Если при каждой фиксации вы оставляли комментарии то те-перь будет возможность посмотреть не только дерево ревизий но иисторию всех изменений конкретного файла Для этого просто выде-лите нужный файл и через контекстное меню выполните командуCVS -gt History Появится примерно следующее окно

В данном окне можно увидеть какая ревизия когда была выло-жена кто автор сколько строк изменено и какие оставлены коммен-тарии Однако это еще не все

42

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 43: #11, Март'2005 :: Frameworks

PHP Inside 11 Где моя CVS чувак

Сравнение двух ревизийНе закрывая окна с историей ревизий выделите две любые ре-

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

Используя эту опцию можно посмотреть все различия междуэтими версиями

ИтогиЗдесь мы рассмотрели самые основы работы с CVS используя

CVS-хостинг httpcvsdudecom и CVS-клиент tortoiseCVS Конеч-но самые ldquoвкусностиrdquo CVS остались за бортом (например ветвле-ние проекта разрешение конфликтов между ревизиями слияние ве-ток и ревизий и многое другое) но возможно вам будет полезен идостаточен уже описанный выше функционал Главное чтобынемного разобравшись с основами вы смогли разобраться с деталя-ми самостоятельно и в короткие сроки

43

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 44: #11, Март'2005 :: Frameworks

PHP Inside 11 Zend Platform Подробности

Zend Platform ПодробностиКомплекс Zend Platform расположен между непосредствен-

но PHP (Zend Engine) и PHP-скриптами организации то естьпредоставляет платформу на которой базируется комплекс Web-сервисов бизнес-приложений систем управления контентом ин-транет- и b2b-приложений Такая тесная интеграция позволяетZend Platform глубоко проникать в ваши PHP-приложения улуч-шать производительность PHP и повышать контролируемостьсред разработки тестирования и производственных сред

Рис 1 Взаиморасположение Zend Platform и комплекса прило-жений PHP

Рис 2 Архитектура Zend Platform

44

Оригинал статьиhttpwwwzendcomstoreproductszend-platformin-depthphp Перевод Данил Миронов[patrungel]

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 45: #11, Март'2005 :: Frameworks

PHP Inside 11 Zend Platform Подробности

PHP IntelligenceОдним из рабочих механизмов Zend Platform является PHP

Intelligence - это событийно-управляемая система которая в режимереального времени проводит анализ ваших PHP-приложений Полу-ченная с её помощью оперативная информация позволяет быстрее илегче разрешать возникшие проблемы

С помощью PHP Intelligence разработчики и IT-специалистынаконец смогут проникнуть внутрь своих PHP-приложений и полу-чить любые жизненно важные сведения которые им только могутпонадобиться включая спады производительности ошибки скрип-тафункций проблемы с базами данных При этом разработчик по-лучает полный контекст проблемы

Здесь Zend Platform

bull Отслеживает поведение скриптафункции и подсчитывает нор-мальные средние значения предоставляя тем самым наилучшееуказание на проблемные участки кода

bull До минимума снижает время восстановления рабочей системыпредоставляя чёткое и тщательное описание проблемы с учётомполного контекста проблемы и правил определённых пользова-телем

bull Позволяет менеджеру сайта незамедлительно сигнализировать окритических ошибках при помощи стандартных XML-based мо-дулей отчётов (SMS email и т п)

bull Благодаря тесной интеграции с Zend Studio предоставляет отла-дочную информацию и данные по рабочему профилю программыдля целей устранения неполадок

bull Объединяет события и тем самым снижает уровень шумов идаёт возможность игнорировать уже известные или незначитель-ные проблемы

Контроль над конфигурацией PHPВ основе Zend Platform лежит мощная система управления

PHP Данная система обеспечивает полный контроль над комплек-сом PHP-приложений включая настройки производительности на-стройки оповещений о событиях и т д

К тому же Zend Platform предоставляет среду в которойapplication-менеджеры могут управлять конфигурацией самогоPHP ndash всё через тот же самый единый web-интерфейс Вся системаработает через SSL и шифрование с открытым ключом таким об-разом обеспечивается безопасность уровня предприятия

Zend Platform экономит драгоценное время системных адми-нистраторов и снижает влияние человеческого фактора при настрой-ке нескольких одинаковых серверов предоставляя возможность

bull Конфигурирования удалённых серверов

bull Клонирования конфигурации PHP с одного сервера на другойили с одного сервера на целую серверную группу

45

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 46: #11, Март'2005 :: Frameworks

PHP Inside 11 Zend Platform Подробности

Система управления производительностью PHPZend Platform оснащён четырьмя модулями управления произ-

водительностью они позволяют проводить аудит скоростей работыи отклика Ваших web-приложений а также улучшать эти показате-ли Эти модули унаследовали все лучшие черты Zend PerformanceSuite которая уже стала стандартным инструментом оптимизациипроизводительности PHP web-сайтов

Акселератор Кода Как правило Акселератор Кода не требу-ет каких-либо изменений в конфигурации или в самих приложенияхПрименяются как различные методы кэширования так и методы оп-тимизации скомпилированного PHP-кода а в результате имеет ме-сто в среднем трёхкратное улучшение производительности

Динамическое кэширование контента Принцип работы Ди-намического Кэширования Контента основан на том наблюдениичто многие динамически сгенерированные web-страницы нередкобывают абсолютно одинаковыми Следовательно можно сохранитьрезультаты исполнения от первого запроса и на последующие запро-сы страница поставляется как есть приложение собственно неисполняется В наиболее распространённых конфигурациях Дина-мическое Кэширование Контента увеличивает производительностьот 20 до 150 раз

Сжатие Файлов Система сжатия файлов Zend Platform позво-ляет владельцам сайтов выдавать динамически сгенерированныйконтент в сжатом виде при этом пропускная способность канала бу-дет использована лишь на 10 от исходной величины

Zend Platform поддерживает прозрачную для конечного поль-зователя декомпрессию доставленных файлов данная поддержкапредоставлена для всех распространённых web-браузеров Благода-ря интеграции модулей в самой Zend Platform Сжатие Файлов осу-ществляется в связке с Динамическим Кэшированием Контента поз-воляя серверу сжимать каждую динамическую страницу лишь еди-ножды таким образом непроизводительные затраты в работе ЦПснижаются до уровня незначительных

Менеджер Загрузок Zend У Apache даже такая тривиальнаязадача как отправка большого файла требует отдельного полно-ценного процесса Для сайтов на которых выложены большиемультимедийные или просто бинарные файлы (видео изображенияаудио trial-версии ПО и т п) это означает что Apache быстро ис-черпает все свои ресурсы и перестанет откликаться на запросы

Менеджер Загрузок Zend от Zend Platform способен подклю-читься непосредственно к любой существующей конфигурацииApachePHP и разгрузить процесс отправки больших файлов черезApache тем самым освобождая последнего для обработки болеесложных запросов связанных с PHP Как правило при поддержкеМенеджера Загрузок сервер способен на 10-кратное увеличение чис-ла одновременных файловых загрузок

46

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 47: #11, Март'2005 :: Frameworks

PHP Inside 11 Zend Platform Подробности

Мост интеграции PHPJavaМост интеграции PHPJava от Zend Platform позволяет компа-

ниям вложившимся в серверы приложений J2EE использовать иPHP - язык номер один в мире для web-приложений Существует иобратная связь при помощи Моста интеграции PHPJava различныеPHP-направленные компании могут применять в своей работе J2EEсервисы недоступные в скриптовых языках При этом Мост инте-грации PHPJava от Zend Platform не ограничивается взаимодействи-ем с одними лишь J2EE- и унаследованными системами он предо-ставляет также возможность работать с простыми Java-объектами

Мост интеграции PHPJava от Zend Platform ndash это уникальнаяразработка в числе достоинств которой ndash невиданные ранее произ-водительность и масштабируемость В отличие от прочих решенийпо интеграции PHP и Java огромные требования к оперативной па-мяти которых очень затрудняют их внедрение Мост интеграцииPHPJava от Zend Platform потребляет ограниченное количество па-мяти что практически диспропорционально количеству выполняе-мой им работы

Денис Колисниченко автор книг по PHP иLinux

47

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 48: #11, Март'2005 :: Frameworks

PHP Inside 11 Денис Колисниченко автор книг по PHP и Linux

ЛюдиНаши Денис Колисниченко ndash автор книг поPHP и Linux

В продолжение серии материалов ldquoНашиrdquo мы решили взятьинтервью у автора нескольких книг по PHP (в том числе уже и поPHP5) и Linux ndash Дениса Колисниченко Денис пошел нам на встречуи любезно согласился ответить на все наши вопросы

nw Добрый день Наши читатели знают вас прежде всегокак автора самоучителя по PHP 5 и ряда других книг по PHP иLinux однако написание книг это наверное ваша не единствен-ная работа Расскажите пожалуйста о том кем вы работаете

Денис Колисниченко (ДК) Второй год занимаюсь разра-боткой программного обеспечения под заказ и настройкой Linux-серверов Разрабатываю проекты любой сложности - от простогоPHP-сценария до сетевой БД

До этого работал системным администратором и программи-стом ndash по совместительству )

nw Расскажите немного о себе не как о писателе и IT-спе-циалисте а как об обычном человеке Есть ли у вас хобби Каквы проводите свое свободное время Какую музыку любите

ДК Свободного времени очень мало - все занимает работа Нохобби все-таки есть - автомобили в частности BMW - у меня 520E34 ndash хороший надежный автомобиль (когда не ломается ))

Свободное время делится примерно пополам между любимойдевушкой и бумером (иногда больше в пользу последнего что вызы-вает бесконечные и громкие возмущения со стороны девушки )))А в остальном я самый обыкновенный человек ndash работа дом хобби

Музыка - самая разнообразная кроме откровенной попсяти-ны Раньше слушал то что потяжелее но от такой музыки со вре-менем устаешь (сейчас слушаю ее под настроение) и начинаешь слу-шать что-то вроде шансона (современная поп-музыка ничем не при-влекает)

nw По некоторым нашим данным ваша книга Самоучи-тель PHP 5 пользуется довольно хорошим спросом У вас естькакие либо тайны написания успешных книг Расскажите чутьподробнее о процессе работы над книгами Насколько это трудо-емкий процесс Как много уходит времени на написание однойкниги

ДК Каких-либо особых тайн или секретов написания книгнет Есть два момента на которые нужно обратить внимание при со-здании книги но об этом - чуть позже

Процесс создания книг в двух словах создание рукописивычитка рукописи редактором верстка вычитка макета и наконецпечать макета

48

Интервью Андрей Олищук

Я самый обыкновенныйчеловек ndash работа домхобби

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 49: #11, Март'2005 :: Frameworks

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

Наиболее трудоемкий процесс для автора - это написание ру-кописи Сами понимаете хорошую книгу за месяц не напишитедаже если это будет ваше основное занятие Самое главное - описатьту или иную технологию понятным читателю языком Ведь можнопросто перевести на русский официальную документацию HOWTOи издать Но кто такую книгу купит Зачем Ведь можно простоскачать документацию (а может она уже установлена на компью-тере)

Бывает даже и такое что приходится переписывать целые гла-вы или добавлять новые перед самой версткой - просто с моментаначала написания книги до ее вычитки редактором проходит опре-деленное время а компьютерная литература - это не роман которыйвсегда остается неизменным за это время много что может изме-ниться например выйти новая версия дистрибутива или ядра (какэто было при написании второго издания Linux-сервера - вышлоядро версии 26) со всеми вытекающими последствиями Придетсяили переписать определенную часть книги или просто добавить опи-сание новых возможностей

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

И вот прошел месяц с момента выхода кнги из типографии (аможет даже два) в магазине эта книга сразу появляется как Новин-ка Понимающий читатель берет ее в руки и читает версия ядра24 Да какая же это новинка Если версия 26 вышла напримертри месяца назад Вот поэтому и приходится добавлять новый мате-риал - чтобы информация была актуальной Это и есть первый се-крет

Второй - это хороший редактор Ведь редактор - это первыйчитатель книги Он ее вычитывает убирает шероховатости мелкиеошибки и тд Огромное спасибо Марку Финкову - главному редак-тору Науки и Техники - он и есть первый читатель всех моих книг

nw Что вам нравиться делать больше - использовать туили иную технологию или писать о ней Почему

ДК Когда как Иногда хочется создать что-то своими рука-ми ndash например написать то или иное приложение А иногда опи-сать как использовать тот инструмент который используешь в по-вседневной работе Просто хочется поделиться своим опытом рабо-ты с другими читателями Не секрет - я сам часто читаю и форумы икниги других писателей - учиться всем нужно

nw Планируете ли вы написание какой либо новой кни-ги Если да то о чем она будет

ДК Это секрет ) Скоро (наверное ближе к лету) выйдут двемоих новых книги но о чем они я не скажу

Самое главное ndashописать ту или инуютехнологию понятнымчитателю языком

Не секрет - я сам часточитаю и форумы и книгидругих писателей -учиться всем нужно

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 50: #11, Март'2005 :: Frameworks

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw Как вы пришли к PHP Почему именно PHP

ДК С PHP работаю относительно недавно - с конца 2000 годаТогда домашний провайдер переделал свой сайт - он был как разнаписан на PHP Вот я и решил попробовать - разобраться что этотакое

nw Используете ли вы сами PHP 5 в рабочих проектахКакие нововведения вам кажутся наиболее полезными и как выих применяете

ДК Конечно использую PHP-проекты - это половина сдавае-мых мною проектов Вторая половина - это Windows-приложениякак правило базы данных В последнее время было несколько ги-бридных проектов - движок на PHP а модуль управления -Windows-приложение (совмещающее в себе Web- и FTP-клиент)Если раньше такие проекты не заказывались вообще то сейчаспользуются спросом

Суть заключается в следующем движок выводит информа-цию о ресурсах проекта содержающуюся в базе данных MySQLОбновление ресурсов и самой базы данных выполняет Windows-приложение В этом случае пользователю не нужно знать ни основыSQL ни что такое FTP и как с ним нужно работать - он просто ука-зывает нужную информацию и нажимает обновить - за него все де-лает программа

Кроме комфорта пользователь получает в нагрузку привыч-ный ему Windows-интерфейс

nw С какими другими технологиями вам приходится ра-ботать(версии ОС СУБД веб-серверы) Какие их связки вамбольше всего нравятся Почему

ДК Если в двух словах то наиболее часто использую следу-ющи продукты

bull Delphi - не могу сказать что это лучшая среда для разработкиWindows-приложений поскольку 100 ошибусь но к Delphi япривык (использую ее с 1999 года) да и по роду занятий она мнеподходит (базы даных и сетевые приложения) На Delphi можнонаписать абсолютно любое приложение пользовательского уров-ня

bull InterBase - используется как сервер БД в паре с Delphi когда со-здается сетевая БД

bull PHP + MySQL + Apache - идеальная комбинация которая присут-ствует у большинства хостинг-провайдеров ВозможностиMySQL не безграничны но для создания небольшой базы данныхдля Web-проекта их вполне хватает SQLite практически не ис-пользую (пока) - причина указана выше ndash у большинства про-вайдеров установлен именно MySQL

bull Linux и Windows - несмотря на то что я написал несколько книгпосвященных Linux в своей работе я использую обе эти ОС рав-номерно

Сейчас например работаю в Windows XP а ответы на это ин-тервью пишу в The Bate

PHP-проекты - этополовина сдаваемыхмною проектов

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 51: #11, Март'2005 :: Frameworks

PHP Inside 11 Наши Денис Колисниченко ndash автор книг по PHP и Linux

nw И наконец чего бы вы пожелали нашим читателям

ДК Прежде всего я хочу поблагодарить всех читателей - техкто уже купил мою книгу тех кто собирается это сделать и тех ктопокупать ее вообще не будет - просто за то что он читает это интер-вью и журнал PHP Inside

Пожелать могу постоянного совершенствования достиженияпоставленных целей и успеха в работе - это по работе А по жизни -можно пожелать только одного - здоровья а все остальное прило-жится )

nw Спасибо за ответы

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок
Page 52: #11, Март'2005 :: Frameworks

PHP Inside 11 План врезок

План врезокbull Функция MySQL ndash substring_index() - стр 6

bull Функции для перекодирования строк ndash стр 8

bull Функция get_browser() - стр 9

bull Управление phpinfo() - стр 11

bull Обработчики типов файлов для apache ndash стр 13

bull Работа с Outlook ndash стр 15

bull Спецсимволы ndash стр 37

bull Получение размера файлов в килобайтах ndash стр 37

bull Функция basename() - стр 38

bull Получение вчерашней даты ndash стр 41

  • Содержание
  • Анонс
  • В фокусе
    • Каркасы каркасы каркасыhellip
    • Знакомство с Freeform Framework
    • Freeform Framework ndash первые шаги
      • Идеи
        • Языки описания пользовательских
        • Где моя CVS чувак
        • Zend Platform Подробности
          • Люди
            • Наши Денис Колисниченко ndash автор книг по
              • План врезок