Flex и RIA блоги



2008-05-21

17:17:00, Flash-разработка
Хороший стиль Flex-программирования. Именование

Хочется кодить лучше, правильнее, грамотнее, понятнее, по правилам, ... и чтобы не было стыдно кому-нибудь показать.

Adobe любит нас, и создал для нас небольшой свод правил, который поможет не только лучше понимать Flex SDK, но и нам самим сделать свой код лучше.

Flex SDK coding conventions and best practices

Итак, сегодня мы поговорим об именовании (Naming).

Именование

Наши стандарты именования соответствуют стандартам ECMAScript и Flash Player 9.


Использование сокращений

Вообще, лучше их избегать. Например:
можно: calculateOptimalValue(), нельзя: calcOptVal().

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

Однако, есть общепринятые сокращения:
acc = accessibility (ButtonAccImpl)
auto = automatic (autoLayout)
eval = evaluate (EvalBindingResponder)
impl = implementation (ButtonAccImpl)
info = information (GridRowInfo)
num = number (numChildren)
min = minimum (minWidth)
max = maximum (maxHeight)
nav = navigation (NavBar)
regexp = regular expression (RegExpValidator)
util = utility (StringUtil)

Существуют и другие сокращения. Если мы не догадаемся об их смысле, придется поискать их применение в исходном коде. Или подумать еще разок.

Иногда можно встретить отсутствие логики в применении сокращений. Например, horizontalScrollPolicy и verticalScrollPolicy, но HBox и VBox.


Использование аббревиатур

Аббревиатуры довольно часто используются во Flex: AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, XML.

Аббревиатуры всегда пишутся либо заглавными, либо строчными буквами:
можно: SWF, swf, нельзя: Swf

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

Например:
можно: CSSStyleDeclaration, IUID, uid, IIME, imeMode.


Разделение слов

Когда идентификатор состоит из двух или более слов, используется два метода разделения слов:
- Регистром - каждое отделяемое слово пишется с большой буквы
- Подчеркиванием - слова разделяются символом подчеркивания

В некоторых местах может встретиться нарушение этого правила: комбинация слов становится целым словом: dropdown, popUp, pulldown.


Имена, содержащие тип

Если в имени нужно указать тип, поместите его, не сокращая, в конец имени. Откажитесь от использования суффиксов типа "_mc" по старой традиции ActionScript 1.

Например:
можно: border, borderSkin, or borderShape, нельзя: border_mc

Часто лучшим именем для объекта является имя его типа в отличающемся регистре (не соглашусь, т.к. смысловой нагрузки никакой - годится только для тестов и примеров):
var button:Button = new Button();


Имена пакетов

Начинаются со строчной буквы и для разделения слов используется регистр: controls, listClasses.

Имена пакетов должны быть всегда существительными или отглагольными -ing формами (герундий), но не глаголами, прилагательными или наречиями.

Пакет, включающий множество схожих элементов должен именоваться общим названием этих элементов во множественной форме: charts, collections, containers, controls, effects, events ...

Обычно, -ing формами именуются пакеты, реализующие концепции (я бы сказал процессы): binding, logging, messaging, printing ...
С другой стороны, это могут быть существительные, выражающие концепцию: accessibility, core, graphics, rpc ...

Пакет, содержащий классы, которые обеспечивают работу компонента FooBar, должен называться fooBarClasses.


Имена файлов

Имена файлов импортируемых API должны соответствовать определениям public API. Но для include-файлов (файлов фрагментов кода) это правило не применяется.

Имя include-файла начинается с заглавной буквы и разделение слов в имени осуществляется регистром: BorderStyles.as, ModalTransparencyStyles.as

Имена файлов ресурсов пишутся строчными буквами, а слова разделяются символом подчеркивания: icon_align_left.png


Имена пространств имен

Именуются строчными буквами с разделением слов символом подчеркивания: mx_internal, object_proxy.


Имена интерфейсов

Начинаются с заглавной "I", разделение слов в имени осуществляется регистром: IList, IFocusManager, IUID.


Имена классов

Начинаются с заглавной буквы, разделение слов в имени осуществляется регистром: Button, FocusManager, UIComponent.

Подклассы Event именуются FooBarEvent.
Подклассы Error именуются FooBarError.
Подкласс EffectInstance, ассоциированный с эффектом компонента FooBar именуется FooBarInstance.
Подклассы Formatter именуются FooBarFormatter.
Подклассы Validator именуются FooBarValidator.
Классы скинирования компонентов именуются FooBarBackground, FooBarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, и т.д.
Классы утилит именуются FooBarUtil (не FooBarUtils - пакет может именоваться во множественном числе, но класс - только в единственном).
Общепринято базовый класс именовать FooBarBase: ComboBase, DateBase, DataGridBase, ListBase.


Имена событий

Начинаются со строчной буквы, разделение слов в имени осуществляется регистром: move, creationComplete.


Имена стилей

Начинаются со строчной буквы, разделение слов в имени осуществляется регистром: color, fontSize.


Значения строковых свойств

Начинаются со строчной буквы, разделение слов в имени осуществляется регистром: "auto", "filesOnly".


Имена констант

Именуются полностью заглавными буквами с разделением символом подчеркивания: OFF, DEFAULT_WIDTH.

Если константа строковая, слова в имени константы должны соответствовать словам в строке ее значения:
public static const FOO_BAR:String = "fooBar";


Имена свойств (переменные и установщики)

Начинаются со строчной буквы, разделение слов в имени осуществляется регистром: i, width, numChildren.

Используйте "i" для имени переменной цикла "for", и "n" для имени верхнего предела цикла.
Используйте "j" для имени переменной вложенного цикла "for", и "m" для его имени верхнего предела цикла:
for (var i:int = 0; i < n; i++)
{
for (var j:int = 0; j < m; j++)
{
...
}
}

Используйте "p" для имени переменной цикла "for..in":
for (var p:String in o)
{
...
}

Бывают ситуации, когда в классе необходимо переопределить установщик, но предполагается, что базовый установщик будет продолжать использования. Для сохранения базового установщика, необходимо создать новый установщик, имя которого должно формироваться путем добавления к имени базового установщика символа "$". Полученный установщик нужно определить как "final". Он не должен ничего делать, кроме вызова базового установщика. Напимер, нам нужно перекрыть установщик numChildren, но при этом сохранить возможность вызывать базовый super.numChildren - для последнего мы создаем следующее:
mx_internal final function get $numChildren():int {
return super.numChildren;
}


Переменные для хранения данных установщиков

К имени установщика добавляется символ подчеркивания "_":
для foo имя переменной _foo.


Имена методов

Начинаются со строчной буквы, разделение слов в имени осуществляется регистром: measure(), updateDisplayList().

Имена методов должны быть всегда глаголами.

Лучше не использовать методы без параметров подобно getFooBar() или setFooBar(). Вместо них используйте установщики. Однако, если getFooBar() - медленный метод, требующий больших вычислений, лучше его назвать findFooBar(), calculateFooBar(), determineFooBar(), и т.д., выражая его суть, а не то, что он способен возвращать что-либо.

Аналогично установщикам, если базовый метод перекрывается, но требуется сохраненить доступ к нему, создается метод с именем базового метода, перед которым добавляется символ "$":
mx_internal final function $addChild(child:DisplayObject):DisplayObject
{
return super.addChild(child);
}


Обработчики событий

Имя обработчика события формируется путем добавления к имени типа события слова "Handler": mouseDownHandler().

Если обработчик предназначен для событий, отправленных субкомпонентами (т.е. не this), перед именем обработчика, сформированного по вышеописанному правилу, добавляется имя субкомпонента, отделенное символом подчеркивания "_": textInput_focusInHandler().


Имена аргументов

Всегда используйте для установщиков имя аргумента "value":
можно - public function set label(value:String):void
нельзя - public function set label(lab:String):void
нельзя - public function set label(labelValue:String):void
нельзя - public function set label(val:String):void

Всегда используйте для обработчиков событий имя аргумента "event":
можно - protected function mouseDownHandler(event:Event):void
нельзя - protected function mouseDownHandler(evt:Event):void


Имена пакетов ресурсов

Если пакет рессурсов содержит ресурсы для определенного пакета классов, имя пакета рессурсов должно быть таким же: controls, {formatters}}, validators.


Имена идентификаторов ресурсов

Начинаются со строчной буквы, разделение слов в имени осуществляется регистром: pm, dayNamesShort.


Прочая терминология

Избегайте использование слова "object", т.к. оно вносит неопределенность.

Слово "item" - элемент данных и никогда DisplayObject.

Слово "renderer" - это DisplayObject, который отображает элемент данных.

Слово "type" означает тип AS3, используйте вместо него слово "kind".

С именованием разобрались. Теперь попытаемся придерживатся этих правил на практике. У меня есть много своих правил именования, и скорее всего часть из них я оставлю (например именовать private-свойства с префиксом в два подчеркивания, а protected-в одно), но правила, принципиально идущие вразрез с вышеприведенными надо искоренять.

Следующий раздел "Language Usage" разберем в ближайшее время.


2008-05-20

23:51:02, Garbage Collector
Использование фильтров Pixel Bender в ActionScript 3

О выходе Flash Player 10 beta aka «Astro» не писал только ленивый и «Garbage Collector». Однако последний, из этих двух, все же решил исправиться.

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

Создание собственных фильтров стало возможно благодаря новому продукту от Adobe под названием Pixel Bender Toolkit (раннее известного как Adobe Image Foundation Toolkit). Pixel Bender Toolkit использует собственный C-подобный язык описания алгоритмов преобразования изображений. Что ж, давайте попробуем создать собственный фильтр и применить его в нашем ActionScript 3 приложении.

Шаг 1: Подготовка

Прежде чем приступить к нашему знакомству с обозначенной темой, нам придется немного подготовиться. Во-первых, нам потребуется сам Pixel Bender Toolkit для написания фильтра и его компиляции. А во-вторых, нам потребуется настроить свою среду разработки. Приступим.

Инструкцию по скачиванию и установке Pixel Bender Toolkit можно найти на Adobe Labs. О том, как настроить свою среду разработки, можно почитать следующие статьи:

Шаг 2: Написание и компиляция собственного эффекта

Для первого знакомства, я думаю, стоит взять простой эффект — сепия. Так как пока мои навыки написания собственных фильтров на Pixel Bender не велики, я решил воспользоваться готовым решением (правда код подвергся небольшой корректировке в свете некоторых изменений в языке).

<languageversion : 1.0;>

kernel Sepia
<   namespace:      "popforge::ImageProcessing";
    vendor:         "Joa Ebert";
    version:        1;
    description:    "A good looking sepia filter using Y transform";
>
{
    input image3 source;
    output pixel3 result;

    void evaluatePixel()
    {
        pixel3 color = sampleLinear(source, outCoord());

        float y = 0.299 * color.r + 0.587 * color.g + 0.114 * color.b;

        float r = min(1.0, y + 0.19);
        float g = max(0.0, y - 0.055);
        float b = max(0.0, y - 0.22);

        result = pixel3(r, g, b);
    }
}

И так у нас есть исходный код фильтра. Скомпилируем его.

Запускаем Pixel Bender Toolkit и создаем новый фильтр (File → New Pixel Bender Kernel Filter). Теперь в окно редактора вставляем исходный код и компилируем его (File → Export Pixel Bender Byte Code for Flash). Полученный файл с расширение .pbj мы и будем использовать в нашем приложении.

Шаг 3: Написание приложения

Для демонстрации применения фильтра мы напишем простое приложение. В его задачи будет входить загрузка изображения, его отображение, загрузка фильтра и показ этого же изображения, но уже с применением фильтра. Дальше подробно расписывать не буду, ибо вся суть в коде. Остановлюсь лишь на некоторых моментах. Для применения фильтра нам потребуется новоиспеченный класс flash.display.Shader, который должен получить фильтр в бинарном виде. Результат применения фильтра мы отрисовываем в экземпляре Shape с помощью метода graphics.beginShaderFill.

Actionscript:
  1. package
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.Loader;
  5.     import flash.display.Shader;
  6.     import flash.display.Shape;
  7.     import flash.display.Sprite;
  8.     import flash.display.StageScaleMode;
  9.     import flash.events.Event;
  10.     import flash.net.URLLoader;
  11.     import flash.net.URLLoaderDataFormat;
  12.     import flash.net.URLRequest;
  13.    
  14.     [SWF(width='500', height='510', frameRate='31', backgroundColor='0x000000')]
  15.     public class RuntimePixelBenderExample extends Sprite
  16.     {
  17.         private var _image:Bitmap = null;
  18.         private var _shape:Shape = null;
  19.         private var _imageLoader:Loader = null;
  20.         private var _filterLoader:URLLoader = null;
  21.         private var _sepiaShader:Shader = null;
  22.        
  23.         public function RuntimePixelBenderExample()
  24.         {
  25.             stage.scaleMode = StageScaleMode.NO_SCALE;
  26.             loadImage();
  27.         }
  28.        
  29.         private function loadImage ():void
  30.         {
  31.             _imageLoader = new Loader();
  32.             _imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
  33.             _imageLoader.load(new URLRequest("assets/image/bender.jpg"));
  34.         }
  35.        
  36.         private function loadFilter ():void
  37.         {
  38.             _filterLoader = new URLLoader();
  39.             _filterLoader.dataFormat = URLLoaderDataFormat.BINARY;
  40.             _filterLoader.addEventListener(Event.COMPLETE, onFilterLoaded);
  41.             _filterLoader.load(new URLRequest("assets/filter/Sepia.pbj"));
  42.         }
  43.        
  44.         private function applyFilter ():void
  45.         {
  46.             _sepiaShader.data.source.input = _image.bitmapData;
  47.            
  48.             _shape = new Shape();
  49.             _shape.y = 255;
  50.            
  51.             _shape.graphics.beginShaderFill(_sepiaShader);
  52.             _shape.graphics.drawRect(0, 0, 500, 255);
  53.             _shape.graphics.endFill();
  54.            
  55.             addChild(_shape);
  56.         }
  57.        
  58.         private function onImageLoaded (event:Event):void
  59.         {
  60.             _image = _imageLoader.content as Bitmap;
  61.             addChild(_image);
  62.             loadFilter();
  63.         }
  64.        
  65.         private function onFilterLoaded (event:Event):void
  66.         {
  67.             _sepiaShader = new Shader(_filterLoader.data);
  68.             applyFilter();
  69.         }
  70.     }
  71. }

Необходимость в загрузке фильтра во время исполнения иногда может вызвать некоторые трудности. Но мы можем это легко обойти, включив байткод фильтра в приложение на этапе компиляции (как это делается, можно узнать из статьи «Включение файлов в SWF в виде байтовой последовательности»). В этом случае наше приложении будет выглядеть так:

Actionscript:
  1. package
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.Loader;
  5.     import flash.display.Shader;
  6.     import flash.display.Shape;
  7.     import flash.display.Sprite;
  8.     import flash.display.StageScaleMode;
  9.     import flash.events.Event;
  10.     import flash.net.URLRequest;
  11.     import flash.utils.ByteArray;
  12.    
  13.     [SWF(width='500', height='510', frameRate='31', backgroundColor='0x000000')]
  14.     public class CompiledPixelBenderExample extends Sprite
  15.     {
  16.         private var _image:Bitmap = null;
  17.         private var _shape:Shape = null;
  18.         private var _imageLoader:Loader = null;
  19.        
  20.         [Embed(source="assets/filter/Sepia.pbj", mimeType="application/octet-stream")]
  21.         private var SepiaFilter:Class;
  22.        
  23.         private var _sepiaShader:Shader = null;
  24.        
  25.         public function CompiledPixelBenderExample ()
  26.         {
  27.             stage.scaleMode = StageScaleMode.NO_SCALE;
  28.             loadImage();
  29.         }
  30.        
  31.         private function loadImage ():void
  32.         {
  33.             _imageLoader = new Loader();
  34.             _imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
  35.             _imageLoader.load(new URLRequest("assets/image/bender.jpg"));
  36.         }
  37.        
  38.         private function applyFilter ():void
  39.         {
  40.             _sepiaShader = new Shader(new SepiaFilter());
  41.             _sepiaShader.data.source.input = _image.bitmapData;
  42.            
  43.             _shape = new Shape();
  44.             _shape.y = 255;
  45.            
  46.             _shape.graphics.beginShaderFill(_sepiaShader);
  47.             _shape.graphics.drawRect(0, 0, 500, 255);
  48.             _shape.graphics.endFill();
  49.            
  50.             addChild(_shape);
  51.         }
  52.        
  53.         private function onImageLoaded (event:Event):void
  54.         {
  55.              _image = _imageLoader.content as Bitmap;
  56.              addChild(_image);
  57.              applyFilter();
  58.         }
  59.     }
  60. }

Исходный код проекта можно скачать здесь.

Послесловие

Новые возможности Flash Player 10 вскоре сильно изменят внешний вид будущих flash-приложений. И с одной из таких возможностей мы уже познакомились. Замечу, мы рассмотрели пример применения простого фильтра, не требующего параметризации. В остальных случаях читайте документацию (она идет в комплекте с Pixel Bender Toolkit), пишите фильтры и делайте мир лучше (жду русскоязычный блог про Pixel Bender). Что ж, на этом на сегодня все. Надеюсь вам было интересно.

Для тех, кто все еще здесь

Напоследок, несколько полезных ссылок:


17:49:03, Flash-ripper.com
За это нам не будет стыдно: Animefish.blogspot.com

Дед Пихто, он же Animefish, он же Человек, который расскажет об анимации на Тайной Сходке Аниматоров в Донецке 28 июня 2008 года — открыл себе мультяшный блог и выкладывает в него свои картинки и мульты. Смешные :-)


12:52:00, Flash-разработка
Немногодетный Loader. AS3
Loader может хранить всего один визуальный объект. Попытка загрузки в один и тот же Loader более одного раза заканчивается генерацией исключения.
Кроме того, как сказано в хелпе, вызов методов: addChild(), addChildAt(), removeChild(), removeChildAt(), and setChildIndex(). также закончится неудачей.

Но Loader любит своего единственного малютку, и если мы захотим покуситься на него, нам придется убить самого Loaderа.

12:27:07, Flash-ripper.com
Я слышу много хорошего о Flash10. А если сравнить с Silverlight?

Вот лента ответов на вопрос "кто сильнее, Брюс Ли или Арнольд Шварцнеггер Flash10 или Silverlight", заданный Робертом Скобли. Есть автоматический перевод этой ленты, а вот первые 3 ответа на русском:

Роберту: IMHO, CLR (Common Language Runtime) в Silverlight рулит. Вы получаете быстрый JavaScript, Ruby и Python, работающие прямо в браузере. У них есть почти все, что есть во Flash 10. Но популярность не такая, как у Flash. // Dion Hinchcliffe через twhirl.

Диону: "У них есть почти все, что есть во Flash 10." Это абсолютно неверно. Я большой поклонник CLR и думаю, что он очень хорош, но сказать, что в Silverlight уже есть большая часть того, что имеет Флэш-10 — это фальшивка. В нем нет почти ничего, что есть во Flash Player 10 — Pixel Bender, аппаратное ускорение, текстовое API, 3D и прочее. WPF (десктопный рантайм) имеет кое-что из этого, но Silverlight — нет. // Ryan Stewart

Райану: Просто не могу согласиться. В Silverlight есть поддержка 3D, отличные текстовые API, большуя часть потенциала Pixel Bender и более сложные модели кодирования. Однако, про аппаратное ускорение вы правы — аппаратного ускорения в Silverlight нет. Резюмируя: флэш-10 делает все здорово, я фан обеих платформ, и большинство возможностей обеих являются их общими возможностями. // Dion Hinchcliffe через twhirl

Там еще много чего сказано.


08:13:36, 33 коровы
Flex framework — это не только ценный мех, но еще и 120-150K полезного кода!

Сенсация, сенсация, срочно в номер!

Я знаю как уменьшить размер с 150 до 130 кб для флекс 3 приложения!

Теперь более осмысленые слова:

Многие жалуются, что флекс приложения имеют большой размер, и это в принципе так, 120-150 килобайт кода это не мало. Часто звучит вопрос как уменьшить размер получаемого кода.

Давайте для начала разберемся, что нам дается с этим кодом?

  • Прелоадер (у нас он есть по умолчанию и нам просто не нужно его создавать, мелочь но приятно)
  • SystemManager — все проиницилизирует и создаст условия для комфортной работы стандартных и наших компонент (он объеденяет все нижеприведеные фичи в одно единое целое и заставляет их работать)
  • DragManager — в пол пинка позволяет делать драг”н”дроп всего из всего и во все, для List компонент это делается установкой пары флегов в mxml
  • StyleManager — работа со стилями. Во флекс фреймворке это одня из самых главных фич, дизайн можно изменить легким движением руки, и менять его в рантайме, догружая особоскомпилированые файлы стилей
  • LayoutManager — позволяет нам делать различные выранивания и позиционирования, без линних рассчетов (не правда ли удобно написать в mxml-коде width=”100%” ?)
  • PopUpManager — создаем и манипулируем со всплывающими окошками
  • ToolTipManager — наши замечательные тултипы, всегда сверху, ничего лишнего ( toolTip=”эгегей это я “, помоемому отлично)
  • CursorManager — позволит менять и создавать свои курсоры
  • HistoryManager и BrowserManager — храним историю переключения наших состояний и меняем линки в браузере, это пока единственное от чего бы я смог отказатся по умолчанию во фреймворке
  • Биндинг — автоматическое обновление данных там где это нам нужно, удобно, безумно удобно, супер удобно, только на это мне не жалко 50-60К кода )
  • Стили по умолчанию — создав и запустив приложение мы получаем
    “раскрашеные” компоненты готовые к употреблению как они есть.

Согласитесь, что это совсем немало для для каких-то 120(150) килобайт кода! Если вы считаете, что тут много лишнего, то подумайте правильно ли выбрали среду разработки для вашего проекта, может все таки использовать Flash CS3 или голые AS3 проекты?

Помни: средняя фотка с фликера весит 100-150К, а страница баш.орг.ру — 200-300К

Я лично готов пожертвовать размером ради удобства и скорости разработки. Количество “динозавров” с модемами по 56кбит/с уже очень мало, стоимость мегабайта трафика уже не космическая, и задайтесь вопросом “нужно ли мое приложение всем?”, мой ответ: “кому оно нужно у того явно нет проблемы с интернетом!”

На последок открою тайну про уменьшение размера приложения.
В нагрузку к коду нам еще дают стиль по умолчанию, так вот если его “вырезать” ну или заменить на более легкий варинт то есть возможность съэкономить 10-20-30К кода, но зачем тратить это время? (самый простецкий способ это открыть framework.swc с помощью rar’а и почикать стили внутри него, если просто удалить их содержимое то проект запуститься но в рантайме будет ругатся, что ему нехватает запчастей)

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


2008-05-19

13:15:41, DimZ
fwa theater

Популярнейший рейтинг флеш сайтов theFWA открыл на днях новый подраздел своего сайта посвященный 3D анимации, в различных её проявлениях начиная: реклама, трейлеры, демо сцены и др.
http://www.fwatheater.com/


11:15:20, Flash-ripper.com
Конец переписывания студенческого кода и прочих опасностей (работа nfrfz)

Молодая студия онлайн-игр LMBO начинает работу над первым проектом. Разыскиваются гуру ActionScript 3, ниндзя С/C++, повелители PhotoShop и другие творческие личности.

Я бы хотел акцентировать внимание на том, что вакансии в LMBO — отличный шанс сделать все "как надо", ведь работа над проектом только начинается. Думаю, это будет важным аргументом для профессионалов, которым частенько приходится работать с "живыми" проектами, писанными дилетантами из-под палки, править чужой кривой код и мечтать переписать все "с нуля". Другой важный аргумент — серьезный уровень зарплат, даже для Москвы.

Кроме того — небольшой дружный коллектив, минимум бюрократии, белое оформление в компании-лидере отечественного рынка онлайн игр и начало работы в 11 утра =)

На все вопросы по поводу вакансий ответит представитель компании LMBO, опытный разработчик онлайн-игр Леонид 'Leo' Сердцев (см. В Контакте, Мой Круг — есть мысль, что читателям Ф. Потрошителя не нужно рассказывать, кто это такой :)

Ответить на вопросы Лео может как здесь, в комментариях, так и по ICQ 294276031


Всех — с новой рабочей неделей! Пусть вам легко пишецо, рисуецо и онемируецо :)

10:36:00, Flash-разработка
Куда переползли FlashVars. AS3
В ActionScript 2.0 Migration не указывается куда делись FlashVars в AS3.
Поэтому простым поиском в Help-е находим что:
Класс flash.display.LoaderInfo имеет свойство parameters:Object в которое складируются в виде ассоциативного массива параметры URL-строки SWF-файла и параметры строки FlashVars, которые действительны только для главного SWF.
Добраться до него легко, используя свойство основного flash-клипа loaderInfo:
for (var name:String in this.loaderInfo.parameters) {
trace(this.loaderInfo.parameters[name]);
}

2008-05-17

12:27:41, Flash-ripper.com
FlashDevelop с поддержкой Flash Player 10

Флэшеров не забыли: FlashDevelop уже компилирует под Flash Player 10. А также подсвечивает код новых классов и методов и автозавершает код векторных типов, типа:

var vector:Vector.<String>;
vector[0]. // автозавершение кода для String!

Читать, качать и радоваться! // от Алекса Мальцева из ruFlash


2008-05-16

16:50:32, Flash-ripper.com
URAFPUG @ IT Sea, или Летняя Крымская Встреча (объединенная)

Лето — мертвый сезон. Все едут в отпуска. Всем хочется отдохнуть!

UA-FPUG + RA-FPUG = URA-FPUG

Еще на RAFPUG-2 в Москве мы обсуждали перспективы дружбы FPUG'ов. Думали о том, как хорошо было бы встретиться летом, да на природе. Или даже на море!

Не все могут приехать в Крым? Но и в Питер, Киев, Москву, Харьков — тоже. Итак, в рамках грядущего музыкально-интернетного лета объявляется проведение общей, внеочередной, совершенно необязательной встречи URA-FPUG в рамках IT Sea — Южной Конференции Специалистов в Области Информационных Технологий, под г. Керчь 7-12 июля 2008 г.

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

Главное уже известно точно — это событие состоится и вы можете учесть его в своих планах.

C 7 по 12 июля 2008 года - URA-FPUG на IT Sea — Южной Конференции Специалистов в Области Информационных Технологий под г. Керчь, Крым

Если вам нужно связаться с организаторами по орг-вопросампишите, свяжу.

До лета!


12:48:00, Flash-разработка
Из Flex Builder во FlashDevelop

Судьба распорядилась так, что временно приходится перебросить разработку Flex-проекта с Flex Builder на FlashDevelop. Заодно проверить, как последний с этим справится.

Установил последнюю версию FlashDevelop 3.0.0 Beta7. Теперь в пустом окне "Project" есть очень заманчивая кнопка "Import a Flex project", которой я немедленно и воспользовался. FD быстренько подхватил папку Flex-проекта и поместил в нее свой файл *.as3proj. Теперь можно спокойно работать как с обычным FD-проектом.

Первая нехорошая особенность - кодировка файлов, созданных FB распознается не правильно, и приходится постоянно корректировать кодировку файлов.

При компиляции проекта, получаем ексцепшн: "Error: null java.lang.NullPointerException...
Build halted with errors (mxmlc)"
. Хорошенькое дело. Ищем причину. Аналогичная ошибка имеет место не только у меня одного. Причина кроется в какой-то ошибке при внедрении шрифта. Как только я убрал

@font-face {
font-family: localArial;
font-weight: normal;
src: local("Arial");
...
}

Ошибка пропала, но такой вариант совсем негодится. Жаль, но на этом прийдется остановиться, пока не узнаю, как побороть этот недостаток...


2008-05-15

22:59:09, Constantiner's blog
Flash Player 10 и Moonlight 1

Flash Player 10 (Astro) pseudo logoСегодня я решил соригинальничать и рассказать о том, о чем все уже знают, позже других блоггеров.

Ну рассказывать тут, собственно, не о чем. В Adobe Labs появилась бета-версия Flash Player 10, который имеет кодовое название Astro. Так, ерунда. Не стоит внимания, но я все же остановлюсь на некоторых подробностях потому как ну это просто срыв башки, да? :crazy:

Начнем по порядку:

  • Это первый релиз Flash Player’а, который идет сразу на три основные платформы. Я не линуксоид (пока), но многие радуются, что теперь Flash Player поддерживает и Ubuntu. А я по глупости считал, что и раньше поддерживал. Ну да ладно.
  • Про Open Screen Project я уже писал. Это я к тому, что данный плеер уже будет с открытым форматом SWF-файлов и API. То есть нас могут ждать опенсорсные реализации Flash Player 10.
  • Обновленный FileReference. Мне очень нравилась в Silverlight 2 такая фича, что пользователь может загружать файлы с локального диска (изображения, например) в плагин напрямую, без использования сервера. И, понятное дело, отобразить. Чтобы не гонять изображения туда-сюда. Теперь это позволяет делать и Flash Player. Мало того, он позволяет и сохранять файлы на локальную машину. Скриншоты, например. И еще кое-что, о чем ниже. В общем, фича, которую все давно ждали.
  • Работа с текстом. Ну здесь можно говорить часами. Самое главное - это новые возможности макетирования текста. Теперь мы можем делать многоколоночный текст, который будет автоматически перетекать из одной колонки в другую (из одного блока текста в другой). Мало того, мы можем редактировать и выделять текст в такой многоколоночной/многоблочной верстке как если бы это был сплошной текст. Мало того текст теперь может включать в себя таблицы и изображения в любом месте.

    Пример многоколоночной верстки во Flash Player 10 "Astro"
    Пример многоколоночной верстки во Flash Player 10 “Astro”

    Но и это еще не все. Теперь Flash Player поддерживает любое направление текста (слева направо, справа налево, в колонку). И все это в одном и том же тексте. То есть интернационализация рулит.

    Кстати, небольшое лирическое отступление по поводу интернационализации и локализации (i18n и l10n). Оказывается, что решение вопроса с текстом справа налево еще не весь круг задач по локализации приложений для культур с таким начертанием. С удивлением узнал, что необходимо также менять местами всякие панельки и колонки таблиц. Весело.

    Но вернемся к тексту. Также улучшается работа с системными (невстроенными) шрифтами (дальше мы поймем почему). Они поддерживают все то, что раньше было доступно только встроенным: возможность вращать на произвольный угол, изменять прозрачность, антиалиасинг, возможности которого улучшились для всех шрифтов (движок Saffron обновился до версии 3.1), также как и производительность сглаживания.

  • Поддержка протокола UDP. В далеком 2006-м (как быстро бежит время!) Adobe втихую купила компанию Amicima, чьи разработки и легли в основу этого нововведения. Разработки этой фирмы открывают возможности использования p2p во Flash-плеере. Подробнее можно прочитать тут. Ну а если по сути, это огромное море возможностей. Это и возможность использования VoIP напрямую между клиентами, возможность, соответственно, чата, обмена данными и изображениями, совместная работа (тот же Whiteboard). И такие решения станет делать намного проще! И новый FileReference с сохранением данных тут как раз наготове.

    Эти же разработки используются в расширениях по работе с видео (протокол RTMFP (Real Time Media Flow Protocol)). Этот протокол более эффективен (как по скорости, так и с точки зрения трафика), а также всегда поддерживает шифрование.

  • Перейдем к тому, отчего все писают кипятком, а лично я вполне равнодушен. 3D эффекты. Теперь для визуальных объектов появляется дополнительна ось, что позволяет трансформировать их в трехмерном пространстве. И, что самое интересное, с сохранением всех интерактивных возможностей. То есть мы можем в трехмерном пространстве представлять как контролы, так и целые экраны с контролами, равно как изображения и видео (с возможность, понятное дело, им управлять). Так как это реализовано на уровне среды исполнения, то производительность, конечно, приличная. А это влечет за собой обновления трехмерных движков, кучу пионеров, которые от слов “три дэ” становятся фиолетовыми в крапинку и готовы идти за вами хоть на край света. Ну и, понятное дело, кучу игрушек. В общем, just for fun (хотя не только).

    Нативное 3D во Flash Player 10 "Astro"
    Нативное 3D во Flash Player 10 “Astro”

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

    Также следует заметить, что возможность интерактивной работы с 3D-представлением объектов будет доступна во Flash IDE (которая CS4).

  • Ко всей это трехмерной вакханалии следует добавить поддержку произвольных пользовательских графических фильтров и эффектов, которые можно создавать на специальном языке с использованием специального инструментария Pixel Bender Toolkit (как говорится, с блэк-джеком и шлюхами :) ), который раньше тоже неплохо кодово именовался Hydra. Эта же технология используется в фильтрах и эффектах After Effects CS3. Она, по сути, позволяет делать безбашенные эффектные вещи, которые умещаются в 1 килобайт.

    Пример использования пользовательских графических фильтров во Flash Player 10 "Astro" (Adobe Pixel Bender)
    Пример использования пользовательских графических фильтров во Flash Player 10 “Astro” (Adobe Pixel Bender)

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

  • Улучшение в Drawing API, которые надо смотреть в деталях по коду дела, но вкратце, это возможность менять стиль уже отрисованным графическим примитивам (вроде линии) без их перерисовки заново. А также это возможность оперировать отдельными частями отрисовки в рамках одного экземпляра объекта Graphics, что, понятное дело, дает больший контроль, большие возможности и вполне позволит улучшить производительность.
  • По части производительности продолжают делаться шаги по аппаратной акселерации графики. Теперь это касается не только полноэкранного видео, но и обычного видео и аудио графики (растровые изображения, фильтры и режимы наложения). Причем, ежу понятно, для этого не надо ничего специально прописывать в коде.
  • Поддержка цветовых профилей для всех графических объектов (то есть для всего Flash-приложения). Для особо циничных ценителей.
  • Писать стыдно, но добавили. Добавили типизированные массивы в виде типа данных Vector из разрабатываемой спецификации ECMAScript 4. По мне так гордиться особо нечем (давно пора, ибо уже без этого как-то надоело). В общем, повысит удобство кодирования и производительность.
  • По части видео я тоже не сильный энтузиаст (но отдаю должное в качестве большого бизенс-потенциала). Добавился динамический стриминг, как возможность менять битрейт потокового видео на лету по мере изменения пропускной способности канала. Понятно, что это должно поддерживаться и соответствующими медиа-серверами, но оно планируется. Выше я уже вкратце рассказал про новый протокол RTMFP как добавление к старичку RTMP.
  • Новый высококачественный аудио-кодек Speex Audio Codec.
  • Динамическая генерация звука. То, без чего уже скоро не сможет жить Таня Белая. Полагаю, что созданными композициями можно будет обмениваться без использования сервера, а также сохранять на локальный диск. Будет выведена новая порода виртуальных диджеев. Тоже особо циничных.
  • Растровые изображения, которые используются во Flash Player’е, значительно увеличили максимальную поддерживаемую размерность. Многацыфр.
  • Расширилась поддержка буфера обмена. Теперь можно будет вставлять в приложение форматированный текст и даже, кажется, изображения. Что, в общем-то, очень круто.
  • Возможности контекстного меню тоже расширяются. Теперь там будет позволено использовать форматированный текст. Кажется, я все понял правильно :)

Хотел перечислить лишь наиболее волнующие нововведения, но увлекся и перечислил все. Ну и ладно!

А прочитать все подробно и на буржуйском можно тут. Доступен для скачивания плеер, доступен FAQ, доступны демки с исходниками.

Недоступна Debug-версия новой беты нового плеера. Это обидно. Но остается надежда, которая еще не умерла.

Также имеется возможность уже сейчас экспериментировать в создании демок для нового плеера. Для этого разработчики из Adobe по-быстрому подогнали версию Flex SDK, позволяющую это сделать.

Moonlight LogoНу и напоследок немного про Silverlight. Наконец-таки появился релиз первой версии Moonlight - порт Silverlight под Linux. Об этом можно подробнее прочитать на английском и на русском.

В общем, жизнь идет полным ходом. А что интересного у вас? :)

Bookmark this article at


20:19:44, Flash-ripper.com
Как сделать приложение для Flash Player 10 с помощью Flex 3 SDK

Брульянт: Targeting Flash Player 10 Beta with Flex SDK 3.0.x. Потом нам пишет Грант Скиннер, создатель тех самых демок под Flash Player 10: "Как я делал демки для 10 проигрывателя холодным маем 2008 года. Как их вообще надо делать".

Итак, если вам даже RSS лень читать — то просто держите открытым окно чата FPUG и свежие новости сами будут слетаться к вам на огонек!


18:21:00, Flash-разработка
Откуда начинается XML. AS3
Всё время возникает путаница.
Есть XML:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<item>Раз</item>
<item>Два</item>
</data>

После его загрузки, он отправляется в переменную:
private var __xml:XML;

. . .

private function onComplete(event:Event):void {
this.__xml=new XML(event.target.data).normalize();
}


Далее, мы хотим получить первый элемент списка и по логике (старой доброй логике AS2) пишем:
trace(this.__xml.data.item[0]);
Но получаем эксцепшном по лбу: "Error #1010: A term is undefined and has no properties.".
Потому что надо так:
this.__xml.item[0]
Контейнерный тег data (вместо data может быть любое другое слово) и будет являться нашим this.__xml.

11:19:00, Flash-разработка
Делаем прелоадер для Flex-приложения. Продолжение. AS3

Поиск привел к статейке: Making a Cooler Preloader in Flex: Part 1 of 3.

Доступно, с примерами раскрывается процесс создания собственного прелоадера для Flex-приложения. Пожалуй, выделю основные положения, опустив приступы остроумия автора :).

Введение.

Для создания собственного прелоадера для Flex, необходимо всего два шага:

  1. Расширить класс DownloadProgressBar.
  2. Указать Application, в свойстве preloader, этот новый класс.

Или подробнее:

  1. Создать MovieClip, содержащий 100 фреймов.
  2. Указать ему Linkage ID без имени класса.
  3. Скомпилиоровать SWF.
  4. Написать собственный прелоадер, использующий созданный Flash MovieClip.
  5. Указать в mxml-коде, в теге mx:Appliction свойство preloader с именем созданного класса.

Создание Flash клипа

Автор предлагает создать 100-фреймовый клип с анимацией отображения прогресса загрузки, и добавляет в него dynamic TextField. Полученный клип он убирает в другой клип-контейнер, содержащий таймлайн с плавной анимацией появления и скрытия прелоадера. При этом необходимо дать имена всем клипам, участвующим в доступе к 100 фреймам и текстовому полю, для того, чтобы затем обратиться к ним по принципу “dot dot down” (это оказывается у нашего брата флэшера существует такой сленг, означающий "спуск" по дереву клипов к объекту, с которым нужно взаимодействовать).

Важно: Никаких скриптов в таймлане не пишем.

Затем - что еще любопытнее - автор экспортирует всё это хозяйство во Flash 8, AS2 или AS1. Как он это объясняет, если делать прелоадер под AS3, то потребуется писать класс для прелоадера, а это повлечет за собой массу работы и дополнительного объема к файлу. Наш прелоадер должен быть простым и максимально легким.

Итак, экспортируем в Flash 8, а в Linkage указываем идентификатор и ставим 1-ю и 3-ю галки. Flex должен увидеть наш Linkage ID, когда мы внедрим наш SWF.

Класс прелоадера

Создаем класс, экстендим его от mx.preloaders.DownloadProgressBar. Внедряем в него Flash контент мета-тегом [Embed(source="... /preloader.swf", symbol="Preloader")]. В конструкторе создаем и добавляем в дисплей-лист объект прелоадера. Затем, перекрывая свойство-установщик preloader, назначаем обработчики событий загрузки.

Важный момент: для того, чтобы организовать плавное скрытие прелоадера, нобходимо прибегнуть к следующему трюку. Мы предусмотрели в клипе-контейнере анимацию скрытия прелоадера (которая заканчивается, к примеру, на 20-м фрейме, а фрейм 21 пуст) . По событию onFlexInitComplete, мы добавляем скрипт в фрейм 21: clip.addFrameScript(21, onDoneAnimating);. Наш скрипт останавливает анимацию прелоадера и генерирует событие Event.COMPLETE.

Важное добавление в комментариях: В коде обработчика onDoneAnimating необходимо отписаться от всех событий, на которые подписался класс прелоадера.

Пример и исходники прилагаются: Example Source ZIP.

Попробуем, как это работает на практике.

* * *

Попробовал. Работает. Но пришлось убить часа два на следующую проблему: В примере в главном клипе скрипт устанавливается во фрейм 21. Я создал клип с таймлайном в 21 фрейм. Не заработало. Скачал пример: Download Preloader FLA. Заработало. Подменил своим - не заработало (клип крутится по кругу, но не стартует скрипт).

В итоге, выяснилось, что необходимо добавить еще один фрейм. То есть временная шкала должна содержать не менее 22 фреймов. Причина - фреймы в параметрах метода нумеруются с нуля (источник).

* * *

Выяснилось, что не обязательно использовать версию Flash8 AS2. Можно указать и Flash 9 с AS3. Однако как ни крути, скрипты из тайм-лайна вызываться не будут. В целях снижения объема SWF-файла лучше всеже использовать более старые версии - лучший результат показал Flash 6/7 AS1/AS2, но не намного.

* * *

Еще одна важная фича - фон приложения на этапе предзагрузки. Живой Flex подсказывает нам, что это можно сделать двумя путями:

  1. Добавить в пункте "Additional compiler arguments:" строку:
    -default-background-color #336699
  2. Указать цвет фона в параметрах тегов Object и Embed при внедрении флэш-приложения в HTML-страницу:


10:39:53, Flash-ripper.com
Лучшее в новом Flash Player 10 “Astro” Prerelease глазами Ajaxian

Flash Player 10 Feature Tours and Demos

Вышла Adobe Flash Player 10 Public Beta. Скачать ее можно в лабах: Flash 10 “Astro” pre release, так же как и демо-файлы к ней.

У Аяксианца появился обзор новой версии проигрывателя после просмотра в нем демок.

Ушел читать мнение постороннего наблюдателя о новой вервии Flash, вернусь через 10 минут и сравню ощущения со своими.

Вернулся. Ощущение 1: Аяксианец, как и другие смертные, не может устоять перед трехмерными фишками нового проигрывателя. То ли еще будет, когда он познакомится с платформой "Альтернатива" 5.0 :-)

Ощущение 2: Обзор фич нового проигрывателя довольно общий, но есть и и очень интересные, о которых я похоже, не знал:

- Полный контроль над контекстыми меню. Ура, товарищи! И Спасибо тебе, Сильверлайт).

Рантайм-доступ к File Reference — загружайте в свое RIA все нужные файлы во время выполнения и — сохраняйте обратно через стандартные диалоги.

- Динамический стриминг — про видео писать не буду. Не фанат я его, не фанат :)

- Text Layout Components — набор расширяемых компонентов для продвинутого контроля над текстом. Моя любимая фича :)


07:08:39, 33 коровы
Flash Player 10 beta

Flash Player 10 beta

обещает сплошные удовольстия


06:50:28, DL1t's blog
Свершилось - Flash Player 10 beta

http://labs.adobe.com/technologies/flashplayer10/releasenotes.html

- Полноценная поддержка аппаратного ускорения во всех режимах отображения
- Кастомные пиксельные эффекты и фильтры
- Улучшенная работа с текстом
- Улучшенное Drawing API - с контролем над свойствами рисуемого объекта в рантайме
- Улучшенная работа с потоковым медиаконтентом (поддержка динамического битрейта и т п)
- Улучшенный движок антиализинга текста
- Доступ к содержимому FileReference (наконец-то не нужно слать загруженный файл на сервер и возвращать обратно)
- Поддержка проигрывания динамически сгенерированного звука
- Поддержка отображения более крупных битмапов (до 16 миллионов пикселей, 4096х4096, максимальная длина стороны 8191)
- Типизированный массив (Vector) - теперь часть ActionScript
- Улучшенная работа с цветом: поддержка пространства sRGB


2008-05-14

20:33:33, 33 коровы
UAFPUG#2, вторые впечатления.

Итоги, общие выводы и результаты можно посмотреть/почитать у Роста (1 , 2 , 3), у Романа, у Валерии и Сергея.

Из этих постов становится понятным, что все удалось отлично).

Лучше я поделюсь своими мыслями и ошибками, которые образовались в процессе подготовки и рассказа доклада (Сравнение средств разработки: FDT, FlashDevelop, IDEA, FlexBuilder. Возможности, недостатки, перспективы., http://fpug.org.ua/meeting2) :

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

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

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

По самому докладу:

Общее пожелание: не затягивайте с публикацией своих докладов. Практика показывает, что лучше сделать это прямо сейчас, иначе трудно избежать долгого “доведения до ума”.

Это относится ко мне на 110%. Но прошу меня извенить очень много информации и нужно привести ее в более удобоваримый вид).

Особо нетерпеливым скажу основные выводы:

  • Flex builder 3 пока можно назвать самым мощным средством разработки флекс приложений (да да именно его). Адоб медленно, но верно движется к нормальной IDE, этот вывод я озвучил
  • FDT-Enterprise я бы выбрал для разработки чисто флеш/ас3 приложений, но цена кусается (к сожалению просто забыл это озвучить в процессе доклада)
  • Большым бонусом этих IDE является то, что ни построены на базе мега IDE — Eclipse
  • FDT очень проигрывает Flex builder 3 ценой и отсутствием поддержки mxml, поэтому если намечаются разнообразные проекты (Flex|ActionScript3) то выгоднее использовать Flex Builder
  • Счастья нет — все производители очень завязаны на своих “фичах для галочек”, большом количестве готового кода, готовыми алгоритмами, протухшими решениями 10 летней давности, стереотипами и боязнью сделать что-то более удобное

Основной доклад приводится в порядок, не пройдет и года как он выйдет в свет :)


17:31:07, Flash-ripper.com
UAFPUG3: Специальная Чрезвычайная Сходка Тайных Аниматоров

Мы тут с Лерикой и Белой на днях обсуждали такую вещь — а не устроить ли такую FUG*-встречу, где можно было бы поговорить не только о сложностях компиляции, но и о радостях анимации?

Порой кажется — мы начинаем забывать, что flash — это не только километры кода, а нечто большее, способное притягивать взор, заставляющее оживлять персонажей и вызывающее улыбки на лицах :-)

Возможно, у многих flash-анимация ассоциируется исключительно с Масяней (которая клевая!), но давайте наконец сломаем стереотипы и докажем, что существует огромное количество хороших flash-аниматоров!

Их нужно собрать вместе — им есть чем поделиться друг с другом! Их нужно послушать — нам есть чему у них поучиться.

Может получиться такой проект дружбы программайстеров и анимайстеров. Прошу всех, у кого есть мысли по поводу — айда сюда!

Update: пожалуйста, если у вас есть идея доклада, который вы можете прочесть на встрече — добавьте его здесь. А если вы, наоборот, хотите о чем-то услышать — прошу на страницу запроса доклада! Примечание: для совершения этих действий вы должны быть зарегистрированы на сайте UAFPUG.

Update2: принято решение провести Встречу Аниматоров как UAFPUG3. Регистрируемся!

*FUG: упрощенное название для UAFPUG.


16:10:06, Flash-ripper.com
Оргвопросы и оргвыводы (отчет по UAFPUG-2, часть третья)

Завершаю рассказ о второй встрече Ukrainian Adobe Flash Platform User Group. В первой части было о докладах, во второй — о результатах и выводах, а теперь подумаем об организации. Начнем со скучного.

Регистрация на встрече и ее отмена в случае необходимости

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

Пожелание к участникам будущих встреч: пожалуйста, в случае, если вы по тем или иным причинам не можете быть на встрече, сообщите об этом как можно раньше путем отмены своей регистрации на сайте UAFPUG.

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

TODO: Добавить эту инфу на сайт UAFPUG

Два экрана на встречу (пока просто идея Ромы Шупера)

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

Оценка докладов, презентаций и т.п.

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

11:52:38, Flash-ripper.com
ActionScript 3 optimization techniques — лучшие техники вместе

Joa Ebert, создатель Imageprocessing Libraryчастично открытой библиотеки для продвинутой обработки изображений в Actionscript3, составил PDF-документ ActionScript 3 optimization techniques. В доке описано множество методов оптимизации AS3-приложений, как простых, так и сложных, найденных как самим Джоа, так и другими.

Но помните: преждевременным оптимизациям — "нет", своевременной архитектуре — "да"!


2008-05-13

14:48:34, Flash-ripper.com
Пол Маккартни как одно из возможных последствий UAFPUG-2

Продолжаю свой рассказ о второй встрече Ukrainian Adobe Flash Platform User Group. В первой части рассказал о докладах, теперь — о последствиях встречи, выводах и некоторых идеях на ближайшее будущее.

Результат 1: Flex Builder Is The Best. На самом деле

Интересен результат анализа от Ильи Панина: сравнив в своем докладе Adobe Flex Builder, FDT, FlashDevelop и IDEA, он пришел к выводу, что лучшим из них является Flex Builder. Вывод тем более интересен, что я знаю о давней "любви" кодеров (в том числе и своей, и особенно — Ильюхиной) к недоработкам во Flex Builder, которые действительно существуют. Но также надо признать и то, что разработчики Flex Builder исправляют это положение.

Вывод: мы на верном пути, и Adobe делает свое дело. Но — терпение, только терпение.

Результат: Проявление Темной Массы Киевского флэш-сообщества

Обнаружилось множество отважных и безумных фриленсеров, не знающих бледного света офисных ламп. Например, Максим Шаман. Порадовало появление растаманов в составе UAFPUG (Max Key). И вообще в Киеве оказалось множество суперских челов (это мой любимый FPUG-эффект). Некоторые интересные флэш-сайты были обнаружены в списке зарегистрированных участников встречи UAFPUG-2. Например, сайт Вадима Андрейчука wandrin.themix.ru — зайдите и вы обнаружите игру в "Чапаевцев". Осторожно: она увлекает.

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

Вывод: На встречах брать видео-интервью с интересными людьми, которых иначе не поймать.

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

Результат: расширение географии UAFPUG

На встрече был Александр Крестелев, и он не только оказался открытым, позитивным человеком, но и предложил провести одну из будущих встреч в славном городе-герое Одессе, где он живет и работает. Как вам эта идея?

Вывод: сделать на сайте UAFPUG карту покрытия, отображающую 1) Места, где живут участники; 2) Места проведения встреч 3) Еще идеи?

Результат: Крепкая женская дружба Татьяны Белой и Леры Маллаевой

После встречи мы перекусили в "Дровах". После этого кто-то ушел, а самые стойкие прогулялись в одно из любимых моих мест Киева: "БЖ", она же Большая Житомирская, она же Гончарка, он же Исторический музей, а на самом деле — возможность присесть на траву в самом центре Киева, рядом с играющими на дарбуках, джамбеях, гитарах и флейтах:


После встречи uafpug2. Слева направо: Александр Крестелев (Одесса), Игорь Рузанов (Киев), Татьяна Белая (Москва), Валерия Маллаева (Донецк), Ростислав Сирык (Харьков), Сергей Кривошея (Киев), Олег Галабурда (Киев). Фото: Роман Шупер.

Главный результат: желание скорее встретиться снова

Возникло острое желание провести следующую встречу UAFPUG как можно скорее. Приблизительно — 14 июня. Кстати, в этот день в Киеве выступает Пол Маккартни. Как вам идея — после встречи на концерт?

Спасибо: Роме Шуперу — за инициативу и организацию данного мероприятия.
Андрею Панасу — за помощь с залом для проведения встречи. Место оказалось удачным!

Спасибо всем, кому не все равно!


03:15:44, Flash-ripper.com
У вас всего лишь 2 часа на выполнене этого тестовго зоданея

Образец ТЗ и правопесонея по адресу хттп:\\фрии-лэнс.ру\блогс\виев.пхп?тр=200294:

Тестовое задание совсем простоей – но это необходимый момент вот содержание:

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

В путь господа. так чтобы всё было аккуратно – если вы намерены выполнить это задание -в ы должны отправить письмо с уведомлением о том что приступаете к работе на почту webmaster@lim-it.ru и art@lim-it.ru – после чего у вас будет всего лишь 2 часа на выполнение этого тестовго задания.

"что бы можно было в коде просто менять значение переменных", понятно? За работу, умнеки!!!


2008-05-12

13:05:00, Flash-разработка
Баг при выходе пользователя из комнаты. AS3. SmartFoxServer
Генерируется исключение (TypeError: Error #1009: Cannot access a property or method of a null object reference.) в модуле it.gotoandplay.smartfoxserver.handlers.SysHandler, версия модуля 1.2.0, в строке 348:
var uName:String = theRoom.getUser(userId).getName()

Генерируется клиентом при выходе из комнаты какого-либо другого пользователя, при условии, что до этого был вызван метод this.__sfs.getRoomList(); и обработано событие onRoomListUpdate.
Коррекция ошибки заключается в проверке на null метода theRoom.getUser(...):
var uName:String = "";
if (theRoom.getUser(userId)!=null)
uName = theRoom.getUser(userId).getName()

Ненавижу корректировать чужой код, но тут другого выхода не вижу.

10:01:11, 33 коровы
UAFPUG#2, первые впечатления.

UAFPUG#2 прошел успешно и удачно).
Получил массу удовольствия как от встречи, так и от прогулки по Киеву.
Единственным недостатком был мой опрометчивый выбор ехать из Харькова в Киев на автобусе — к вечеру сильно хотелось спать и мозг отказывался генерить мысли.

На днях я подготовлю более подробный отчет и выложу свой доклад и материалы по нему.

А пока можно почитать отзывы Романа.


08:56:45, Garbage Collector
Мы потеряли Saffron UML Tool?

В число самых ожидаемых мною программных продуктов, безусловно, входит Saffron UML Tool. Тем, кто не слышал или слабо представляет себе, о чем идет речь, следует почитать пост Роста об этом инструменте и посмотреть на эту красоту.





К чему это все я, последний пост в блоге разработчика Samuel Agesilas’a датирован февралем этого года, в котором содержится не двусмысленный намек на дату релиза этого инструмента. Но «воз и ныне там». Периодически заглядываю почитать комментарии, и вот недавно наткнулся на интересный комментарий, оставленный неким Jeff D. Привожу его целиком без перевода, как есть:

I can confirm that having talked to Sam last night, Saffron has been bought by Microsoft and will no longer be released as an AS3/Air app. Sam is currently working with Microsoft engineers to move the code base over to WPF/Silverlight with a view to a release in Q1 next year as an online app available as part of the Visual Studio package.

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


2008-05-11

17:30:06, Flash-ripper.com
Как прошла UAFPUG-2. Отчет, часть первая: доклады и гости

Рома Шупер, Валерия Маллаева и Сергей Ковалев уже написали хорошие отчеты об этой встрече. Я добавлю только то, что не вошло в их тексты (и продублирую самое важное).

UAFPUG-2 прошел в земляных тонах киевского паба "Золотые Ворота", расположенного в 20 метрах от одноименной живописной станции метро. Алгоритм проведения докладов получился такой: глоток пивка — тезис доклада. Еще глоточек — еще тезис. Таким образом достигалась необходимая скорость растормаживания гипоталамуса у докладчиков. Слушатели же не отставали от презентующихся и также попивали пиво. При этом успевая задавать вопросы точно в тему.

UAFPUG-2 (Ukrainian Adobe Flash Platform User Group)
Ukrainian Adobe Flash Platform User Group-2. Фото: Сергей Ковалев.

Доклады на второй встрече Ukrainian Adobe Flash Platform User Group-2

Доклады разнились как по формату, так и по целевой аудитории, и каждый был по своему хорош. Илья Панин подготовил емкий обзор современных средств разработки Flash- и Flex- приложений, уместив его в традиционный формат презентации. А вот следующий за ним доклад Тани Белой о визуализации звука во Flash был выполнен в виде интерактивного флэш-приложения, то есть SWF-файла. Соответственно, у этого доклада есть исходник в формате FLA, который, как пообещала Таня, тоже будет выложен.

В своей презентации Татьяна не ограничилась устной декомпиляцией кода. Она провела краткий экскурс в теорию музыки, познакомила нас с основами Амплитудно-Частотной Характеристики звука (АЧХ), с принципами разделения звука на тембральные полосы (Высокие-Средние-Низкие) и... не в этом даже суть. У Тани получилась не презентация, а такое магическое действо. Ее рассказ о визуализации был начат с показа чистого белого экрана, рассеченного горизонтальной черной линией на две ровные части. С самого начала зал сидел как завороженный. Стояла тишина, я слышал только звук кондиционера.


13:42:25, Flash-ripper.com
ASDoc UI — графическая оболочка для asdoc.exe

Занятно. Вчера Илья Панин в своем обзоре IDE для флэш- и флекс- разработки коснулся темы ASDoc, и вчера же я получил по почте такое письмо от Julius Loa:

Привет. Пытаюсь вынести на суд людям тулзу, которую написал и использую.

ASDocUI — это просто win оболочка для asdoc.exe. Обычно использую Flash Develop для генерации мануалов, однако, если запустить FD и открыть класс (не создавая проект), то FD не создает мануалы. По этой причине и сделал данную тулзу. Можно скачать ASDoc UI и попробовать его в деле (rar, 2.7 MB).


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