Flex и RIA блоги



2009-03-07

22:15:01, Flash-ripper.com
Пост благодарности тем, кто нас тайно и явно вдохновляет

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

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

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

Делайте все эти прекрасные и непонятные нам вещи, только вы это умеете и я не знаю, как это назвать. Будьте!

Мистер Flastar поздравляет всех дам с 8 марта

Моя песенка вам в подарочег — пишет м-р Фластарр.


2009-03-05

16:17:00, Flash-разработка
Дружим Flex с Flash. Заметки: загрузка, внедрение, шрифт. Flex
Закончился очередной дидлайн. После крупных проектов, которые делаются за 3-4 дня практически с нуля, остаются ощущения, схожие с состоянием после автобусного тура: в голове каша, мельком что-то увидел, урывками что-то запомнил, надо разобрать фотки. Теперь настало время немного отдышаться и закрепить полученный опыт.

Для начала, несколько заметок:

  • Перенос строки в строках MXML: символ 
 - мелочь, а приятно.
  • Загрузка сложных Flash-приложений в SWFLoader должна производиться в выделенный домен приложения, т.к. могут быть конфликты классов:
<mx:SWFLoader autoLoad="false" id="swfLoader" source="application.swf" />

. . .

private function creationCompleteHandler(event:Event):void {
swfLoader.loaderContext=new LoaderContext(false,new ApplicationDomain());
swfLoader.load();
}
  • Если внешнее приложение подгружается в SWFLoader, есть вероятность, что в какой-то момент SWFLoader потеряет stage, что может пагубно отразиться на функциональности этого приложения. Если приложение где-то внутри обращается к stage и не обрабатывает его недоступность, то будут генерироваться ошибки. Побороть этот недостаток я не смог - только устранив все "не защищенные" stage из внешнего приложения.
  • Внедрение шрифтов. Гораздо надежнее внедрять шрифт непосредственно из TTF файла. Внедрение из файла SWF, в котором, в свою очередь, внедрен необходимый шрифт лучше оставить для тяжелых случаев несовместимостей с Flex. Дело в том, что почему-то, внедренные в SWF разные стили (normal, bold) шрифта не корректно "извлекаются" Flex-ом. Он не дает назвать разные стили разными именами (как это можно сделать в первом случае), теряет одно из начертаний (жирный шрифт просто не выводится). Возможно, это из-за особенностей конкретных шрифтов, но первый метод срабатывает гораздо стабильнее.
@font-face
{
fontFamily: "Century Schoolbook";
fontWeight: normal;
fontStyle: normal;
src: url("file://./assets/fonts/CENSCBK.TTF");
unicodeRange:
U+000-ґU+0040, /* Punctuation, Numbers */
U+004-5U+005A, /* Upper-Case A-Z */
U+004-AU+0060, /* Punctuation and Symbols */
U+004-µU+007A, /* Lower-Case a-z */
U+004-БU+007E, /* Punctuation and Symbols */
U+00E-BU+00FD,
U+040-tU+042F, /* Cyrillic Upper-Case A-Z */
U+040-фU+0451; /* Cyrillic Lower-Case a-z */
}

@font-face
{
fontFamily: "Century Schoolbook Bold";
fontWeight: bold;
fontStyle: normal;
src: url("file://./assets/fonts/SCHLBKB.TTF");
unicodeRange:
U+000-ґU+0040, /* Punctuation, Numbers */
U+004-5U+005A, /* Upper-Case A-Z */
U+004-AU+0060, /* Punctuation and Symbols */
U+004-µU+007A, /* Lower-Case a-z */
U+004-БU+007E, /* Punctuation and Symbols */
U+00E-BU+00FD,
U+040-tU+042F, /* Cyrillic Upper-Case A-Z */
U+040-фU+0451; /* Cyrillic Lower-Case a-z */
}


  • Внедрять клип из внешней SWF так, чтобы работали его фреймовые скрипты можно следующим образом:
    source="@Embed(source='assets/Index.swf')"
    При внедрении отдельного символа, его фреймовые скрипты и скрипты всех вложенных объектов теряются:
    source="@Embed(source='assets/Index.swf'#Index)"
    Игра с параметром mimeType не помогает.

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

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

Создаем компонент - наследник SWFLoader. После инстанцирования класса внедренного клипа (конец метода load(), можно так же добавить и в обработчик события загрузки), считываются все его метки и в их фреймы добавляются необходимые скрипты. Имя каждой метки имеет ключевую составляющую, которая и определяет тип действия добавляемого скрипта.
В нужный момент можно заставить клип остановиться, перейти на другую метку, генерировать событие (с идентификатором, так же зашитым в имя метки), просканировать клип и получить срез всех визуальных объектов, чтобы делать с ними всё что угодно. Главное - этот момент устанавливается прямо в таймлайне клипа, а не путем каких-либо расчетов количества фреймов или подобных методов.


Прекрасный момент - праздник еще не настал, а дидлайны уже позади! Отдыхать и набираться сил.

И конечно, наших прекрасных женщин поздравляю с праздником 8 марта!


16:17:00, Flash-разработка
Дружим Flex с Flash. Заметки: загрузка, внедрение, шрифт. Flex
Закончился очередной дидлайн. После крупных проектов, которые делаются за 3-4 дня практически с нуля, остаются ощущения, схожие с состоянием после автобусного тура: в голове каша, мельком что-то увидел, урывками что-то запомнил, надо разобрать фотки. Теперь настало время немного отдышаться и закрепить полученный опыт.

Для начала, несколько заметок:

  • Перенос строки в строках MXML: символ &#xd; - мелочь, а приятно.
  • Загрузка сложных Flash-приложений в SWFLoader должна производиться в выделенный домен приложения, т.к. могут быть конфликты классов:
<mx:SWFLoader autoLoad="false" id="swfLoader" source="application.swf" />

. . .

private function creationCompleteHandler(event:Event):void {
swfLoader.loaderContext=new LoaderContext(false,new ApplicationDomain());
swfLoader.load();
}
  • Если внешнее приложение подгружается в SWFLoader, есть вероятность, что в какой-то момент SWFLoader потеряет stage, что может пагубно отразиться на функциональности этого приложения. Если приложение где-то внутри обращается к stage и не обрабатывает его недоступность, то будут генерироваться ошибки. Побороть этот недостаток я не смог - только устранив все "не защищенные" stage из внешнего приложения.
  • Внедрение шрифтов. Гораздо надежнее внедрять шрифт непосредственно из TTF файла. Внедрение из файла SWF, в котором, в свою очередь, внедрен необходимый шрифт лучше оставить для тяжелых случаев несовместимостей с Flex. Дело в том, что почему-то, внедренные в SWF разные стили (normal, bold) шрифта не корректно "извлекаются" Flex-ом. Он не дает назвать разные стили разными именами (как это можно сделать в первом случае), теряет одно из начертаний (жирный шрифт просто не выводится). Возможно, это из-за особенностей конкретных шрифтов, но первый метод срабатывает гораздо стабильнее.
@font-face
{
fontFamily: "Century Schoolbook";
fontWeight: normal;
fontStyle: normal;
src: url("file://./assets/fonts/CENSCBK.TTF");
unicodeRange:
U+000-ґU+0040, /* Punctuation, Numbers */
U+004-5U+005A, /* Upper-Case A-Z */
U+004-AU+0060, /* Punctuation and Symbols */
U+004-µU+007A, /* Lower-Case a-z */
U+004-БU+007E, /* Punctuation and Symbols */
U+00E-BU+00FD,
U+040-tU+042F, /* Cyrillic Upper-Case A-Z */
U+040-фU+0451; /* Cyrillic Lower-Case a-z */
}

@font-face
{
fontFamily: "Century Schoolbook Bold";
fontWeight: bold;
fontStyle: normal;
src: url("file://./assets/fonts/SCHLBKB.TTF");
unicodeRange:
U+000-ґU+0040, /* Punctuation, Numbers */
U+004-5U+005A, /* Upper-Case A-Z */
U+004-AU+0060, /* Punctuation and Symbols */
U+004-µU+007A, /* Lower-Case a-z */
U+004-БU+007E, /* Punctuation and Symbols */
U+00E-BU+00FD,
U+040-tU+042F, /* Cyrillic Upper-Case A-Z */
U+040-фU+0451; /* Cyrillic Lower-Case a-z */
}


  • Внедрять клип из внешней SWF так, чтобы работали его фреймовые скрипты можно следующим образом:
    source="@Embed(source='assets/Index.swf')"
    При внедрении отдельного символа, его фреймовые скрипты и скрипты всех вложенных объектов теряются:
    source="@Embed(source='assets/Index.swf'#Index)"
    Игра с параметром mimeType не помогает.

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

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

Создаем компонент - наследник SWFLoader. После инстанцирования класса внедренного клипа (конец метода load(), можно так же добавить и в обработчик события загрузки), считываются все его метки и в их фреймы добавляются необходимые скрипты. Имя каждой метки имеет ключевую составляющую, которая и определяет тип действия добавляемого скрипта.
В нужный момент можно заставить клип остановиться, перейти на другую метку, генерировать событие (с идентификатором, так же зашитым в имя метки), просканировать клип и получить срез всех визуальных объектов, чтобы делать с ними всё что угодно. Главное - этот момент устанавливается прямо в таймлайне клипа, а не путем каких-либо расчетов количества фреймов или подобных методов.


Прекрасный момент - праздник еще не настал, а дидлайны уже позади! Отдыхать и набираться сил.

И конечно, наших прекрасных женщин поздравляю с праздником 8 марта!



16:08:04, Flash-ripper.com
FlashLCS как вариант реализации многопоточности — LocalConnection API

Джон Грден делится разработкой своего колеги по Blitz Agency, Эвана Гиффорда, который создал API для работы с LocalConnection, а с ним становятся доступными:

  • Простота кодирования взаимодействия Flash-приложений.
  • Неограниченный двусторонний обмен между любыми флэшками на одной и той же машине со скоростью 5MB/сек и больше.
  • Новая фукциональность для всей Flash-платформы; способ реализации многопоточности и полноценного взаимодействия браузера и десктопа.

Есть демка с передачей картинок, а все детали — на странице проекта FlashLCS .


16:08:04, Flash-ripper.com
FlashLCS как вариант реализации многопоточности — LocalConnection API

Джон Грден делится разработкой своего колеги по Blitz Agency, Эвана Гиффорда, который создал API для работы с LocalConnection, а с ним становятся доступными:

  • Простота кодирования взаимодействия Flash-приложений.
  • Неограниченный двусторонний обмен между любыми флэшками на одной и той же машине со скоростью 5MB/сек и больше.
  • Новая фукциональность для всей Flash-платформы; способ реализации многопоточности и полноценного взаимодействия браузера и десктопа.

Есть демка с передачей картинок, а все детали — на странице проекта FlashLCS .


11:36:44, Flash-ripper.com
О Флэшере, Большом Бизнесе, и Документов Обороте

Cидели себе (и лежали) флэшеры, анимацию создавали (а также ленились создавать).

Тут пришел Большой Бизнес и спросил:

— А как вы, Флэшеры, решаете мои бизнес-задачи?
— Какие-какие задачи? Повторите, я не расслышал, — переспросил один Флэшер.
Мои Бизнес Задачи! — повторил Бизнес — как вы их собираетесь решать?
— А я их не решаю, потому что я про них ничего не знаю! — ответил Флэшер, — я сейчас как раз одну клевую штуку делаю, отвал башки! Можно будет вообще отказаться от Бизнеса и Задач! Там такая физика! За счет этого очень весело.
— А как же Биг Бизнес и Кастомерс? — спросил Биг Бизнес? — как же онлайновый документооборот и глобальная верификация?!
— Да, а как же Мы и наши Документы? — спросили Кастомерс. И вопросительно посмотрели сначала на Бизнес, а потом (уже без всякой надежды) на Флэшера.

— Ну, я не знаю, — ответил Флэшер — у меня тоже как бы свой бизнес, только немного другой, может вам к Флексеру? А то я нефега не вкурил о чем вы вообще говорите и зачем мне это надо, простите.

Ну, а Флексеры конечно Биг Бизнес не подвели, поскольку от него они появились и произошли. Но это уже другая история.

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

Update: хороший пример отличного решения типично флэшерской задачи.


11:36:44, Flash-ripper.com
О Флэшере, Большом Бизнесе, и Документов Обороте

Cидели себе (и лежали) флэшеры, анимацию создавали (а также ленились создавать).

Тут пришел Большой Бизнес и спросил:

— А как вы, Флэшеры, решаете мои бизнес-задачи?
— Какие-какие задачи? Повторите, я не расслышал, — переспросил один Флэшер.
Мои Бизнес Задачи! — повторил Бизнес — как вы их собираетесь решать?
— А я их не решаю, потому что я про них ничего не знаю! — ответил Флэшер, — я сейчас как раз одну клевую штуку делаю, отвал башки! Можно будет вообще отказаться от Бизнеса и Задач! Там такая физика! За счет этого очень весело.
— А как же Биг Бизнес и Кастомерс? — спросил Биг Бизнес? — как же онлайновый документооборот и глобальная верификация?!
— Да, а как же Мы и наши Документы? — спросили Кастомерс. И вопросительно посмотрели сначала на Бизнес, а потом (уже без всякой надежды) на Флэшера.

— Ну, я не знаю, — ответил Флэшер — у меня тоже как бы свой бизнес, только немного другой, может вам к Флексеру? А то я нефега не вкурил о чем вы вообще говорите и зачем мне это надо, простите.

Ну, а Флексеры конечно Биг Бизнес не подвели, поскольку от него они появились и произошли. Но это уже другая история.

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

Update: хороший пример отличного решения типично флэшерской задачи.


2009-03-04

22:15:47, Garbage Collector
Пример кода

Читаю в настоящий момент главу про работу с XML-данными в книге Колина Мука «Основы ActionScript 3.0». В этой главе есть XML-листинг, представляющий собой взятые из библиотеки книги и фильмы. Среди немногочисленных элементов списка фигурируют такие названия:

XML:
  1. <dvd>
  2.     <title>2001 Space Odyssey</title>
  3.     <director>Stanley Kubrick</director>
  4.     <publisher>Warner Home Video</publisher>
  5. </dvd>
  6.  
  7. <dvd>
  8.     <title>Spirited Away</title>
  9.     <director>Hayao Miyazaki</director>
  10.     <publisher>Walt Disney Video</publisher>
  11. </dvd>

Почему-то проникся еще большим уважением к этому автору… :-)


22:15:47, Garbage Collector
Пример кода

Читаю в настоящий момент главу про работу с XML-данными в книге Колина Мука «Основы ActionScript 3.0». В этой главе есть XML-листинг, представляющий собой взятые из библиотеки книги и фильмы. Среди немногочисленных элементов списка фигурируют такие названия:

XML:
  1. <dvd>
  2.     <title>2001 Space Odyssey</title>
  3.     <director>Stanley Kubrick</director>
  4.     <publisher>Warner Home Video</publisher>
  5. </dvd>
  6.  
  7. <dvd>
  8.     <title>Spirited Away</title>
  9.     <director>Hayao Miyazaki</director>
  10.     <publisher>Walt Disney Video</publisher>
  11. </dvd>

Почему-то проникся еще большим уважением к этому автору… :-)


22:15:47, Garbage Collector
Пример кода

Читаю в настоящий момент главу про работу с XML-данными в книге Колина Мука «Основы ActionScript 3.0». В этой главе есть XML-листинг, представляющий собой взятые из библиотеки книги и фильмы. Среди немногочисленных элементов списка фигурируют такие названия:

XML:
  1. <dvd>
  2.     <title>2001 Space Odyssey</title>
  3.     <director>Stanley Kubrick</director>
  4.     <publisher>Warner Home Video</publisher>
  5. </dvd>
  6.  
  7. <dvd>
  8.     <title>Spirited Away</title>
  9.     <director>Hayao Miyazaki</director>
  10.     <publisher>Walt Disney Video</publisher>
  11. </dvd>

Почему-то проникся еще большим уважением к этому автору… :-)


15:17:53, Flash-ripper.com
Двадцать первого марта — мужской день UAFPUG в Одессе

21 марта в 12:00 в Одессе начнется и пройдет (а жаль!) мужской день UAFPUG.

Презентовать будут исключительно девушки

Имена некоторых докладчиц уже известны: это Валерия Маллаева из Донецка и Юлия Гитлан из Николаева. О третьей (и четвертой (и пятой)) докладчицах сейчас известно, что они, скорее всего, живут в Одессе. В данный момент мы их разыскиваем!

Регистрация на встречу уже началась. Полный список докладов будет в пятницу 6 марта.

А немногим ранее вышел Adobe Flex 3.3

Вот список исправленных багов и Flex 3.3 Release Notes, в которых говорится о том, как использовать с апдейтом Data Visualization Components. И конечно, сам архив с Flex SDK.


15:17:53, Flash-ripper.com
Двадцать первого марта — женский день UAFPUG в Одессе

21 марта в 12:00 в Одессе начнется и пройдет (а жаль!) женский день UAFPUG.

Презентовать будут исключительно девушки

Имена некоторых докладчиц уже известны: это Валерия Маллаева из Донецка и Юлия Гитлан из Николаева. О третьей (и четвертой (и пятой)) докладчицах сейчас известно, что они, скорее всего, живут в Одессе. В данный момент мы их разыскиваем!

Регистрация на встречу уже началась. Полный список докладов будет в пятницу 6 марта.

А немногим ранее вышел Adobe Flex 3.3

Вот список исправленных багов и Flex 3.3 Release Notes, в которых говорится о том, как использовать с апдейтом Data Visualization Components. И конечно, сам архив с Flex SDK.


2009-03-03

16:50:35, Flash-ripper.com
Отчет о встрече UFUG 28 февраля в Харькове

В харьковском офисе GlobalLogic состоялась встреча Ukrainian Adobe Flash Platform User Group. С часу дня до шести вечера участники обсуждали профессиональные вопросы разработки во Flex Builder и проблемы сертификации приложений Adobe AIR™.

Прозвучало два доклада:

  1. Илья Панин. Eclipse Monkey — безграничный функционал Flex Builder'а.
  2. Ростислав Сирык. Сертификация AIR-приложений: что, как, зачем, почем и можно ли бесплатно.

Затем последовало обсуждение развития сообщества, в частности, его сайтов fpug.org.ua и официального сайта группы на Adobe Groups. Завершила встречу викторина от Валерии Маллаевой — она задавала вопросы по прозвучавшим презентациям, а победители получали книги от Adobe и призы от GlobalLogic.

Эта относительно небольшая встреча, на которой было двадцать пять человек из Киева, Харькова, Донецка и Днепропетровска, прошла интересно и тепло. После официальной части встречи участники отправились в кафе "У Артема", чтобы закрепить полученные знания (фотографии отсутствуют).

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

Доклады и фотоотчет со встречи будут в понедельник выложены на ее странице.

А Райан Стюарт начинает серию онлайн-экспедиций по Adobe Flex 4 и Flash Catalyst, первая онлайн-сессия состоится 11 марта.


16:50:35, Flash-ripper.com
Отчет о встрече UFUG 28 февраля в Харькове

В харьковском офисе GlobalLogic состоялась встреча Ukrainian Adobe Flash Platform User Group. С часу дня до шести вечера участники обсуждали профессиональные вопросы разработки во Flex Builder и проблемы сертификации приложений Adobe AIR™.

Прозвучало два доклада:

  1. Илья Панин. Eclipse Monkey — безграничный функционал Flex Builder'а.
  2. Ростислав Сирык. Сертификация AIR-приложений: что, как, зачем, почем и можно ли бесплатно.

Затем последовало обсуждение развития сообщества, в частности, его сайтов fpug.org.ua и официального сайта группы на Adobe Groups. Завершила встречу викторина от Валерии Маллаевой — она задавала вопросы по прозвучавшим презентациям, а победители получали книги от Adobe и призы от GlobalLogic.

Эта относительно небольшая встреча, на которой было двадцать пять человек из Киева, Харькова, Донецка и Днепропетровска, прошла интересно и тепло. После официальной части встречи участники отправились в кафе "У Артема", чтобы закрепить полученные знания (фотографии отсутствуют).

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

Доклады и фотоотчет со встречи будут в понедельник выложены на ее странице.

А Райан Стюарт начинает серию онлайн-экспедиций по Adobe Flex 4 и Flash Catalyst, первая онлайн-сессия состоится 11 марта.


2009-03-02

12:03:52, Flash-ripper.com
Скоро Flex-компоненты можно будет продавать на FlashDen

Один из популярнейших ресурсов по продаже Flash-компонентов FlashDen скоро начнет принимать к продаже изделия, созданные во Flex и для Flex. Готовиться к этому можно начинать прямо сейчас. Два важных момента:

  1. Как торговая площадка, FlashDen уже хорошо раскручен.
  2. Первые Flex-изделия на FlashDen получат очевидное преимущество, умноженное на силу первого пункта.

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

Уже сейчас на FlashDen проходит конкурс на лучший скринкаст по Fleх с общим призовым фондом в 1900 USD. Первый приз — Camtasia Studio License ($299) плюс $300 наличными, плюс кредит на $100, чтобы потратить там же, плюс бейджик "Победитель конкурса". Что, на мой взгляд, выгодно, но может быть чуть менее, чем попробовать получить Flex Builder 3 Pro ($699) или или любой CS4 ($2000+, кроме Master Collection) в конкурсе "КукБукЛук".


12:03:52, Flash-ripper.com
Скоро Flex-компоненты можно будет продавать на FlashDen

Один из популярнейших ресурсов по продаже Flash-компонентов FlashDen скоро начнет принимать к продаже изделия, созданные во Flex и для Flex. Готовиться к этому можно начинать прямо сейчас. Два важных момента:

  1. Как торговая площадка, FlashDen уже хорошо раскручен.
  2. Первые Flex-изделия на FlashDen получат очевидное преимущество, умноженное на силу первого пункта.

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

Уже сейчас на FlashDen проходит конкурс на лучший скринкаст по Fleх с общим призовым фондом в 1900 USD. Первый приз — Camtasia Studio License ($299) плюс $300 наличными, плюс кредит на $100, чтобы потратить там же, плюс бейджик "Победитель конкурса". Что, на мой взгляд, выгодно, но может быть чуть менее, чем попробовать получить Flex Builder 3 Pro ($699) или или любой CS4 ($2000+, кроме Master Collection) в конкурсе "КукБукЛук".


2009-03-01

21:00:40, Flash-ripper.com
Знаменитый Баг-444 признан важным

В Adobe согласились, что неспособность Flash Player (issue 444) перехватывать любую ошибку (и при этом оставлять пользователя наедине с застывшим приложением) есть плохо. Вчера у этой записи в Adobe JIRA сменилось значение одного свойства, но зато какого: Internal Priority. Было: "", стало: "A". Что же, будем надеяться, что вчерашнее изменение приведет к скорому исправлению этого досадного поведения.


21:00:40, Flash-ripper.com
Знаменитый Баг-444 признан важным

В Adobe согласились, что неспособность Flash Player (issue 444) перехватывать любую ошибку (и при этом оставлять пользователя наедине с застывшим приложением) есть плохо. Вчера у этой записи в Adobe JIRA сменилось значение одного свойства, но зато какого: Internal Priority. Было: "", стало: "A". Что же, будем надеяться, что вчерашнее изменение приведет к скорому исправлению этого досадного поведения.


01:26:01, DL1t's blog
HippoHX - еще одна из оболочек, расширяющих возможности flash player

“HX” в названии не обманывает - HippoHX действительно тесно связана с haXe, а конкретнее - является надстройкой над ScreenweaverHX, который, в свою очередь, тоже является вполне неплохим подспорьем для разработки desktop-приложений на flash. Но ScreenWeaver является, по сути. просто каналом общения с nekoVM, что приводит к необходимости написания всего работающего с системой кода на haXe при каждом использовании. Это дает свободу, но несколько затрудняет разработку. HippoHX предназначена для решения этой проблемы.

Проще говоря, теперь as2/as3 разработчику нет необходимости знакомиться с haXe (хотя в случае с as3 языки крайне близки), так как наличествует готовый API. Из вкусного: работа с реестром, экспериментальная возможность записи видео(с использованием локально запущенного haxeVideo - медиасервера на соответствующем языке) и запуск сторонних приложений, организация API частично по аналогии с AIR. И, соответственно, расширяемость haXe-модулями под neko. С учетом того, что haXe, neko, ScreenWeaverHX и HippoHX являются опенсорсными решениями, свобода действий достаточно велика.

Минусы, конечно, тоже есть. Нет поддержки Linux, которая уже есть у AIR и, в ограниченном виде, у Zinc. Работа с буфером обмена и drag-n-drop представлена слабее AIR-ной, нет поддержки отображения HTML и PDF. Ну и традиционный для всех оболочек вопрос о правомерности редистрибьюции flash player-а, конечно.

Таким образом, в лице HippoHX имеем в наличии вполне пригодную для работы бесплатную оболочку, с режимом командной строки и GUI, которая может пригодиться flash-разработчику, в особенности из-за сочетания достаточного базового API и расширяемости на синтаксически близком к ActionScript языке.


2009-02-28

23:24:00, Flash-разработка
Модули vs. компоненты. Flex

В моем опыте Flex-разработки наступает новая стадия взросления.

Ну, условно, у себя я уже могу выделить две стадии (не считая робкого потрагивания и любопытного пощупывания):

  • Код представляет собой голый MXML, на котором и построено всё приложение. Крупные вспомогательные структуры классов и обильные инклюды. В решении относительно сложных задач (либо совсем простых) я полагался только на pure AS проекты и компоненты.
  • Приложение делилось на компоненты (MXML компоненты), каждое окошко, каждый функционально законченный экран были компонентами. Обильное использование компонентов значительно упростило разработку приложений и внесло строгость и порядок, несмотря на довольно пространный список в Components -> Custom.
    Кроме того, такой подход значительно ускоряет разработку, уже засчет того, что визуальный редактор теперь не должен перерисовывать каждый раз всё приложение (а делает он это отнюдь не быстро).

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

Руки так и зачесались попробовать создать модуль в FB. Открываю проект, создаю New->MXML Module. Открывается новый файл mxml, в который я добавляю, к примеру, кнопку, и текстовое поле. Сохраняю. В окошке Components->Custom появился новый компонент, по имени модуля.
Проведем эксперемент. Перетащим его в окно основного приложения. Всё как с обычным компонентом. Компилирую. Замечательно: скомпилировалось два swf - один с именем приложения, другой - с именем модуля.
Для любопытства, копируем один только swf приложения и запускаем: видим кнопку и текстовое поле. Как я и предполагал, наш модуль включен в состав swf приложения как обычный компонент.
Запустим swf модуля. Сразу получаем ошибку "Не удалось найти класс mx.core::SpriteAsset." И не мудрено - модуль не содержит классов, включенных в основное приложение.
Но нам-то от модуля нужно что? Чтобы он не был включен в приложение, а подгружался в процессе работы приложения. Хотя, возможность использовать модуль как обычный MXML-компонент тоже надо отметить.

Ознакомимся вкратце с документацией: Creating Modular Applications. Здесь всё, на достаточно понятном языке, достаточно подробно разжевывается.

Итак. Нас интересовали загрузка модуля и ее мониторинг.
Пожалуйста, смотрим: Loading and unloading modules. За загрузку отвечает класс ModuleLoader. Любопытно, что это наследник VBox. Непонятно, почему именно VBox, а не, к примеру, HBox. Уж я-то вообще ожидал увидеть в этой роли SWFLoader. Ну да ладно. Убираем из кода приложения модуль и вставляем ModuleLoader. Кстати, он присутствует в палитре компонентов Layout.
Вписываем в свойство url имя файла модуля. И что особенно приятно, визуальный редактор сразу отобразил содержимое модуля. Вводим имя другого модуля - пожалста! Отображается другой модуль. Запускаем - всё замечательно отображается и работает.
Теперь по поводу мониторинга. Смотрим Using ModuleLoader events. ModuleLoader генерирует следующие события: setup, ready, loading, unload, progress, error, и urlChanged. Но позвольте! Если progress мы наблюдаем в этом списке, то почему нет open и complete? Что помешало вместо loading генерировать open, а вместо ready - complete?
При таком раскладе, если я использую ProgressBar в режиме mode="event", загрузка успешно мониторится, но ProgressBar не генерирует событие complete, что в некоторых случаях было бы полезно. Ну что ж, никто не мешает нам устранить этот недостаток, создав своего потомка ModuleLoader. Дело поправимое.

Есть еще один компонент, управляющий загрузкой модулей: ModuleManager. Этот класс, как нам обещают, предоставляет больше возможностей по управлению загрузкой модулей чем предыдущий. Но при этом, как утверждается, техника его использования является менее абстрактной чем работа с ModuleLoader.
Да, разработчики Flex не перестают меня удивлять. ModuleManager наследуется от Object и содержит всего два статических метода, что ввело меня в небольшой ступор. Однако, после изучения предложенных примеров, всё встало на свои места. Метод ModuleManager.getModule возвращает объект, удовлетворяющий интерфейсу IModuleInfo, уникальный для каждого управляемого модуля. Этот объект, в дальнейшем, можно использовать для загрузки модуля (метод load) и мониторинга событий загрузки, а затем, для инстанцирования модуля (через свойство factory).
Более подробное изучение этого класса, погружает нас в глубины Flex, что в мои планы пока совсем не входит. Вот уж, другими словами и не скажешь - все намного менее абстрактно. И больше подходит для решения специфических задач.

Ну-с, добро пожаловать в мир модульных приложений. Начинаем действовать!


23:24:00, Flash-разработка
Модули vs. компоненты. Flex

В моем опыте Flex-разработки наступает новая стадия взросления.

Ну, условно, у себя я уже могу выделить две стадии (не считая робкого потрагивания и любопытного пощупывания):

  • Код представляет собой голый MXML, на котором и построено всё приложение. Крупные вспомогательные структуры классов и обильные инклюды. В решении относительно сложных задач (либо совсем простых) я полагался только на pure AS проекты и компоненты.
  • Приложение делилось на компоненты (MXML компоненты), каждое окошко, каждый функционально законченный экран были компонентами. Обильное использование компонентов значительно упростило разработку приложений и внесло строгость и порядок, несмотря на довольно пространный список в Components -> Custom.
    Кроме того, такой подход значительно ускоряет разработку, уже засчет того, что визуальный редактор теперь не должен перерисовывать каждый раз всё приложение (а делает он это отнюдь не быстро).

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

Руки так и зачесались попробовать создать модуль в FB. Открываю проект, создаю New->MXML Module. Открывается новый файл mxml, в который я добавляю, к примеру, кнопку, и текстовое поле. Сохраняю. В окошке Components->Custom появился новый компонент, по имени модуля.
Проведем эксперемент. Перетащим его в окно основного приложения. Всё как с обычным компонентом. Компилирую. Замечательно: скомпилировалось два swf - один с именем приложения, другой - с именем модуля.
Для любопытства, копируем один только swf приложения и запускаем: видим кнопку и текстовое поле. Как я и предполагал, наш модуль включен в состав swf приложения как обычный компонент.
Запустим swf модуля. Сразу получаем ошибку "Не удалось найти класс mx.core::SpriteAsset." И не мудрено - модуль не содержит классов, включенных в основное приложение.
Но нам-то от модуля нужно что? Чтобы он не был включен в приложение, а подгружался в процессе работы приложения. Хотя, возможность использовать модуль как обычный MXML-компонент тоже надо отметить.

Ознакомимся вкратце с документацией: Creating Modular Applications. Здесь всё, на достаточно понятном языке, достаточно подробно разжевывается.

Итак. Нас интересовали загрузка модуля и ее мониторинг.
Пожалуйста, смотрим: Loading and unloading modules. За загрузку отвечает класс ModuleLoader. Любопытно, что это наследник VBox. Непонятно, почему именно VBox, а не, к примеру, HBox. Уж я-то вообще ожидал увидеть в этой роли SWFLoader. Ну да ладно. Убираем из кода приложения модуль и вставляем ModuleLoader. Кстати, он присутствует в палитре компонентов Layout.
Вписываем в свойство url имя файла модуля. И что особенно приятно, визуальный редактор сразу отобразил содержимое модуля. Вводим имя другого модуля - пожалста! Отображается другой модуль. Запускаем - всё замечательно отображается и работает.
Теперь по поводу мониторинга. Смотрим Using ModuleLoader events. ModuleLoader генерирует следующие события: setup, ready, loading, unload, progress, error, и urlChanged. Но позвольте! Если progress мы наблюдаем в этом списке, то почему нет open и complete? Что помешало вместо loading генерировать open, а вместо ready - complete?
При таком раскладе, если я использую ProgressBar в режиме mode="event", загрузка успешно мониторится, но ProgressBar не генерирует событие complete, что в некоторых случаях было бы полезно. Ну что ж, никто не мешает нам устранить этот недостаток, создав своего потомка ModuleLoader. Дело поправимое.

Есть еще один компонент, управляющий загрузкой модулей: ModuleManager. Этот класс, как нам обещают, предоставляет больше возможностей по управлению загрузкой модулей чем предыдущий. Но при этом, как утверждается, техника его использования является менее абстрактной чем работа с ModuleLoader.
Да, разработчики Flex не перестают меня удивлять. ModuleManager наследуется от Object и содержит всего два статических метода, что ввело меня в небольшой ступор. Однако, после изучения предложенных примеров, всё встало на свои места. Метод ModuleManager.getModule возвращает объект, удовлетворяющий интерфейсу IModuleInfo, уникальный для каждого управляемого модуля. Этот объект, в дальнейшем, можно использовать для загрузки модуля (метод load) и мониторинга событий загрузки, а затем, для инстанцирования модуля (через свойство factory).
Более подробное изучение этого класса, погружает нас в глубины Flex, что в мои планы пока совсем не входит. Вот уж, другими словами и не скажешь - все намного менее абстрактно. И больше подходит для решения специфических задач.

Ну-с, добро пожаловать в мир модульных приложений. Начинаем действовать!

* * *

Впечатления. Работа с модулями не разочаровала: стабильно и надежно. Единственные проблемы, с которыми я столкнулся:

  • Внедрение шрифта. CSS с внедрением TTF-шрифта определяется в главном приложении. Подгружаемые модули успешно используют эти шрифты. Но, возникла проблема с внедряемыми SWF, в которых используется другой шрифт. При вводе в динамические поля, ничего не отображалось. Тогда я внедрил этот шрифт в модуль. Шрифт стал отображаться. Но, что интересно, когда я собрал Release Build, шрифт опять перестал отображаться. Пришлось оставить Debug-версию модуля. Но это повлекло за собой следующую проблему.
  • Если основное приложение собрано в Release Build, оно некорректно подгружает модуль, собранный в Debug Build. Я думаю, что вообще, по-отдельности модули лучше не обновлять. Я обратил внимание, что размер SWF-файла модуля даже при небольших изменениях, при перекомпиляции заметно меняется. Поэтому, следует, наверное, соблюдать осторожность при компиляции и обновлении модулей.



15:37:02, Flash-ripper.com
Захват потса

К вопросу о "великих флешерах", которые "появились на рынке". Пожалуйста - кто-нибудь из них способен сделать текстовый редактор
(типа Buzzword), да так, чтобы он читал документы MS Word 2007 (это
XML) и писал результат в нем же.Аналогично - Excel. Аналогично - PowerPoint.

Владимир Бутенко, президент CommuniGate Systems
Обратная связь: менеджер Наталья Крупнова, kroup на сервере communigate.com


15:37:02, Flash-ripper.com
Захват потса

К вопросу о "великих флешерах", которые "появились на рынке". Пожалуйста - кто-нибудь из них способен сделать текстовый редактор
(типа Buzzword), да так, чтобы он читал документы MS Word 2007 (это
XML) и писал результат в нем же.Аналогично - Excel. Аналогично - PowerPoint.

Владимир Бутенко, президент CommuniGate Systems
Обратная связь: менеджер Наталья Крупнова, kroup на сервере communigate.com


2009-02-27

19:58:16, Flash-ripper.com
Download the Distributable Player Solution Beta

Directly distribute rich apps with the latest Flash Lite player to millions of open OS smartphones.

Ну вот, а говорили — до свидания Flash Lite? С другой стороны, это может быть такой хитрый план.


19:58:16, Flash-ripper.com
Download the Distributable Player Solution Beta

Directly distribute rich apps with the latest Flash Lite player to millions of open OS smartphones.

Ну вот, а говорили — до свидания Flash Lite? С другой стороны, это может быть такой хитрый план.


17:27:47, Flash-ripper.com
Едущим на UAFPUG: кого встретить в Харькове? Пишите

Если вы едете в Харьков на UFUG и хотите, чтобы вас встретили, комментируйте сюда или гмыльте rostislav.siryk или звоните на +38 050 406 03 96 (позвать Роста).

Дима Кочетов неоднократно у меня уже спрашивал, кого надо встретить, провести небольшую экскурсию по городу и т.д., так что — контакты у вас есть, не молчите.

Если нужно, могу разместить на ночлег у себя пару-тройку-четверку-пятерку-шестерку человек. Количество зависит от желания и готовности ночующих. Вкратце, что есть: диван (2 спальных места), 2 раскладных кресла (+2 места), два спальника. Итого 6 мест.

~O~ SHINE STREAMS ~O~

Весенние ручьи... Сначала нежные, тонкие... Они бегут в сиянии солнца... Последний снег не может устоять перед их красотой и тает. А они, воодушевленные таким признанием, бегут всё быстрее, становятся всё сильнее, всё громче, заливисто хохочат и увлекают своим голосом за собой всё вокруг. Они - это сверкающая радость, бегущая у нас под ногами. И мы прыгаем по лужам. Мы танцуем, обнимая солнце. Мы подпеваем журчащей песне Весны. Одна из не многих девушек-диджеев, играющих Psy-Trance в Украине, расстворит вас в утреннем Psy-Trance звучании...

В тридцати метрах от моего дома будет проходить псай-транс-данс SHINE STREAMS в клубе Tonnel, так что можете это учесть в планах на ночь. Я, кстати, хочу сходить.

Вход: с флаером 40 грн, без флаера 50 грн. Скачать флаер можно. Распечатав его, вы сможете пройти в клуб по цене со скидкой.


17:27:47, Flash-ripper.com
Едущим на UAFPUG: кого встретить в Харькове? Пишите

Если вы едете в Харьков

читать далее


17:03:53, Garbage Collector
Семь раз отмерь, один — отрежь

Другим названием этой заметки могла бы стать пословица «Нечего на зеркало пенять, коли рожа крива».

Несколько дней назад я разверзся гневным комментарием в сторону разработчиков Intellij IDEA, потому что не мог запустить сборку приложения напрямую из среды при помощи встроенного в нее билдера. Как обычно бывает в таких случаях, оказалось, что «у самого руки кривые». Опытным путем было выявлено, что если установить на 64-битную Windows в папку для 32-битных программ 64-битную версию JDK, то по естественным причинам виртуальная Java-машина откажется работать и будет выкидывать ошибку на старте. ;-)

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

P.S.: Ну и напоследок хочу поделиться своей радостью — вчера, после месяца мучений и нервов, связанных в основном с неоперативностью работников внутренних органов, я, наконец-то, получил права категории «B». Ура, товарищи!


17:03:53, Garbage Collector
Семь раз отмерь, один — отрежь

Другим названием этой заметки могла бы стать пословица «Нечего на зеркало пенять, коли рожа крива».

Несколько дней назад я разверзся гневным комментарием в сторону разработчиков Intellij IDEA, потому что не мог запустить сборку приложения напрямую из среды при помощи встроенного в нее билдера. Как обычно бывает в таких случаях, оказалось, что «у самого руки кривые». Опытным путем было выявлено, что если установить на 64-битную Windows в папку для 32-битных программ 64-битную версию JDK, то по естественным причинам виртуальная Java-машина откажется работать и будет выкидывать ошибку на старте. ;-)

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

P.S.: Ну и напоследок хочу поделиться своей радостью — вчера, после месяца мучений и нервов, связанных в основном с неоперативностью работников внутренних органов, я, наконец-то, получил права категории «B». Ура, товарищи!


17:03:53, Garbage Collector
Семь раз отмерь, один — отрежь

Другим названием этой заметки могла бы стать пословица «Нечего на зеркало пенять, коли рожа крива».

Несколько дней назад я разверзся гневным комментарием в сторону разработчиков Intellij IDEA, потому что не мог запустить сборку приложения напрямую из среды при помощи встроенного в нее билдера. Как обычно бывает в таких случаях, оказалось, что «у самого руки кривые». Опытным путем было выявлено, что если установить на 64-битную Windows в папку для 32-битных программ 64-битную версию JDK, то по естественным причинам виртуальная Java-машина откажется работать и будет выкидывать ошибку на старте. ;-)

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

P.S.: Ну и напоследок хочу поделиться своей радостью — вчера, после месяца мучений и нервов, связанных в основном с неоперативностью работников внутренних органов, я, наконец-то, получил права категории «B». Ура, товарищи!


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