Flex и RIA блоги



2008-02-23

13:08:05, WebService //Flash
Flex 3 выходит совсем скоро?

Ted Patrick в своем репертуаре. Своей публикацией “A long time ago in a galaxy far, far away…” он сбивает с толку… мне кажется что он хотел сказать, что релиз Flex 3 произойдет со дня на день… да и скриншот прилагает соответствующий…

Tags:


2008-02-22

16:10:23, LIFE.Flash
Релиз MDM Zinc™ 3.0

Соврешенно неожиданный для меня релиз - MDM Zinc™ 3.0. Чего-чего, а привыкнув к версии 2 - эта версия свалилась как снег на голову.

Zinc™ 3.0 - это Rapid Application Development для Adobe® Flash. Например с английского - Rapid Development переводится как бурное развитие :) И это действительно так.

Вот небольшой список новинок:

Новый GUI. Zinc™ 3.0 для Windows & MacOS. Одна из главных новинок - новый переработанный Zinc™ 3.0 GUI. Детали на скриншоте. А также, что теперь есть версии для Windows и MacOS.
 

Zinc™ 3.0 X-Platform, X-Compile™. Теперь Zinc - это действительно средство, для кроссплатформенной разработки приложений. SWF в приложения для Windows, Mac OSX и Linux, да и теперь и под Linux (они это все-таки сделали). Новая фишка X-Platform, X-Compile™! Используя новую систему управления плагинами, Zinc™ 3.0 Builder может компилировать SWF в приложения для Windows, Mac OSX и Linux, как из под Windows, так и из под MacOS.

 
Модулированное(Modularized) командное API
Zinc™ 3.0 вводит совершенно новое API и новую систему управления плагинами. Классы {mdm}Script 3.0 теперь являются частью командных модулей, которые вы можете включать или выключать по необходимости. Также это означает, что опытные разработчики могут создавать свои модули для Windows и MacOS
   

Ну и естественно - поддержка:

:)

Это небольшое описание новинок нового Zinc. См. подробнее.
Я обязательно обновляюсь, благо всего $199.99, а нового и нужного масса.


13:46:38, Flash-ripper.com
Рассказ Aqua, давшей UAFPUG место встречи, формат и печенье

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

Данную жаркую форму общения хотелось бы сохранить и впредь :) Возможной же она стала благодаря Aqua, вовремя предложившей для встречи очень удобное помещение практически в центре города. 11 февраля она написала свой собственный рассказ о встрече UAFPUG0 — читаем, радуемся, и говорим: спасибо тебе, Aqua!


12:28:27, DimZ
Как сделать flash баннер по техническим требованиям площадки?

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

(more…)


11:35:18, DimZ
Технические требования к баннерам

Технические требования к баннерам на разных  площадках. Начнем с главных рекламоразместителей рунета. Список далеко не полный, но начало положено. (more…)


10:17:00, Flash-разработка
Внутренности Flex Framework. Flex SWF. Flex
Заканчиваем изучать первую часть "Внутренностей Flex Framework".
Всё в чём я сомневаюсь, буду помечать знаком (#?) где #- ID сомнения (для последующего комментирования).

SystemManager


  • Является корневым объектом (Root) SWF.
  • Является классом, инстанцируемым в первую очередь.
  • Контролирует и координирует инициализацию приложения
    - инстанцирует и отображает класс Preloader
    - инстанцирует класс Application
  • Управляет слоями порожденных объектов, отвечающих за всплывающие окна (popups), курсоры и контекстные подсказки (tooltips)
  • Способствует управлению классами в ApplicationDomain-ах

Инициализация Flex SWF

  • SWF Flex-приложения является клипом с двумя фреймами
  • Первый фрейм содержит:
    - SystemManager,
    - Preloader,
    - DownloadProgressBar
    - несколько вспомогательных классов.
  • Второй фрейм содержит:
    - остальные элементы фреймворка,
    - код приложения
    - ассеты (вспомогательные средства) - внедренный шрифт, графика и т.д.
    Кастомные (пользовательские) компоненты и все их ассеты располагаются во втором фрейме.

Инициализация Flex SWF. Frame 1

  • Загружается объем данных, достаточный для активизации первого фрейма
  • Flash Player выполняет полученные данные. При этом:
    - он инстанцирует SystemManager
    - SystemManager командует проигрывателю остановиться на конце фрейма (1?)
    - SystemManager создает Preloader
    - Preloader
    создает DownloadProgressBar
    - Preloader и DownloadProgressBar начинают осуществлять мониторинг загрузки оставшихся данных
    - SystemManager начинает прослушивать событие frameEnd
  • Flash Player останавливается на конце фрейма и продолжает загружать SWF-файл.

Инициализация Flex SWF. Frame 2

  • Как только все данные будут загружены, Flash Player генерирует событие frameEnd
    - SystemManager
    инстанцирует класс Application
    - устанавливает ссылку на себя в свойство Application.systemManager
    - SystemManager начинает прослушивать событие preloaderDone
    - Application
    создает все свои объекты (children)
  • Flash Player начинает посылать событие enterFrame и выполнять события Events
    - LayoutManager
    обрабатывает созданные объекты
  • В конечном счете, приложение (Application (2?)) генерирует событие о завершении своего создания creationComplete
    - Preloader
    начинает удаление DownloadProgressBar
    - Preloader генерирует событие preloaderDone
    - SystemManagers
    добавляет Application в дисплей-лист
    - SystemManagers командует Application генерировать событие applicationComplete

Информация, приведенная выше, ознакомила нас в общих чертах с процессом инициализации Flex-приложения. Если не обращать внимания на пару вопросов, всё предельно ясно.

В контексте темы загрузки и инициализации, хочется еще раз упомянуть создание прелоадера для Flex-приложения. Любопытно, что в описанном этой статьей методе, специально указывается мета-тег для генерации второго фрейма [Frame(factoryClass="MyFactoryClass")]. Если верить "Внутренностям Flex", то на самом деле, мета-тег не "вынуждает" создавать второй фрейм, а лишь объявляет factoryClass, а второй фрейм присутствует по-любому во всех Flex-приложениях.

Продолжение "внутренностей" - вторую часть этого увлекательнейшего документа - мы очень жаждем увидеть у Роста на горячо нами любимом Флэш Потрошителе.


2008-02-21

22:00:13, DL1t's blog
AIR for Linux: Уже pre-beta!

Итак, разработка AIR под Linux идет полным ходом, и уже началось закрытое тестирование. Точнее, относительно закрытое, т к несмотря на отсутствие публичной беты, можно попытаться добраться до нее уже сейчас. Информацию об этом можно почерпнуть здесь. Затем ожидаются публичные бета-версии. На данный момент, судя по описаниям, большинство приложений работает нормально, но бета еще не функционально полноценна.
Maybe we will finally know whether penguins can fly when given AIR (с) James Ward


21:05:32, Flash-ripper.com
uafpug0.as — отчет о встрече флэшеров в Харькове

Угадайте с нулевого клика, кто написал отчет о харьковской встрече флэш- и флекс- разработчиков в формате ActionScript? С фотографиями! С исходнегом прелогаецо?

Update: автор сообщает, что код отчета был написан быстро, а вот отладка заняла время.


14:26:11, Flash-ripper.com
Метапрограммирование во Flex при помощи метаданных

Документация по Flex утверждает, что метаданные используются во Flex-приложениях для указания компилятору и парсеру дополнительных параметров классов, их свойств или методов. Например, в коде AS3-класса можно указать его события с помощью мета-тэгов [Event] (пример). После этого компилятор и парсер кода начинают "понимать" указанные события и при использовании данного AS3-класса в качестве MXML-компонента среда разработки Flex Builder будет выдавать к нему соотвествующие подсказки кода. А указав для свойства класса мета-тэг [Inspectable], вы сделаете его доступным инспектору свойств компонента (панель "Flex Properties"). Это встроенные мета-тэги, вот их полный список: Metadata tags in Flex 3. Присказка закончилась, дальше идет сказка.

Использование собственных мета-данных в AcationScript-классах

Со времен Flex 2 во Flash Player API встроена возможность получать доступ к мета-данным классов во время выполнения через т.н. Reflection API (метод describeType()). Это недокументированная возможность, поскольку документация говорит только об использовании мета-данных компилятором.

Более того, можно не только получить доступ к встроенным метаданным в время выполнения, но и вводить собственные мета-данные, не предусмотренные разработчиками Flex Framework. А чтобы они вместе со встроенными мета-данными попали в откомпилированное приложение, нужно указать их в опции компилятора -keep-as3-metadata.

Примеры использования собственных метаданных во Flex

Открываются возможности, осознать которые — целая отдельная задача. Есть примеры. Вот Кристоф Конрац показывает, как упростить общение с базой данных. С помощью собственных мета-данных он описывает структуру таблицы БД в своем ActionScript-классе. Затем показывает, как просто можно работать с описанной в мета-данных таблицей БД, не используя никакого SQL — только ActionScript.

Вот более свежие примеры от Эли Гринфилда, демонстрирующие, как с помощью собственных мета-данных можно вызывать функцию при каждом изменении некоего AS-выражения, или как создавать одно- и дву-направленные связывания между частями вашего компонента, или как в декларативном стиле назначить обработчик события части вашего компонента (online demo).

И Кристоф, и Эли предоставляют исходники к своим экспериментам (не очень сложные).


11:50:57, Лаборатория Январева
Использование Web-сервисов под Flex 2

Бродя по сети, наткнулся на FleXtense -программу, которая создает по WSDL (определениям Web-сервиса) AS3 proxy-классы для соответствующих вызовов.

В ихних примерах есть программа, похожая на ту, что демонстрировали евангелисты на RAFPUG-2 - а именно, получение погоды с веб-сервиса. Поскольку Flex 3, в котором есть похожая функция, еще не вышел, а 3-я бета демонстрирует не очень стабильную работу, может, кому и пригодится.


11:49:36, RIA crumbs
Ньюансы с табуляцией внутри приложения под IE

Небольшой tips’n'trick для тех кто борется или будет бороться с тем, что IE “отхватывает” фокус при навигации внутри Flex приложения табом. Все что нужно сделать, это прописать параметр <param name=”SeamlessTabbing” value=”false”/>. Который реализован для “нативной табуляции” с целью устранить “замкнутость” Flex приложения в себе, чтобы пользователь не “табался” только внутри приложения, но и мог перейти табом в адресную строку браузера и т.п.

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


11:49:36, RIA crumbs
Ньюансы с табуляцией внутри приложения под IE

Небольшой tips’n'trick для тех кто борется или будет бороться с тем, что IE “отхватывает” фокус при навигации внутри Flex приложения табом. Все что нужно сделать, это прописать параметр <param name=”SeamlessTabbing” value=”false”/>. Который реализован для “нативной табуляции” с целью устранить “замкнутость” Flex приложения в себе, чтобы пользователь не “табался” только внутри приложения, но и мог перейти табом в адресную строку браузера и т.п.

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


09:59:00, Flash-разработка
Обработка клавиатуры/фокуса. Flex
Продолжаем знакомиться с "внутренностями" Flex.
Статья посвящается обработке клавиатуры и фокуса. Если с клавиатурой всё ясно, то про фокус можно сказать, что речь идет не о фокусах и трюках, а о понятии активности или готовности в данный момент времени какого-либо элемента интерфейса принимать события от клавиатуры.

Обработка клавиатуры/фокуса

  • В Flash Player предусмотренны свойства, методы и события для обработки клавиатуры и фокуса. Однако он не имеет встроенных средств, реализующих:
    - составные интерактивные элементы
    - модальность
  • Flex берет на себя (или перекрывает) большую часть возможностей Flash Player по обработке клавиатуры/фокуса
  • Flex добавляет новые интерфейсы и свойства для обработки клавиатуры/фокуса
    - интерфейс IFocusManagerComponent
    - свойство focusEnabled
  • UIComponent обладает всеми свойствами IFocusManagerComponent но не реализует его. Это нужно для того, чтобы можно было разделить компоненты на интерактивные (например, TextInput, DataGrid) и не интерактивные (такие как Label, ProgressBar)

Обработка клавиатуры/фокуса. Основы

  • В обработке клавиатуры/фокуса нет ничего сложного:
    - “implements IFocusManagerComponent”
    - UIComponent.keyDownHandler

public class RandomWalk implements IFocusManagerComponent {
override protected function keyDownHandler(event:KeyboardEvent):void {
switch (event.keyCode) {
case Key.DOWN:
}

  • Если компонент не реализует интерфейс IFocusManagerComponent, то его свойства, относящиеся к обработке фокуса, не имеют никакого действия.
    - Компоненты-контейнеры должны контролировать свое свойство tabChildren (контейнер может не реализовывать интерфейс IFocusManagerComponent, но это свойство позволит обрабатывать изменение фокуса по клавише TAB у вложенных в него объектов)
  • Свойство focusEnabled компонента устанавливает, будет ли FocusManager обрабатывать другие свойства, связанные с фокусом для этого компонента.
    - Используется для выключения обработки фокуса вложенных компонентов, а также для обозначения составных компонентов
  • Свойство tabEnabled компонента устанавливает, будет ли FocusManager, при нажатии клавиши TAB, передавать фокус этому компоненту.
    - при этом необходимо, чтобы у всех компонентов-контейнеров, в которые данный компонент вложен), свойство tabChildren==true
  • Свойство mouseFocusEnabled компонента устанавливает, будет ли FocusManager передавать фокус этому компоненту при клике на него мышью.
    - Если false, то проверяется свойство mouseFocusEnabled компонентов-родителей.

Обработка клавиатуры/фокуса. Композиция

  • Большинство компонентов не являются составными (не используют композицию):
    - Button
    - CheckBox
    - ButtonBar! (3?)
  • У составных компонентов может быть несколько внутренних компонентов с реализацией IFocusManagerComponent.
    Кроме того, составные компоненты могут генерировать внутренние компоненты IFocusManagerComponent динамически.
    При нажатии клавиши TAB, осуществляется навигация между внутренними компонентами IFocusManagerComponent.
    - Например, составными компонентами являются редакторы элементов DataGrid/List/Tree
  • Некоторые компоненты, с точки зрения FocusManager, действительно являются контейнерами.
    - Slider является контейнером бегунков, способных обрабатывать фокус

Обработка клавиатуры/фокуса. Композиция. Slider

  • Не реализует IFocusManagerComponent
  • Устанавливает tabChildren = true
  • Вложенные компоненты - бегунки - реализуют IFocusManagerComponent
  • Предполагается, что легче все же реализовать IFocusManagerComponent чем использовать композицию, и, вероятно, в будущем будет что-то переработано и диалоги tabIndex во FlexBuilder не будут поддерживать такую конфигурацию.(4?)

public class Slider {
public function Slider() {
tabChildren = true;
}
}

public class SliderThumb implements
IFocusManagerComponent


Обработка клавиатуры/фокуса.Реализация композиции

  • Реализовать IFocusManagerComponent
  • В focusInHandler, подписаться на прослушивание события "keyFocusChange"
  • В keyFocusChangeHandler:
    - вызывать preventDefault(), чтобы focusManager не обрабатывал это событие
    - обработать нажатие клавиши TAB и установить фокус внутренним компонентам

public class DataGrid implements IFocusManagerComponent {

override protected function focusInHandler(event:FocusEvent):void {
addEventListener(“keyFocusChange”, keyFocusChangeHandler);
}

protected function keyFocusChangeHandler(event:FocusEvent):void {
event.preventDefault();
itemEditor.setFocus();
}

Обработка клавиатуры/фокуса. Подведение итогов

  • Почти все компоненты, с точки зрения FocusManager были реализованы без композиции.
  • Исключение составляют:
    - Slider
    - List/Tree
    - DataGrid
  • Вероятно, большинство ваших компонентов также не будет иметь дела с композицией.

В статье, у меня возникло одно непонимание - (4?) связанное с композицией Slider. Поэтому фразы "Easier to implement than composites" и "We will probably re-implement as composite in future..." я выразил своими словами. Возможно, я ошибаюсь.


09:13:25, LIFE.Flash
lifeflash ожил

Наконец это случилось - LIFE.Flash ожил, надеюсь вы его еще помните….
Была проблема с хостинг-провайдером, и проблема решилась.

Welcome! :)

P.S. А тем временем сайту LIFE.Flash исполнился год. :)
Если взять всю ветку моего flash-блогерства - уже 3 года


2008-02-20

20:45:43, Лаборатория Январева
О компьютерных играх

Читаю про разработку компьютерных игр (хотя, вероятно, будет интересно только людям, непосредственно с этим столкнувшимся, или интересующимся общими вопросами по управлению проектами)

http://dtf.ru/articles/read.php?id=3755 - Игры: как это делается (юмористическое)
http://www.dtf.ru/blog/read.php?id=49888 - Практическое руководство для молодых команд

Пара моих демо-игр: http://gm2flex.janvarev.ru/Examples (с использованием флекса, используется собственноручно разработанная библиотека)


16:05:22, Flash-ripper.com
Red Keds ищет братьев по разуму: работа для флэш-химиков

Привет!
Мы, креативное агенство Red Keds (Россия, Москва), ищем себе братьев в команду на фултайм на денежной основе, которая обговаривается при встрече или при личной переписке.
Наши братья получают кроме денежной основы работу в неформальном офисе в центре Москвы, дружный, молодой и веселый коллектив, интересные проекты, возможность повышать свои профессиональные навыки, бесплатное посещение уроков рисования и психологии, рабочий день с 11 утра, хотя можно и с 12-и:)

Интересное начало? Читаем дальше.


14:20:49, Flash-ripper.com
Шэнь Бухай, ActionScript, Упанишады и ASP.NET на 13 этаже

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

Есть у Алексея и совсем серьезные статьи: подсистема партнёрской программы, обзор методологий разработки ПО и распределение задач по группам.

Мне это брожение ума понравилось (пусть там и не тру флэш блог).


10:39:00, Flash-разработка
Жизненный цикл компонента. Flex
Статья Добрался до самого вкусного — внутренности Flex Framework навела на очень важный документ, расставляющий многие точки над i, которые до этого валялись где-то в области догадок. Итак, источник вот он. Всё в чём я сомневаюсь, буду помечать знаком (#?) где #- ID сомнения (для последующего комментирования).

Жизненный цикл компонента. Дисплей-лист.
  • Во Flex многие элементы размещаются (1?) в дисплей-листе (который мы используем для доступа к ним). Это:
    - внедряемые шрифты
    - стили
    - размер прогрывателя (2?)
    - верхушка (головной элемент) DOM (3?)
  • Доступ к этим элементам осуществляется через SystemManager.
  • При создании, компоненты не имеют доступа к дисплей-листу.
    - свойство компонента systemManager == null
  • Поэтому, конструктор вашего компонента не имеет доступа к этим элементам.

var randomWalk:UIComponent = new RandomWalk();
randomWalk.dataProvider = dataSet;
/* Random Walk cannot access the player’s size, or add capture phase event listeners until addChild is called because systemManager ==null */
addChild(randomWalk);
/* After addChild(), systemManager !=null */

Жизненный цикл компонента. Application.

  • Объект Application - особый случай.
  • Он также не видит (4?) дисплей-лист. Но...
  • ... systemManager != null, хотя
    - stage == null
    - root == null
  • Он не видит дисплей-лист до тех пор, пока не наступит событие creationComplete.
    - в следствии чего, и ваш компонент тоже не видит дисплей-лист.
  • Дисплей-лист становится доступным, когда генерируется событие applicationComplete.
  • Всё это делается в целях улучшения производительности.
  • Тут легко ошибиться.
  • Используйте systemManager.stage (то только не в конструкторе).

Жизненный цикл компонента. Создание экземпляра компонента.

var myComp:UIComponent = new RandomWalk();
myComp.dataProvider = dataSet;

addChild(myComp);

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

public function RandomWalk() {
…}
public function set dataProvider() {…}

  • Подготавливает начальную установку (или начальный набор ?) стилей (5?).
  • Добавляет в дисплей-лист.
  • Генерирует событие preInitialize.

protected function createChildren() {…}

  • Инициализирует accessibility-свойства объекта (6?), если таковые имеют место.
  • Генерирует событие initialize.

Жизненный цикл компонента. Несколько правил.

  • Не добавлять объекты в конструкторе.
    - это не вызовет ошибки, но делать так - не очень эффективно
    - лучше всего перекрыть метод createChildren() и делать это в нём
  • Не вызывать метод getStyle() в конструкторе.
    - он вызовет ошибки, но может выдать некорректные данные
    - подождать до createChildren()
    - а еще лучше, перекрыть метод commitProperties()
  • Не обращаться к systemManager, stage или root из конструктора.
    - они все равны null
    - лучше подождать до createChildren() или более поздних выводов
  • Не используйте прямой доступ к stage и root
    - используйте systemManager

Жизненный цикл компонента. Запуск. Инициализация.

  1. Создан экземпляр Application.
  2. Установлен Application.systemManager.
  3. Application.dispatchEvent(new Event(‘preinitialize’))
  4. Application.createChildren()
    1. Создан экземпляр randomWalk
    2. Вызван конструктор randomWalk()
    3. Установлены свойства этого компонента
    4. randomWalk.dispatchEvent(new Event(‘preInitialize’))
    5. randomWalk добавлен в приложение (но его всё еще нет в дисплей-листе)
    6. randomWalk .createChildren()
    7. randomWalk.dispatchEvent(new Event(‘initialize’))
  5. Application.dispatchEvent(new Event(‘initialize’))

Жизненный цикл компонента. Запуск. Валидация.

  • Фаза 1
    randomWalk.commitProperties()
    Application.commitProperties()
  • Фаза 2
    randomWalk.measure()
    Application.measure()
  • Фаза 3
    Application.updateDisplayList()
    randomWalk.updateDisplayList()
  • Фаза 4
    randomWalk.dispatchEvent(new Event(‘creationComplete’))
    Application. dispatchEvent(new Event(‘creationComplete’))

Жизненный цикл компонента. Запуск. Завершение.

  • Объект Application добавлен в дисплей-лист
  • Application.dispatchEvent(new Event(‘applicationComplete’))



2008-02-19

21:48:10, Flash-ripper.com
Добрался до самого вкусного — внутренности Flex Framework

Вечер. Офис опустел. Я собираюсь домой и сейчас распечатаю первую часть документа, называющегося "Внутренности Flex Framework". Скачайте и почитайте его вместе со мной — "Flex Framework Internals Part 1" (есть также Part 2). Начинаем через 5 минут.

К слову: О парнях из Adobe. Эли Гринфилд — еще больший минималист лентяй, чем я. Путь к Флекс-классам у меня: D:/dev/flex/classes. У него: C:/dev/f2 :)


21:46:41, DL1t's blog
Adobe Director 11 - официально!

Судьба Director’а долго была неясной. Проиграв флешу во многих областях применения, отставая по распространенности плеера, он ушел на задний план. Но постепенно стало ясно, что Adobe не забросил развитие Director, и вот официальный анонс появился на сайте. Главные особенности: нативная поддержка DirectX 9 3D и встроенный движок Ageia PhysX, растровые фильтры и поддержка Юникода, интеграция с Flash CS3 с возможностью непосредственного редактирования мувиков с AS2.0 . Ну и конечно обновлен пользовательский интерфейс. Обо всех новшествах можно прочитать здесь. На данный момент Director 11 доступен для предварительных заказов, Trial-версия будет доступна для скачивания в марте.


17:40:05, Flash-ripper.com
Не так страшен Флекс, как его малютки :)

Сегодня в Skype-чате UAFPUG прозвучала фраза флэш-разработчика Олега Галабурды:

Собсна, я в этом месте меняю своё мнение про Флекс, а точнее про представление MXML -> AS3. :) Итого - Флекс не так уж и страшен, как его малюют, но отгребать рискую долго.

Этот эффект вызвало прочтение короткой статьи "Flex для Флэшеров" и пара фраз в чате!


14:01:18, Flash-ripper.com
9 дней, или приблизительная скорость обработки багов в Adobe JIRA

Вчера сервис учета багов Adobe JIRA сообщил мне, что исправлен баг в дистрибутиве BlazeDS.

По этому случаю можно приблизительно оценить скорость обработки дефектов, задокументированных через официальный ресурс Adobe. Уточню: именно скорость обработки пользовательских заявок, а не время исправления ошибки, которое может сильно варьроваться в зависимости от ее сложности.

Здесь сложность близка к минимальной. Ошибка заключалась в наличии одного лишнего символа в имени файла: детальное описание и способ обхода я описал в момент обнаружения и в тот же день создал в Adobe JIRA соотвествующую запись. Данная ошибка дожна быть проста в исправлении; возможно, она вообще является чисто механической.

А поскольку временем исправления ошибки в данном случае можно пренебречь, то оценим время обработки заявки на исправление ошибки в Adobe.

Дата обнаружения ошибки: 2 февраля 2008 г. (суббота); дата исправления: 18 февраля 2008 г. (понедельник). Итого 16 дней. Вычтем выходные (6 дней) и получим 10 дней. Дадим один день на исправление, regression testing, упаковку и доставку. Итого — девять рабочих дней.

Весьма оперативно работают в Adobe, не так ли? Голосовать за "любимые" баги сегодня — значит меньше работать завтра!

Update: Приятно удивился, насколько быстрее стал работать сервер Adobe JIRA.


09:55:43, Flash-ripper.com
Как настроить правильную выдачу AIR-файлов с сервера

Чтобы сервер давал пользователям скачать с него AIR-файлы, нужно указать ему их MIME-тип:

AddType application/vnd.adobe.air-application-installer-package+zip .air

Если вам повезет, тип указывать не придется. Если не повезет, или везение закончится при обновлении серверного ПО, то пользователи вместо AIR-файлов будут получать не AIR-файлы.

Например, на странице приложения "Google 3d Map on AIR" Mat сказал, что не может скачать AIR-файл, каждый раз получая вместо него ZIP-файл с тем же именем. Я проверил и убедился, что попытка скачать файл приложения Google3DMap.air действительно приводила к загрузке файла Google3DMap.zip — это архив с исходниками.

Интересная особенность: баг был виден через IE, но в Firefox все работало как надо. Это было похоже на тупик, но проблема решилась просто. Я вспомнил виденную ранее (когда писал про AIR-бейджи) статью на сайте Adobe — о том, как задать MIME-тип для AIR-приложения на сервере. Погуглив по словам "adobe air server mime type handler" я нашел это описание лучших практик установки AIR-приложений из браузера. Там же было и решение данной проблемы; нужно всего лишь прописать нужный MIME-тип, как показано в начале этого поста:

AddType application/vnd.adobe.air-application-installer-package+zip .air

Я внедрил эту информацию в Apache через файл .htaccess в соответствующем каталоге — и все.

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


06:43:16, Garbage Collector
playerversion.com

На днях Арал Балкан (Aral Balkan) запустил свой долгожданный громкий проект, на разработку которого были затрачены многомиллионные инвестиции… Шучу. На самом деле проект, о котором сейчас пойдет речь был собран им чуть ли не на коленке. А дело было вот как…

(more…)


2008-02-18

23:09:52, 33 коровы
Kill Bill Browser.

Простецкий способ убить браузер АС3 кодом, вставляем-вызываем:

public function ups() : void
{
var arr:Array = [1,2,3];
for (var i:int=0; i<arr.length; i++)
{
arr.push(arr[i]);
}
}

Из кода все понятно, что и почему.
Валит ФФ и ИЕ на раз-два :).
На очень слабых машинах скажет, что

A script has executed for longer than the default timeout period of 15 seconds

Но на быстрых машинах за дефолтные 60 секунд успеет сделать свое дело…

И еще, строка

timeout period of 15 seconds

насколько видно из работы просто захардкоджена во флекс дебагер т.к. число 15 вообще берется почти с потолка и не зависит от выставленого во флешке максимального времени втыкания.


19:03:40, Flash-ripper.com
Журнал Adobe Magazine, два конкурса и еще один конкурс

1. 30onair — конкурс для флэшеров и просто креативных ребят

Цель этого конкурса от Теда Патрика — собрать как можно больше 30-секундных роликов, отвечающих на любой из этих вопросов: Почему Flash Player? Почему AIR? Почему Flash? Почему Flex? Почему ColdFusion? Почему AJAX? Почему JavaScript? Почему ActionScript?

Условия конкурса:
1. Ролик длиной в 30 секунд.
2. Ответ на один из указанных вопросов.
3. Креатив.

Для этого конкурса Тед создал RSS / Atom фид — можно встраивать в свои приложения.

Приз: призы.
Дедлайн: null.

2. "Что ты можешь за $20 000" — конкурс для креативных ребят и просто флэшеров

Цель конкурса "See What's Possible": показать в 15-секундном ролике, как крут Фотошоп от Adobe. Видео должно включать лого Photoshop, иллюстрирующее тему "See What’s Possible". Работа-победитель будет использована Adobe как часть надвигающихся маркетинговых кампаний Photoshop. Прочие достойные ролики будут пиарить своих создателей на ресурсе Cut and Paste.

Приз: $20 000 за лучший ролик, плюс еще призы.
Дедлайн: 15 марта 2008 г.

3. Adobe Magazine — журнал от Adobe

Adobe выпускает собственный бесплатный журнал. Регистрация > скачать 10 Мб.

4. Конкурс Russian Flash Awards-2008

А о том, что начат прием работ на конкурс Russian Flash Awards, вы уже читали у Кости Ковалева, но я напомню: победитель едет на Adobe MAX, что есть круто и вместе с тем справедливо.

Вот вам еще три стимула, чтобы перестать читать дурацкие блоги и заняться делом!


13:28:13, Flash-ripper.com
Видео-урок по работе с Tweener — чистый AS3, 2 минуты

Простоту и элегантность библиотеки Tweener я уже оценил на одном реальном проекте.

Пусть она и не самая быстрая, но ее простота очень мне по вкусу. Есть один-единственный класс Tweener. Чтобы добавить в AS3-приложение анимацию, достаточно вызвать на этом классе статический метод addTween с соответствующими параметрами. При этом в одном-единственном вызове метода вы можете задать сразу несколько анимаций.

Да что там рассказывать — все уже показано. Некто IMUGI записал видео-урок и выложил его в открытый доcтуп: Видео-урок "Работа с библиотекой Tweener" — всего 2 минуты.

Кстати, встречайте флэш-блог: /iMUGi\.


12:58:00, Flash-разработка
Синхронизация случайных чисел для клиент-серверных приложений.
Посетила идея. Догадываюсь что она не нова (как раз, возможно, она всплыла из глубоких отложений моего серого хранилища данных), но чтобы не забыть - фиксирую.

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

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

12:39:00, Flash-разработка
Список с указателем. AS3
Понадобилось использовать простой список с указателем, на подобии XML, с навигацией по списку next/previous. Ручками это реализовать проблем нет - хочется готовое поюзать. Думал, уж наверняка есть какой-нть класс чтонть типа хзCollection в AS3. Ан нет. В Flash AS3 API не нашел :(. Может быть я плохо искал?

08:52:59, Лаборатория Январева
О RAFPUG-3

Напишу-ка я впечатления о прошедшем мероприятии.

Как сказал Артемий Малков, “очень приятно, что народ собирается за полчаса до начала регистрации”. Действительно, я был в Торонто уже в 13-15, и уже в это время там было несколько людей, включая Александра Козловского, докладчика по AIR и Papervision 3D. Пообщавшись с ним, я узнал, что Design Mode в последней версии Flex Builder 3 beta 3 падает не у меня одного :) так что, увы, но до выхода финальной версии Flex 3 нормально, с визуальным редактором разрабатывать приложения под AIR большинству из нас не светит. Александр же, как настоящий мастер, использует для этого бубен, и у него все получается :)

Первым делом Артемий рассказал о конкурсе русских флеш-работ Russian Flash Awards - 2008, показав, насколько я понял, собственноручно подготовленный видеоролик с демонстрацией работ победителей прошлых конкурсов. В этом году появилась поддержка Adobe, а также несколько дополнительных номинаций - конкурс по Flex и AIR-приложениям. Прием работ - до 30 апреля 2007.

Далее производилась раздача призов, выигранных в предыдущую встречу RAFPUG, во время приезда евангелистов от Adobe. Выигравшим Flex Builder 3 было обещано, что он обязательно появится, когда его выпустят, и розданы майки с логотипом. К Александру таки добрался iPod nano.

Далее Александр провел доклад по использованию в AIR:

  • прозрачных окошек;
  • Papervision 3D;
  • Нативного Drag-and-Drop-а файлов;
  • Использования Tray-иконок;
  • Обновления приложения средствами AIR.

В общем, очень большой объем материала был представлен нам в очень сжатые сроки. Мне лично доклад был очень интересен, но я уже многократно щупал AIR, так что мог схватывать “на лету”. Для тех, кто хочет разобраться поподробнее, Александр обещал выложить исходники в своем блоге.

(Для тех, кто был на встрече - там обсуждались AS3-библиотеки FZip и AIRRemoteUpdater, их можно найти здесь)

После чего был чай и кофе. К сожалению, совершенно без плюшек.

Вторая часть встречи - Hands-on по Флексу. Идея, как её озвучил Артемий со ссылкой на Ростислава,”чтобы не щупавшие флекс флешеры наконец потеряли флекс-девственность” :)) В такой формулировке желающих сделать это публично почему-то не оказалось, и Артемий после чая начал рассказывать про Binding данных во флексе с надеждой, что кто-то все-таки осмелится выйти и написать хоть небольшой кусок кода.

В это время прогрессивная часть разработчиков устроила что-то подобное своего Hands-on в районе термосов с чаем и кофе, благо ноутбуки были. К сожалению, не смогу назвать всех участников этого импровизированного представления (не знаю имен, прошу извинить), но, например Александр Козловский и Таня Белая помогали в отладке SkyBox в Papervision 3D, я общался с молодым флекс-разработчиком Максимом Павловым, демонстрируя некоторые собственные разработки, при наличии наблюдающего за этим процессом Dl1t.

К сожалению, по некоторым независящим от меня причинам, на этом моменте мне пришлось покинуть встречу разработчиков, но могу сказать, что мне очень понравилось :)


Предыдущие 30 | Следующие 30