Предмет: Flash-технологии, программы, редакторы, классы, библиотеки. Методика: Изучение шаг за шагом, поиск новых решений, сбор ссылок, новостей и мнений, разбор примеров. Цель: Сбор, обработка и накопление тематической информации.
воскресенье, ноября 07, 2010
Надоел логгер FD
вторник, марта 23, 2010
Как получить заголовки ответа сервера
вторник, марта 16, 2010
Растровый редактор
- The Graffiti AS3 Bitmap Drawing Library - отличный движок с открытым исходным кодом и примерами. Есть две версии - более старая 1.1 (для FP9+) и новая 2.5 (для FP10+). На странице проекта есть таблица сравнения возможностей версий.
Я выбираю версию 1.1, поскольку мой проект для FP9. Кстати, примеры на сайте представлены для более свежей версии, но принцип использования аналогичный, поэтому первый пример легко интуитивно подстроить под свои нужды.
- µSprite AS3 Vector Editor - графический AIR-редактор с богатыми функциями, способный преобразовать нарисованное в код AS3/Haxe.
- Pixlr photo editor - онлайновый графический редактор.
- BitmapDataUnlimited - растр без ограничения геометрического размера.
воскресенье, марта 14, 2010
Графические трансформеры
- Первым попадается нам вот такой пример: AS3 Transform Tool for scaling, rotating components containing text controls in Flex. Всё весьма красиво, но без исходников. Зато, идет прямая наводка на прародителя этой демки, о котором и поговорим позже.
- Замечательная старая демка, от Senocular. Есть и исходный код. Удивительно, что такая старинная разработка дает начало целому семейству трансформеров.
Скачиваем, запускаем. Пример под CS3 AS3 FP9. Всё работает прекрасно, поигрался с настройками трансформера - превосходно.
Есть возможность таскать, масштабировать, наклонять, поворачивать, менять положение центра трансформаций. Всё удобно и отлажено.
Однако, просматривая отзывы к постам относительно этого движка, многие пишут что недовольны тем, что он не подходит для использования во Flex-приложении. - И вот, Senocular TransformTool модифицируют под Flex2: senocular.com TransformTool modification. Так же прикладываются исходники.
В отличии от предыдущего примера, здесь трансформируются не Sprite-объекты, а UIComponent-объекты, то есть flex-компоненты.
Создаем Flex-проект, копируем в него исходники, запускаем. Работает. Картинки модифицируются прекрасно, а вот компоненты, содержащие текст (например обычная кнопка) трансформируются не очень то корректно. Может быть это по причине того, что необходимо внедрить шрифт, а может быть нужно что-то доработать (ведь первый наш пример работает вполне себе нормально). - Продолжение работ над совершенствованием движка: Multiple objects using Senocular TransformTool. Так же имеется исходный код. Однако, он уже написан под Flex SDK 4, поэтому я не стал продолжать его изучение.
- Еще один мощный движок для трансформаций под Flex: Object Handlers. Здесь множество ссылок относительно проекта - и документация ASDoc, и обучающее видео, и проект на Google Code.
Попробовал скачать 2ю версию движка, поставил и сразу получил множество ошибок. Во-первых, половина примеров просит Degrafa, во вторых лезут еще две ошибки, которые поправить интуитивно не получается.
Поэтому задвигаю 2ю версию и качаю последний релиз 1й версии. Здесь всё стабильно, всё работает без проблем. За исключением косяка вращения. Почему-то в примере, в разделе Rotating трансформер не имеет вращающей точки. Это легко исправляется добавлением соответствующего параметра, однако, появление активной точки для поворота сильно не обрадовало, а точнее - ее неуместное размещение рядом с правой точкой горизонтального растягивания.
Зато всё остальное в этом проекте обещает очень многое, особенно - работа с Degrafa. - Еще одна интересная разработка: Distort Image Transform Tool. Здесь изображение можно произвольно трансформировать таская его за углы. Кстати, еще и под Flash 8.
- Упомяну так же и коммерческую версию трансформера: TransformManager. Выглядит вполне себе замечательно, не сильно лучше предыдущих претендентов, но, зато более причесано. И, что впечатляет - есть возможность объединять для трансформации сразу несколько объектов.
четверг, марта 11, 2010
Выбираем листалку страниц для Flex-проекта
- Многие ссылки ведут сюда: http://www.quietlyscheming.com/blog/components/flexbook/.
Движок FlexBook явно не нов - март 2007, хотя последний коммент в блоге датируется 2009м годом.
Демка показывает возможности движка, а в контекстном меню flash есть ссылка на архив с исходным кодом.
Исходный код поставляется в виде Flex-проекта, однако при импорте, FlexBuilder предупреждает о том, что версия SDK в проекте указана старая, а так же о том, что есть устаревшие свойства flex-компонентов. Кроме того, в настройках есть ссылка на не существующую библиотеку, но это лечится путем удаления некорректной строки из свойств проекта.
Код компилируется и работает превосходно. - Следующий претендент: http://www.rubenswieringa.com/blog/flex-book-component-beta.
Называется так же - FlexBook. И так же не свеж - июль 2007, зато комменты датируются мартом 2010, то есть актуальность на лицо.
Демка так же вполне адекватная и в контекстном меню тоже есть ссылка на исходный код.
Создаем новый Flex-проект, копируем туда код, указываем что компилить и запускаем. Никаких проблем, получаем работающую книгу. Выглядит привлекательнее предыдущего решения. - Коммерческая разработка: FlashPageFlip. Есть бесплатная версия - Free FlashPageFlip. Скачиваем бесплатную версию.
Бесплатная версия не предоставляет исходников. Зато здесь есть всё, чтобы сделать книгу из заготовок. Рассчитан на 8ю версию FP. - Расширение Flash CS - PageTurn3D CS: здесь. Не стал ставить, хотя демка выглядит симпатично.
- OpenSource движок MegaZine3: http://megazine.mightypirates.de/. Судя по описаниям, и демке, достаточно мощный движок. Есть доступ к SVN, есть довольно обширный API.
Общее впечатление от демки (которую можно только скачать как Zip) безусловно очень положительное. Сам по себе скачиваемый продукт не является библиотекой. Это готовое решение, глубоко конфигурируемое, способное отображать разнообразный контент пользователя.
Предлагается скачать SWC, но ссылка некорректная. Исходники можно скачать с SVN. Имеется форум с достаточно оживленными обсуждениями.
В общем, при желании, можно разобраться с этой системой, хотя она, как большинство openSource-проектов, выглядит как темный лес. К тому же не предоставляется примеров использования API. Но это уже тема для отдельной статьи.
- Непосредственно использовать библиотеку классов
- Интегрировать готовое решение путем внедрения главного SWF-файла во Flex-приложение и каким-то косвенным путем управлять контентом страниц.
суббота, января 30, 2010
Что нам дает API ВКонтакте
- Первый ресурс, важный для разработчика, это, собственно раздел "Разработчикам" на самом ВКонтакте.
Здесь нам обещают миллионы долларов, основные ссылки по теме и небольшое описание, из которого мы уже можем почерпнуть, что:
- Приложение может иметь границы до 827х4050.
- Приложение может иметь доступ к пользовательскому левому меню, счетчикам, обычным и SMS-уведомлениям, профилю, фотографиям, друзьям, рейтингу, аудиозаписям пользователей – и многому другому.
- Работа по совершенствованию API ведется непрерывно. - Клуб Flash API
- API ВКонтакте на flasher.ru: API приложений и сред
- Установил ли пользователь, который просматривает приложение себе на страницу данное приложение
- Данные по любому пользователю, на основании его ID:
- имя,
- фамилия,
- псевдоним,
- пол,
- дата рождения,
- город,
- страна,
- часовой пояс,
- url-адреса фото малого, среднего и большого размеров,
- известен ли его мобильный телефон,
- рейтинг - Баланс пользователя на счету приложения
- Доступ к данным пользователя, просматривающего приложение:
- разрешить отправлять ему уведомления,
- доступ к друзьям,
- доступ к фотографиям,
- доступ к аудиозаписям,
- доступ к предложениям,
- доступ к вопросам,
- доступ к wiki-страницам,
- доступ к меню слева,
- публикация на стенах пользователей. - Список групп, в которых состоит пользователь с общей информацией о каждой группе.
- Список друзей текущего пользователя.
- Список друзей текущего пользователя, которые уже установили данное приложение.
- Поднять рейтинг пользователя от имени приложения
- Если пользователь установил приложение в меню слева, приложение может задать краткое имя приложения, а так же вывести счетчик рядом с названием приложения - например, счетчик уведомлений.
- Устанавливать и считывать строку статуса приложения.
- Список фото-альбомов с общими данными о каждом альбоме.
- Список фотографий из какого-либо альбома (или непосредственно по ID фотографии) с набором ссылок на изображения различных размеров и качества.
- Создавать альбом (с описанием и контролем доступа к нему).
- Редактировать данные существующего альбома.
- Изменять порядок в списке альбомов.
- Изменять порядок фотографий в альбоме.
- Переносить фотографии из альбома в альбом.
- Делать фотографию обложкой альбома.
- Загружать фотографии на сервер ВКонтакте, на стену пользователя, на страницу пользователя.
- Получать список аудиозаписей пользователя или группы с общей и подробной информацией о каждой записи.
- Получать текст песен аудиозаписей.
- Осуществлять поиск по аудиозаписям.
- Загружать, удалять, восстанавливать удаленные аудиозаписи.
- Редактировать данные аудиозаписи.
- Добавлять аудиозапись на страницу пользователя или группы.
- Менять порядок следования аудиозаписей.
- Получить платежный баланс (количество голосов) приложения.
- Получить платежный баланс (количество голосов) пользователя.
- Перевести голоса со счета приложения на счет пользователя.
- Перевести голоса со счета пользователя на счет приложения.
- Перевести голоса со счета пользователя на счет другого пользователя в рамках приложения.
- Просмотр историй транзакций по переводу голосов между пользователями и приложением
- Отправка SMS-уведомления. При этом со счета приложения списывается 0.1 голоса.
- Просмотр списка SMS-сообщений, полученных от пользователей приложением.
- Просмотр истории SMS-уведомлений, посланных приложением.
- Редактировать, открыть для общего доступа, и закрыть предложение пользователя, просматривающего приложение.
- Просматривать, искать предложения пользователей.
- Принимать и отклонять предложения пользователей.
- Просматривать ответы на предложение пользователя.
- Получать список ответов на предложения, принятые пользователем.
- Удаление и пометка о прочтении ответов пользователей.
- Получать текст и полную информацию о wiki-странице.
- Редактировать и сохранять текст и настройки wiki-страницы.
- Получать список wiki-страниц в группе.
- Транслировать wiki-разметку в html-разметку.
- Показ таргетированной рекламы. (Пользователи могут создавать рекламные сообщения, которые показываются на страницах ВКонтакте. Приложение, показывающее рекламу зарабатывает голоса).
- Показ прямых объявлений приложений. (Разработчики могут рекламировать свои приложения в других приложениях. При этом голоса так же начисляются на баланс приложения).
- Глобальные переменные: могут использоваться для данных, которые общие для всех экземпляров данного приложения, например, это таблица рекордов игрового приложения.
- Переменные пользователя: эти переменные уникальны для каждого пользователя данного приложения и могут служить, к примеру, для сохранения игры пользователя.
Примерно к половине переменных предоставляется доступ другим пользователям. Часть переменных является зарезервированной для разных нужд. - Переменные сессии: при работе с переменными, в запросе можно задавать идентификатор сессии (сеанса или комнаты). Таким образом, переменные этого диапазона будут общими для всех пользователей, которые в данный момент просматривают приложение. Соответственно, приложения могут осуществлять многопользовательское общение в реальном времени - чаты, многопользовательские игры и прочее.
- Переменные, содержащие временные данные, которые уникальны для текущего просматриваемого приложения, и при его закрытии пропадут.
- Работа с рейтингом пользователя
- Вывод короткого статуса пользователя в приложении на его главной странице
- Отправка уведомлений пользователя (только пользователям, которые установили себе данное приложение)
- Работа с голосами (платежные операции)
- Установка счетчика на приложение и работа с строкой статуса приложения
- Отправка и просмотр SMS-уведомлений
- Открытие окон установки приложения, настроек, приглашения друзей и ввода голосов для оплаты услуг.
- Получение событий об успешной установке приложения пользователем, изменении настроек и баланса пользователя внутри приложения.
- Динамическое изменение размера окна приложения.
- Открытие приложения на весь экран.
- Субдомены vkontakte.ru и короткие имена в url приложения.
- Взаимодействие с API происходит путем HTTP-запроса к php-скрипту. При этом, частота запросов не должна превышать 3х запросов в секунду. Такой механизм накладывает серьезное ограничение на динамику приложений, особенно многопользовательских.
Проблема частично решается использованием новой функции API "execute", которая позволяет выполнять последовательность функций за один запрос к API. - Объемы сохраняемых данных приложения довольно скромны.
- Информация о том как можно заработать и как потратить голоса.
- О том, что при обнале голосов ВКонтакте забирает половину средств на свои благородные цели.
- А так же об аренде серверов в дата-центре ВКонтакте (на самом деле у партнеров).
среда, января 06, 2010
Знакомство с Mate
Вступление.
Этот пост начал свое существование 7 месяцев назад. Именно тогда я решил взять на вооружение Mate Flex Framework. Но злостный непрекращающийся дидлайн никак не давал мне закончить статью. Год выдался трудным и на работе и дома (в конце ноября у нас родился 3й ребятёнок). Сейчас, на праздниках (Всех с Новым Годом и Рождеством!) появилась свободная минутка, чтобы оглянуться назад.
Начало этого поста писалось в режиме осваивания Mate, т.е. с распухающим мозгом, силящимся понять принципы фреймворка и пытающимся подстроиться под новый стиль программирования. Затем, втягиваясь, я понемногу добавлял небольшие комментарии (курсивом) и заметки. Сейчас я просто всё это немного причешу, добавлю небольшие комментарии, подведу итоги, и увидим, что получится.
Забегая вперед, хочу с удовольствием отметить, что освоение прошло успешно и пол-десятка проектов были запущены на каркасе Mate.
Теоретическое знакомство с Mate
Наконец-то у меня появилось время копнуть Mate.
И начну я с того, чтобы удостовериться в правильности выбора.
- Мне, как Flex-разработчику, Mate в первую очередь интересен тем, что это фреймворк, базирующийся на Flex.
- Очень хочется меньше кодить, но иметь при этом наглядный и прозрачный код.
- Понятная документация, обучение и примеры. Теперь посмотрим, какие фреймворки сравнивают и что о них думают:
- Здесь - presentation сравниваются Cairngorm, Mate и PureMVC. Забавно, что количество доводов "против" для Mate меньше чем для остальных.
- Довольно объемная статья: FrameworkQuest 2008, а точнее, заключительная часть исследования фреймворков. Почти во всех качествах, Mate выигрывает. - Последним аргументом будет личный опыт. Приступим к тестовому проекту.
Для начала посмотрим видео: Mate Helloworld. Впечатления позитивные. Всё довольно очевидно и изящно. Здесь рассказывают про Mate на примере работы с простейшим сервисом при использовании AMFPHP. Мне это дело так понравилось, что я решил немедленно себе поставить эту штуку - но об этом позже.
А пока - продолжаем изучать Mate. Читаем про Mate на Go!Verla Flex Blog:
- 5 копеек о Mate Flex Framework - хвалебная речь.
- Пример использования Mate Flex Framework - очень глубокая статья, которая дает много полезного, даже не только о Mate.
- Презентации Constantiner-а: "Mate framework", "Краткое введение в Mate Flex framework". Презентации хороши, но являются лишь подручным материалом докладчика. Без самого докладчика многое понять сложно.
- "Строим приложение на Mate framework + Zend_AMF".
Все эти статьи действительно здорово помогли освоить Mate, и особенно наличием исходного кода. На сайте Mate также есть куча примеров с исходниками, которые здорово помогли понять основы и принципы.
Неудачно перехожу от теории к практике
Пока изучал Mate, решил испробовать на реальном проекте (проект небольшой многослойной карты с маркерами и с подгрузкой данных). Подготовил все компоненты к виду Model/View и... всё получилось само собой, но только без Mate. На байндинге и событиях. Делаем вывод - Mate не для простых проектов. Точнее, не имеет смысла его использовать в простых проектах. Хотя, в примерах числятся очень простые приложения типа "Weather Widget".
Сейчас, оглядываясь на этот проект, я понимаю, что сделать его на Mate было бы очень удобно и просто. Но принципы Mate требуют изменить свои устоявшиеся привычки разработки. На тот момент я еще не был готов к этому.
Кстати, хочу отметить, что мое решение ничуть не проиграло бы Mate-решению. Чисто-Flex-разработка обладает богатым набором возможностей, и вовсе не обязательно всем сломя голову пересаживаться на Mate. Но попробовать, точно, стоит.
Но меня просто переполняет желание освоить этот фреймворк. Попробую начать с нуля.
Для начала, создаю проект (обычный). В папку libs скачиваю свежий SWC.
Теперь хорошо бы создать структуру пакетов (проще говоря, папок) проекта. После обзора примеров, выявляется устоявшаяся структура:
Основной пакет проекта помещается в папку:
src/[org, com, ru, ....]/[name, company-name, nick-name, ...]/[project name]
В проекте содержатся следующие пакеты:
- business. Классы, которые определяют модель поведения приложения. Это классы, которые как правило наследуются от EventDispatcher или не наследуются совсем. Они выполняют различные действия по инициализации, обработке данных и пр.
- events. Классы событий. Назначение их понятно - передача команд и данных.
- extensions. Классы, представляющие собой расширения классов Mate. Собственно, расширяют функционал Mate для конкретных целей приложения. Таковых, в средне-обычном проекте вообще не бывает.
- maps. Здесь размещаются карты событий EventMap. Содержат обработчики событий EventHandlers, Injectors.
- views. Классы и компоненты, представляющие UI и всё что с ним связано - в общем, занимаются вводом и отображением данных.
- vos. Классы объектов данных (Value Object). Это классы, наследники EventDispatcher, с набором bindable-свойств, представлюящих данные объекта. VO не должны ничего делать кроме как получать и выдавать свои данные.
Само собой разумеется, что каждый волен пользоваться собственной структурой. Но по мне, так лучше присоединиться к общественности и следовать какому-то общему правилу. Хотя бы самому обобщенно общему. Для лучшего понимания собственного и чужого кода.
Такая структура хорошо подходит для относительно простого проекта. Однако, работая над крупным проектом, я убедился, что этого мало. Нужна также смысловая структуризация. То есть, в пакете проекта я располагаю пакеты функционально обособленных модулей, а уже каждый пакет модуля содержит обозначенную выше структуру. Общие для всех модулей сущности складируются в пакет "common". Такой способ особенно оправдан в проектах с использованием подгружаемых модулей.Первое Mate-приложение
А о чем будет наше приложение? После некоторых изысканий, я окончательно убедился, что фреймворк рассчитан на работу с данными.
Позже я делал настраиваемый анимационный движок для виджета, где данные играли не самую первую роль, но, всё же, в приложениях без необходимости обработки данных Mate действительно не нужен.
И тут подвернулся как раз подходящий проект - еще одна интерактивная карта с подгружаемыми данными маркеров и списка объектов. Ну теперь нужно не облажаться и все-же применить новое учение.
Опишу приблизительный процесс создания приложения с использованием Mate. Все действующие лица не вымышлены, но и приводятся не в полном составе, без усложнений, связанных с особенностями проекта.
1. Создаем все Views
Их у меня получилось два:
- первый - вывод карты с маркерами (LayerView.mxml),
- второй - списки информации по объектам карты (InformationView.mxml).
Экраны оформляю так, чтобы все детали ушли в компоненты, а полученные компоненты "плавали на поверхности".
Таким образом, InformationView содержит компоненты:
- InformationPanel - панель списка объектов карты
- RouteSelectionPanel - панель выбора варианта маршрута
Каждый из них имеет dataProvider, в который передается список данных объектов карты informationDataProvider и список маршрутов routesDataProvider.
А LayerView содержит компоненты:
- LayerContent - графическое содержимое карты (имеет selectedRoute - текущий вариант маршрута - ID клипа, который выводится на карте в данный момент)
- MarkerSet - слой с множеством маркеров (имеет dataProvider)
Всё это лежит в папке views.
2. Создаем VO
Теперь создадим объекты данных, которые будут выводить наши views. Это обычные потомки EventDispatcher с Bindable-свойствами:
- InstitutionVO - объект, описывающий организацию (дом) на карте (id, название, координаты маркера)
- RouteVO - объект, описывающий маршрут на карте (id клипа, название маршрута)
Размещаем их в папке vos.
3. Создаем файлы данных
Имея представление о данных, которые мы выводим, можно создать XML-файл с данными. Данные будем получать по HTTP-запросу, и нам не важно, будет ли их кто-то генерировать или это будет простой XML файл. Сейчас главное, чтобы наше приложение их получало, обрабатывало и выводило. Создаю в src папку data, в которой размещаю XML-файл с данными. Структуру выбираю произвольно - так как мне удобно - тех-требований на формат обмена данными нет, поэтому их диктую я сам. URL файла данных приложение получает через переменные FlashVars (без подробностей).
4. Создаем поставщиков данных
InformationDataProvider - так я его назвал. Он получает загруженные данные, обрабатывает их и размещает у себя. Собственно, этим занимается его метод aquire(data:XML), который помещает данные в полях:
- information:ArrayCollection - список объектов InstitutionVO,
- routes:ArrayCollection - список объектов RouteVO.