Давно хотел написать об этом, да все руки не доходили… На сайте JetBrains доступны два четыре относительно новых видеоурока, касающихся поддержки Flex в Intellij IDEA:

  1. «„Hello Flex“ with Intellij IDEA».
  2. «How to configure an Intellij IDEA project for creating a multilingual Flex application».
  3. «Advanced Flex Support in IDEA 8».
  4. «Working with BlaseDS».

Кстати, сам не проверял, но, насколько мне известно, начиная с версии 8.1.1 в IDEA появилась поддержка встраиваемой ASDoc-документации.

P.S.: с Днем Победы вас!

UPDATE: В список добавлены еще 2 урока. Спасибо nicity за информацию.

9 комментариев

Теги:

Ребята с сайта ByteArray.org просят проголосовать в Adobe JIRA за возможность одновременного добавления DisplayObject-а в разные контейнеры. С подробностями можно ознакомиться здесь. Голосовать или нет — решать вам. Но, по-моему, это достаточно полезное нововведение, которое позволит, например, тем же разработчикам игр снизить расход оперативной памяти на повторяющихся векторных текстурах.

10 комментариев

Теги:

А знаете ли вы, что, начиная с версии 5, в Java появилась такая интересная «фишка», как импорт статических членов класса? Выглядит это следующим образом. Допустим, в нашем классе в нескольких местах используется метод Math.random(). Если поместить в начало класса следующий импорт:

JAVA:
  1. import static Math.random;

то мы можем в любом месте этого класса вызывать метод при помощи более короткой записи:

JAVA:
  1. double val = random();

Можно импортировать все статические члены класса, указав вместо названия конкретного поля или метода символ *:

JAVA:
  1. import static Math.*;

В Groovy импорт статических членов также поддерживается, но в более продвинутой форме — кроме указания имени импортируемого члена класса, можно указывать еще и псевдоним (англ. alias), через который этот член будет доступен в коде:

GROOVY:
  1. import static Math.random as rand

Таким образом, мы создали псевдоним rand и теперь можем через него производить вызов статического метода Math.random:

GROOVY:
  1. double value = rand()

Кстати, точно таким же образом в Groovy можно указывать псевдоним для импортируемого класса:

GROOVY:
  1. import groovy.lang.ExpandoMetaClass as EMC
  2. // ...
  3. def metaClass = new EMC(Integer)

В ActionScript 3 подобного функционала пока нет, но если он появится в будущих версиях, то этот язык станет чуточку более удобным.

7 комментариев

Теги:

Предлагаю вашему вниманию небольшой трюк по оптимизации Flex приложений.

Часто бывает необходимым наделить свой класс возможностью рассылать события, однако мы почти уверены, что подписываться на эти события объекты-получатели будут крайне редко. Поэтому не хочется наследовать в своем классе весь функционал flash.event.EventDispatcher и запускать «без дела» в коде своего класса распространение событий вызовом метода dispachEvent().

Как раз на этот случай во Flex 4 framework припасен утилитный класс mx.utils.OnDemandEventDispatcher, позволяющий улучшить производительность нашего приложения по двум направлениям:

  • OnDemandEventDispatcher не является наследником EventDispatcher, а только лишь реализует интерфейс IEventDispatcher. Класс посредством композиции делегирует выполнение методов, объявленных в интерфейсе, внутреннему экземпляру EventDispatcher. Сам же внутренний объект-диспетчер создается только в случае необходимости — при первой подписке на рассылку событий от текущего объекта. Таким образом, удается немного сэкономить занимаемый приложением объем оперативной памяти.
  • Если еще ни один объект не подписывался на получение событий, то делегирование методов внутреннему объекту-диспетчеру не производится. Тем самым, глубина стека выполнения функций ограничивается методами объекта-диспетчера. Это хорошо иллюстрирует листинг, взятый из класса OnDemandEventDispatcher:
    Actionscript:
    1. public function dispatchEvent(event:Event):Boolean
    2. {
    3.     if(_dispatcher != null)
    4.         return _dispatcher.dispatchEvent(event);
    5.     return true;
    6. }

Таким вот нехитрым образом, наследуясь там, где это необходимо, от класса OnDemandEventDispatcher мы хоть и ненамного, но все же улучшаем производительность нашего Flex приложения.

Комментариев нет

Теги:
14 апреля 2009

Две новые книги о Flex 3

А вы в курсе, что в продаже появились две новые книги о Flex 3? Обе книги я обязательно куплю для своей коллекции, как только появится возможность:

  1. «Изучаем Flex 3. Руководство по разработке насыщенных интернет-приложений».
  2. «Flex 3. Сборник рецептов».

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

9 комментариев

Теги:

Вчера вышла новая EAP-сборка Intellij IDEA 9805 с поддержкой пространств имен в MXML-разметке Flex 4 Gumbo. Если кто не в курсе, эти пространства имен появились после отказа от префикса Fx в именах компонентов Gumbo.

Редактирование пространств имен, о которых будет известно среде разработки, производится в настройках проекта (комбинация Ctrl+Alt+Shift+S) на вкладке Flex Compiller Settings. Однако добавлять в этот список стандартные пространства имен (http://ns.adobe.com/mxml/2009, library://ns.adobe.com/flex/spark, library://ns.adobe.com/flex/halo, http://www.adobe.com/2006/mxml и http://ns.adobe.com/fxg/2008) совсем необязательно — они подхватываются средой «на лету» из файла flex-config.xml.

Хочется пожелать разработчиками также побыстрее справиться с изменившимся синтаксисом стилевых блоков CSS. ;-)

Примечание: если вы используете самостоятельную сборку Flex 4 SDK и у вас не компилируется SWF-файл приложения, то это означает, что вам необходимо удалить файл IDEA_INSTALL_DIR\plugins\flex\lib\idea-fcsh-fix.jar. Более подробно об этой ошибке читайте в JetBrains JIRA.

4 комментария

Теги:
10 апреля 2009

Новый Garbage Collector

Друзья, читающие этот блог через RSS-ленту! Я рад сообщить вам, что в последние пару месяцев Garbage Collector работал уже с обновленным дизайном. Производилась обкатка и отладка верстки и скриптов новой темы. Поэтому, если вы еще не видели, то можете зайти и посмотреть, как сайт выглядит в настоящий момент.

На днях были завершены последние процедуры, связанные с переездом Garbage Collector на новый домен. Итак, основным доменом блога теперь, как это ни странно, является garbage-collector.ru. Прошу любить и жаловать. RSS-лента статей, транслируемая с использованием сервиса FeedBurner, останется доступной по прежнему адресу, за небольшим изменением, связанным с приобретением сервиса компанией Google. Огромная просьба к владельцам ресурсов, ссылающихся на этот блог, обновите, пожалуйста, ссылку вот на такую:

XML:
  1. <a href="http://garbage-collector.ru/" title="Журнал о Flash, Flex, AIR, Groovy и разработке Rich Internet Applications в условиях, приближенных к реальным">Garbage Collector</a>

Хочу выразить огромную благодарность всем тем, кто участвовал в создании новой версии блога:

  • Аникутину Алексею за концепт дизайна. Вернись в строй, Алексей, и продолжай публиковать новые статьи! Я понимаю, что в настоящий момент ты сильно загружен работой. Но многим здесь не хватает твоих экспериментов и наблюдений! ;-)
  • Баграмову Владимиру за проработку дизайна информационных блоков страницы, за шлифовку и наведение лоска. Владимир, без твоей помощи новая версия блога вряд ли бы увидела свет.
  • Печенкину Андрею за верстку, кодирование и скриптование. Качество выполнения твоей работы, Андрей, не может не радовать!

Список публикуется в порядке подключение людей к процессу.

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

Итак, друзья, в добрый путь!

5 комментариев

Теги:

Довольно часто приходится встраивать в ActionScript-приложения дополнительные шрифты, которых может не оказаться на компьютере конечного пользователя. Однако к этой операции нужно подходить со знанием дела. Зачастую совершенно нет необходимости во встраивании шрифта в ролик целиком — в большинстве приложений, с которыми мне приходилось иметь дело, достаточно было организовать поддержку латинских и кириллических символов в текстовых полях, не забывая, конечно же, о цифрах и символах пунктуации. Таким способом можно сократить размер итогового SWF-ролика на несколько десятков килобайт.

Уже достаточно длительный период времени я компилирую приложения при помощи Flex SDK, прибегая к Flash IDE только лишь для того, чтобы встроить векторную графику. Поэтому и речь в этой статье пойдет о том, как встраивать шрифты в приложениях, компилируемых именно таким способом.

Для того чтобы справиться с этой задачей, мы обращаемся к документации по метатэгу Font и видим, что одним из его атрибутов является unicodeRange. Именно при помощи этого атрибута мы можем указывать Unicode-значения символов шрифта (а так же интервалы значений символов), которые компилятор должен встроить в ролик. Прибегнув к таблице символов Unicode, определяем, что нам необходимо импортировать следующие символы:

  • U+0020-U+007F — основная латиница;
  • U+00A0-U+00FF — дополнительные символы, которые могут понадобиться (вроде знака © или русских кавычек-елочек);
  • U+0400-U+04FF — кириллические символы верхнего и нижнего регистров.

Если собрать все вместе, то код для встраивания шрифта должен быть примерно следующим:

Actionscript:
  1. [Embed(source="/../assets/fonts/CHR56__C.TTF",
  2.     fontFamily="CharterC_i", fontStyle="italic",
  3.     unicodeRange="U+0020-U+007F, U+00A0-U+00FF, U+0400-U+04FF")]

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

4 комментария

Теги:
5 марта 2009

Пример кода

Читаю в настоящий момент главу про работу с 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>

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

7 комментариев

Теги:

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

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

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

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

8 комментариев

Теги: