Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter
Журналы Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
$1000 на Android: зарабатываем на приложениях для мобильной платформы от Google $1000 НА ANDROID: ЗАРАБАТЫВАЕМ НА ПРИЛОЖЕНИЯХ ДЛЯ МОБИЛЬНОЙ ПЛАТФОРМЫ ОТ GOOGLE
27.07.2010

Пара вечеров экспериментов и неожиданно удачная идея позволили за 2 месяца заработать более $1000. Это гораздо больше, чем я мог ожидать...
Фабрика сплоитов ФАБРИКА СПЛОИТОВ
26.07.2010

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

Трое суток в раю или краткий дневник разработчика

СЕРЁГИН ВЛАДИМИР AKA PEKO

GASUBASU CREW (PEKO@GASUBASU.COM, WWW.GASUBASU.COM)


ТВОЕМУ ВНИМАНИЮ ПРЕДСТАВЛЯЕТСЯ НЕБОЛЬШАЯ ИСТОРИЯ ИЗ ЖИЗНИ ПИРАТОВ МОРЯ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ. ЭТО ПРЕДОСТЕРЕЖЕНИЕ ДЛЯ ЮНЫХ ИСКАТЕЛЕЙ ПРИКЛЮЧЕНИЙ, ГОЛОВОРЕЗОВ С КЛАВИАТУРОЙ НА ПЕРЕВЕС. ХОЧУ СРАЗУ ОБРАТИТЬ ВНИМАНИЕ НА ТОТ ФАКТ, ЧТО В ЭТОМ ВОССТАНОВЛЕННОМ ПО ПАМЯТИ ЛОГЕ СОБЫТИЙ БОЛЬШЕ ЭМОЦИЙ И ЧАСТНОСТЕЙ, ЧЕМ ОБЪЕКТИВНОСТИ И ЗДРАВОГО СМЫСЛА. АВТОР ЗДЕСЬ НЕ ПЫТАЕТСЯ ДИСКРЕДИТИРОВАТЬ ТЕХНОЛОГИЮ AJAX, А ЛИШЬ УКАЗЫВАЕТ НА НЕУМЕСТНОСТЬ ЕЕ ПРИМЕНЕНИЯ КАК ЯДРА В КРУПНЫХ ПРОЕКТАХ, КОТОРЫМ НЕОБХОДИМ НАВОРОЧЕННЫЙ ИНТЕРАКТИВ

Три месяца в аду

Начало конца: появился штурман, провел инструктаж – сегодня начинаем разработку нового игрового онлайн-проекта: - «Флэша не будет вообще, все будет на Аяксе, а ты (ткнул в меня пальцем) будешь заниматься клиентским движком, так как лучше всех знаешь ЯваСкрипт2. Все должно быть гламурно и эффектно!».

Месяц первый – армии мутантов

Неделя первая. Начат поиск достойного фреймворка. Всю неделю рылся в инете, выкачивал примеры, движки, читал восторженные отзывы. Запомнил новое слово «Виджет». Как все прикольно – шевелится, подсвечивается, радует глаз.

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

Неделя третья. Отобрал самых крутых, играюсь, пробую собирать скелет проекта. Все просто замечательно! На сбор тестовой модульной сетки проекта уходит 10 – 20 минут. На забивку его пробным фаршем из стандартных компонентов еще час - полтора! Красота! Радуюсь, как бесплатным конфетам с ликером! 

Неделя четвертая. Опять пришел штурман, отвесил мне пинка. Заявил, что если я, наконец, не определюсь с платформой – будет рыбалка (меня сначала вздернут, а потом прямо на веревке скормят акулам). Я выкатил ящик с плюшевыми аякс-мутантами, разной степени измученности и начал их комментировать: 

  • а dojo – прикольный, кондовенький, сыроват; 
  • b sajax – понятия не имею, нашел на их сайте только пример с умножением двух цифр; 
  • c mochkit – совсем все простенько, но табличку отсортировать смогут; 
  • d pxtk – так и не нашел примеров и документации; 
  • е qooxdoo – модные чуваки, они мне понравились - кандидат номер 1; 
  • f aculo – небольшая коллекция полезных скриптов; 
  • g xajax – ну, умножать цифры они умеют; 
  • h yahoo – слава гугла не дает им покоя, но документация на 5+; 
  • i prototype – эээ, типа модный фреймворк в 390 байт; 
  • j zimbra – посмотрим, когда наши хостеры начнут поддерживать серверную Яву ;
  • k google – без комментариев, но возможно наш дизайнер сможет прикрутить сюда дизайн;
  • l spry – аdobe, пока только умеет сортировать колонки и анимировать картинки; 
  • n tibco – серьезное корпоративное решение, мы разоримся на кофеине, пока разберемся с этим монстром, (смеюсь каждый раз как читаю название - звучит как «чибик»).

На вопросительное «ииии?» мной из-под стола была вынута красивая глянцевая коробка с модным дизайном. На ней красным было написано - Backbase. Я сделал большие щенячьи глаза и завилял хвостом. Из пасти текла слюна.

Месяц второй – все дороги ведут в ад, или о благих намерениях

Неделя первая. Начли разбираться с Backbase. Страшно понравилась система инклудов - сборки темплейтов на стороне клиента, а также конструктор виджетов – объявление своих компонентов и их поведения: 

<s:include b:source=”мои-виджеты/красная-супер-кнопка.xml”/>
<b:red-super-button b:label=”экземпляр кнопки раз”/>
<b:red-super-button b:label=”экземпляр кнопки два”/>

Неделя вторая. Переписали под свой дизайн и интерактив все компоненты Backbase. Возникли небольшие сложности с браузерной совместимостью, но их быстро решили. Все здорово и красиво, проект разложен по папочкам и блестит свежими комментариями. Только почему-то не с первого клика срабатывает кнопка «OK», видимо, эвенты не успевают пробраться через дизайн...

Неделя третья. Начали писать клинет-side логику. Для большинства задач вообще не нужно писать код – почти все проблемы решаются с помощью XPath, например проверку правильности e-mail можно сделать по ходу верстки:

<s:when b:test="@name='email' and not(matches(@value, '^.+@(.+\.)+.{2,4}$'))">
<s:setatt style="background: red; " />
<s:setatt b:valid="false" />
</s:when>

Неделя четвертая. IE делает первый предупредительный выстрел. Дизайнер в панике - стоит отключить кэш у этого браузера – вся верстка начинает беситься, дергаться и моргать. Техподдержка Backbase разводит руками, - «Sorry guys, It`s IE bug!». Что означает - это не наша проблема, у эксплорера баг в прогрузке изображений из CSS, а именно - при каждом новом эвенте он забывает, что картинка уже прогружена и грузит ее снова. Откачивали дизайнера два дня.

Месяц третий - апокалипсис

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

Неделя вторая. Оптимизация. Все силы брошены на увеличение производительности проекта. Выкинули и сократили в коде все, что можно сократить и выкинуть. Руководствуясь подсказками техподдержки Backbase, оптимизировали и переписали 50% всего кода. Прогресс минимален. Начали избавляться от структур Backbase в узких местах.

Неделя третья. Апокалипсис проекта. Первым не выдержал парсер CSS в IE. Видимо, мы все-таки переступили какую-то недозволенную черту с количеством подключаемых в компонентах Backbase CSS-файлов (всего около 10, по числу наших виджетов). Это привело к совершенно неожиданным спецэффектам - ИЕ начал вылетать с ошибкой выделения памяти, попутно увлекая за собой десктоп операционной системы. Видимо, это дала знать о себе старая проблема со слабым парсером CSS

Неделя четвертая. Живем как на вулкане. Не смотря на то что, изуродовав до неузнаваемости структуру проекта, нам удалось добиться относительной стабильности - от бета-тестеров регулярно приходят сообщения, что время от времени проект продолжает убивать браузер. 

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

Грядет полная перестройка проекта, перенос его на более простую, а следственно стабильную платформу.

Новый взгляд на flex

Нельзя сказать, что я не был знаком с Flex и ActionScript. Напротив, это были мои старые приятели. Еще год назад, когда начали появляться первые альфы плеера с АVM2 и ранние сборки Eclipse IDE под Flex, я из интереса скачал и немного попробовал на зуб эти новые и красивые игрушки. С того времени запомнились две вещи: а) шустренько; b) сыровато. Разбираться, а тем более работать с этими технологиями – не представлялось на тот момент возможным, и дистрибутивы осели до лучших времен в архивах. 

Но буквально недавно произошла вторая встреча с Flex, можно сказать, чисто случайная - кардинально изменившая все мое представление о быстрой разработке RIA-приложений. Если о Ajax, XML-/DHTML-технологиях и стандартах сложилось стойкое впечатление крайней тормознутости и слабой кроссбраузерной совместимости, то погружение в среду недавно вышедшего Flex 2 было похоже на хороший глоток кислорода, после которого «в теле такая приятная гибкость образовалась», что меня подкинуло и размазало по потолку, где я и пребываю по сей день, среди розовых пузырей и солнечных зайчиков.

Сутки первые – старый новый знакомый

Крайнее удивление перемежается с приступами дежа вю. Тот же XML, те же объявления пространств имен, что и в Backbase, тот же набор стандартных компонентов с одной лишь разницей: в BB были префиксы <s: … > и <b: … >, a здесь - <mx: … >. 

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

Вот что получилось в итоге:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
xmlns:mx="http://www.adobe.com/2006/mxml" 
xmlns:tpl="tpl.*"
xmlns:loc="loc.*">
<mx:Style source="css/main.css"/>
<mx:VBox>
<mx:ApplicationControlBar>
<mx:ButtonBar dataProvider="{centralColumn}"/>
</mx:ApplicationControlBar> 
<mx:HBox>
<mx:VBox>
<tpl:Logo/>
<tpl:AuthorizationForm />
<tpl:LeftPanel/>
</mx:VBox>
<mx:VBox>
<tpl:PromoBox/> 
<mx:ViewStack id=”centralColumn”>
<loc:RulesPage /> 
<mx:Canvas><loc:PrizesPage/></mx:Canvas>
<mx:Canvas><loc:StatisticsPage/></mx:Canvas>
</mx:ViewStack>
</mx:VBox>
</mx:HBox>
<tpl:BottomMenu/>
</mx:VBox>
</mx:Application>

Собственно, это почти весь проект! Точно так же выглядело то, что мы пытались заставить работать с помощью дорогого навороченного аякс фрейм-ворка Bаckbase – три изнурительных месяца. 

  • <mx: … > пространство имен родных flex-компонентов
  • <tpl: … > мое пространство имен под функциональные темплейты (xml’ки в папке tpl)
  • <loc: … > мое пространство имен под структурные темплейты (xml’ки в папке loc)

Конечно, вещи вроде <tpl:AuthorizationForm /> тоже нужно описать, но они по объему зачастую меньше приведенного здесь отрывка.

На досуге (пока закипал чайник) зачитался документацией – чайник выкипел.

Сутки вторые – компоненты и CSS

После двухчасового сна тело само подскочило и потянулось к клавиатуре реализовывать приснившиеся идеи. Приступил к клиент-сайд логике, попутно имитируя дизайн основного проекта (на стабильную кросс-браузерную верстку которого наш дизайнер убил полтора месяца жизни и килограммы драгоценных нервных клеток). Через 16 часов под аккомпанемент «VoodoPeople» был закончен последний «гламурный» виджет (всего их в проекте около десятка – кнопочки, окошки и прочая интерактивная GUI-ерунда со сложным и не очень поведением). Настало время цеплять реальные данные из базы. Но надо вздремнуть – мониторы слились в два мутных пятна.

Третьи сутки – экспоненциальная эйфория

Начал с самого больного места aякса – таблиц. 

  •  10 записей - никаких проблем, все в порядке, с этим справляется даже aякс;
  •  50 записей – (здесь Backbase издох) - никаких изменений в работе;
  •  100 записей – не вижу разницы;
  •  300 записей – ноль реакции, все в порядке;
  •  1000 записей! – MySQL задумался на 1.5 секунды, возвращая запрос. В скорости работы - никаких изменений!
  •  Две таблицы по 3000 записей в каждой - задержка запроса 3 секунды, скроллбар сжался в черточку, в остальном - вообще не вижу разницы по сравнению с таблицей с 10 записями, сортировка работает практически мгновенно.

В шоке от контрастов, дышу свежим воздухом у форточки.

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

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

Осталась одна небольшая проблема – по ТЗ в этом проекте нет флеша, только аякс… 

Курим…

Общие впечатления

Браузеры не готовы самостоятельно и в полном масштабе взять на себя задачи, решаемые при разработке RIA. И основная причина, на мой взгляд, в том, что на плечи JavaScript machine свалена непосильная нагрузка. Несмотря на то, что ходят слухи о выпуске Майкрософтом вместе с IE 7 новой ускоренной JSM ява скрипт, а, следовательно, Фреймворки, основанные на аяксе, подобны экскаваторам из фанеры, - красивы и эффектны, но только до первой траншеи. 

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

Разработчикам FP9/AVM2 удалось приблизить производительность ActionScript3 к Java (не путать с Java Script), сохранив при этом простоту языка и миниатюрный размер плагина, тем самым практически поставив себя вне конкуренции в области RIA-технологий.

Но самое главное преимущество Flex+AS3+Flash технологий кроется не в производительности, а в том, что, выполняясь на своей собственной VM-машине, твой проект будет выглядеть и работать точно так же в любом браузере, имеющем FP (а это, по заверениям adobe, 75% аудитории).

ГЛОССАРИЙ

  1.  AJAX - ТЕХНОЛОГИЯ АСИНХРОННОЙ ПОДГРУЗКИ И МОДИФИКАЦИИ СОДЕРЖИМОГО HTML-ДОКУМЕНТА.
  2.  JAVASCRIPT - СКРИПТОВЫЙ ЯЗЫК ДЛЯ ВЫПОЛНЕНИЯ НЕСЛОЖНЫХ ПРОГРАММНЫХ ЗАДАЧ В ПРЕДЕЛАХ СРЕДЫ ДОКУМЕНТА.
  3.  WIDGET – ВИЗУАЛЬНЫЙ КОМПОНЕНТ, ПОДОЗРЕВАЮ, ЧТО ПРОИЗОШЕЛ ОТ GADGET.
  4.  BACKBASE – КОММЕРЧЕСКИЙ AJAX-ФРЕЙМВОРК СТОИМОСТЬЮ 8000 ЗЕЛЕНЫХ ПРЕЗИДЕНТОВ.
  5.  INCLUDE - ВКЛЮЧЕНИЕ В ИСХОДНЫЙ КОД ВНЕШНИХ ФАЙЛОВ.
  6.  TEMPLATE – КУСОК ЧАСТО ПОВТОРЯЮЩЕЙСЯ ВЕРСТКИ.
  7.  EVENT – СОБЫТИЯ. МЕХАНИЗМ СООБЩЕНИЯ КОДУ, ЧТО ПОЛЬЗОВАТЕЛЬ ЧТО-ТО СДЕЛАЛ.
  8.  CLIENT SIDE LOGIC – НЕСЛОЖНАЯ ЛОГИКА НА СТОРОНЕ КЛИЕНТА, НАПРИМЕР ПРОВЕРКА ПОЛЕЙ ФОРМЫ.
  9.  XPATH – РОДСТВЕННАЯ XML-НОТАЦИЯ ДЛЯ БЫСТРОЙ АДРЕСАЦИИ УЗЛОВ СТРУКТУРЫ.
  10.  INTERNETEXPLORER – БРАУЗЕР, 80% АУДИТОРИИ :).
  11.  BUG - ОШИБКА В КОДЕ.
  12.  DISPATCHER – КОД, ПЕРЕДАЮЩИЙ СОБЫТИЯ ИХ ОБРАБОТЧИКАМ. 
  13.  PARSER – КОД, ЗАНИМАЮЩИЙСЯ ПРЕОБРАЗОВАНИЕМ МЕТАТЭГОВ В КОНЕЧНУЮ ВЕРСТКУ.

Содержание





Предыдущие номера


    Rambler's Top100