Flex и RIA блоги



2008-05-30

13:22:00, Flex 2 & Co
Пример динамического наложения двух mp3
Поигрался с примером Tinic Uro по поводу новых методов класса Sound, в частности, extract():
function extract(target:ByteArray,
length:Number,
startPosition:Number = -1 ):Number;

  • target - ByteArray, в который помещаются извлеченные сэмплы (samples);
  • length - количество сэмплов. Сэмпл содержит левый и правый каналы, каждый из которых представляет числа с плавающей точкой.
  • startPosition - позиция, с которой начнется извленение. Если она не указана, то извлечение будет идти с начала.
  • extract() - возвращает количество сэмплов, но оно может быть меньше запрошенной длины в самом конце звука.
Вот немного переделанный пример того, как можно наложить два звука друг на друга:


package
{
import flash.display.Sprite;
import flash.events.*;
import flash.media.*;
import flash.net.URLRequest;
import flash.utils.ByteArray;

public class SoundTest extends Sprite
{
private var mp3sound0:Sound = new Sound();
private var mp3sound1:Sound = new Sound();
private var dynamicSound:Sound = new Sound();
private var samples0:ByteArray = new ByteArray();
private var samples1:ByteArray = new ByteArray();

public function SoundTest()
{
mp3sound0.addEventListener(Event.COMPLETE, loadComplete0);
mp3sound0.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
//загрузка первого файла
mp3sound0.load(new URLRequest("sound0.mp3"));
}

private function loadComplete0(event:Event):void
{
mp3sound1.addEventListener(Event.COMPLETE, loadComplete1);
mp3sound1.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
//загрузка второго файла по событию загрузки первого
mp3sound1.load(new URLRequest("sound1.mp3"));
}

private function onIOError(e:IOErrorEvent):void
{
trace(e.text);
}

private function loadComplete1(event:Event):void
{
//начало динамического наложения звуков
dynamicSound.addEventListener("samplesCallback",samplesCallback);
dynamicSound.play();
}

private function samplesCallback(event:SamplesCallbackEvent):void
{
//установка массивов на нулевую позицию
samples0.position = 0;
samples1.position = 0;
var len:Number = 1000;
//извлечение сэмплов в массивы
mp3sound0.extract(samples0, len);
mp3sound1.extract(samples1, len);
//установка массивов на нулевую позицию
samples0.position = 0;
samples1.position = 0;
for (var c:int = 0; c < len; c++)
{
//получение значение каналов и их сложение
var left:Number = samples0.readFloat() + samples1.readFloat();
var right:Number = samples0.readFloat() + samples1.readFloat();
//запись значений в объект динамического звука
dynamicSound.samplesCallbackData.writeFloat(left);
dynamicSound.samplesCallbackData.writeFloat(right);
}
}
}
}

12:50:14, Flash-ripper.com
В этом году «Russian Flash Awards» пройдет в «космическом стиле»

Russian Flash Awards 2008Интересное совпадение: организаторы Russian Flash Awards как бы предвидели стилистику вышедшего недавно Flash Player 10, кодовое имя которому — Astro, и синхронизировались стилями с новым проигрывателем?

Хочу напомнить вам, что до 1 июня вы еще можете подать заявку на участие в церемонии награждения победителей и тем самым получить возможность приобрести билет на церемонию со скидкой в 50% (итого заплатиы 4 тыс. рублей). Приведу официальный пресс-релиз:


10 июня в московском клубе «Меццо Форте» состоится третья Церемония вручения Премии в области flash-разработок «Russian Flash Awards 2008». Организаторами Премии выступают корпорация «Adobe Systems» и российская IT-компания «Флексис». Организационную и PR-поддержку мероприятия осуществляет агентство «Гуров и партнеры».

«Russian Flash Awards» является одним из знаковых событий в мире информационных технологий и искусства. Среди работ будут представлены лучшие российские и зарубежные flash-проекты в девяти номинациях: Art, Коммерция, AIR/Flex, Игра, Анимация, Мультипликация, Техническая заслуга, Видео, 3D.

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

Мероприятие будет проходить в космической стилистике. Гостей праздника ждет музыкальная программа с участием диджея Svet'а, а также «космические» призы и подарки. <----- конец пресс-релиза.

Кстати, о победителях. Уже неоднократно я встречал нарекания типа "а почему эта работа (вкусняшка) не победила, а победила вот эта (какашка)?". Друзья, но разве бывает так, что мнения одинаковы? Реально — на любой аргумент "за" что-либо всегда можно найти еще больше аргументов "против". А вот член жюри RFA Иван Дембицкий подробно рассказывает о том, как именно он оценивал работы.

И еще: сколь пафосно ни звучит пресс-релиз — но факт заключается в том, что событий, подобных RFA, действительно нет, и фраза о том, что «Russian Flash Awards» является одним из знаковых событий в мире информационных технологий и искусства — верна.


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

Здесь речь пойдет о том, как лучше оформлять файлы Flex-фреймворка. Статья Formatting.

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

Длина строки

Используйте перенос на следующую строку, если длина строки превышает 80 символов. Это дает следующие преимущества:

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

Отступы

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

Разделительные блоки

Код необходимо разбивать на разделы, а полученные разделы - озаглавливать. Для этого используйте большой и малый разделители.

Большой разделитель выглядит следующим образом:

//--------------------------------------------------------------------------
//
// Overridden methods
//
//--------------------------------------------------------------------------

Блок большого разделителя начинается с 4-го символа строки и заканчивается на 80-м. Текст начинается с 8-го символа.

Малый разделитель выглядит следующим образом:

//----------------------------------
// visible
//----------------------------------

Блок малого разделителя начинается с 4-го символа строки и заканчивается на 40-м. Текст начинается с 8-го символа.

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

Разделение блоков объявления

Используйте одну пустую строку для разделения блоков объявления констант, переменных, функций:
/**
* @private
* Holds something.
*/
var a:Number;
/**
* @private
*/
var b:Number

Метаданные

можно: Inspectable[a="1", b="2"]
нельзя: Inspectable[a=1 b=2]

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

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

можно: a[0]
нельзя: a [ 0 ]

Расстановка запятых

После запятой, оставляйте один пробел. Это правило распространяется на список аргументов, элементы массива, свойства объекта.

Массивы

Ставьте один пробел:
- после левой квадратной скобки,
- перед правой квадратной скобкой,
- после каждой запятой.

можно: [ 1, 2, 3 ]
нельзя: [1, 2, 3] [1,2,3]

Исключение составляет только пустой массив:
можно: []
нельзя: [ ]

Если строка инициализации массива слишком длинна, разбивайте ее на несколько строк с выравниванием квадратных скобок:

static var numberNames:Array /* of String */ =
[
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"
];

Объекты

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

можно: { a: 1, b: 2, c: 3 }
нельзя: {a: 1, b: 2, c: 3} {a:1, b:2, c:3} {a:1,b:2,c:3}

Исключение составляет только пустой массив:
можно: {}
нельзя: { }

Если строка инициализации объекта слишком длинна, разбивайте ее на несколько строк с выравниванием квадратных скобок:

private static var TextStyleMap:Object =
{
color: true,
fontFamily: true,
fontSize: true,
fontStyle: true,
fontWeight: true,
leading: true,
marginLeft: true,
marginRight: true,
textAlign: true,
textDecoration: true,
textIndent: true
};

Функции

Пример форматирования:

var f:Function;
f = function():void
{
doSomething();
};

Объявление типов

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

можно: var n:Number;
нельзя:
var n : Number;
var n: Number;

можно: function f(n:Number):void
нельзя:
function f(n : Number) : void
function f(n: Number): void

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

Ставьте пробелы до и после оператора присваивания:
можно: a = 1;
нельзя: a=1;

Ставьте пробелы до и после инфиксного оператора:
можно: a + b * c
нельзя: a+b*c

Ставьте пробелы до и после оператора сравнения:
можно: a == b
нельзя: a==b

Не ставьте пробел между префиксным оператором и операндом:
можно: !o
нельзя: ! o

Не ставьте пробел между операндом и постфиксным оператором:
можно: i++
нельзя: i ++

Операторы

Начинайте каждый оператор с новой строки. Это дает возможность установить контрольную точку (breakpoint) на любой из операторов.
можно:
a = 1;
b = 2;
c = 3;
нельзя:
a = 1; b = 2; c = 3;

Всегда выравнивайте фигурные скобки блоков операторов:
можно:

function f():void
{
var n:int = numChildren;
for (var i:int = 0; i < n; i++)
{
if ()
{
x = horizontalGap * i;
y = verticalGap * i;
}
}
}

Нельзя:

function f():void {
var n:int = numChildren;
for (var i:int = 0; i < n; i++) {
if () {
x = horizontalGap * i;
y = verticalGap * i;
}
}
}

Объявление функций

Ставьте один пробел после каждой запятой. Никогда не ставьте пробелов после левой скобки и перед правой скобкой:
можно: f(a, b)
нельзя: f(a,b) f( a, b )

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


public function foo(parameter1:Number, parameter2:String,
parameter3:Boolean):void

public function foo(parameter1:Number,
parameter2:String,
parameter3:Boolean):void

public function aVeryLongFunctionName(
parameter1:Number, parameter2:String,
parameter3:Boolean):void

Вызов функций

Ставьте один пробел после каждой запятой. Никогда не ставьте пробелов после левой скобки и перед правой скобкой:
можно: f(a, b)
нельзя: f(a,b) f( a, b )

Оператор if

Ставьте пробел между ключевым словом if и левой скобкой. Никогда не ставьте пробелов после левой скобки и перед правой скобкой:
можно: if (a < b)
нельзя:
if(a < b)
if( a < b )
if ( a < b )

Оператор for

Ставьте пробел между ключевым словом for и левой скобкой. Никогда не ставьте пробелов после левой скобки и перед правой скобкой:
можно: for (var i:int = 0; i < n; i++)
нельзя:
for(var i:int = 0; i < n; i++)
for( var i:int = 0; i < n; i++ )
for ( var i:int = 0; i < n; i++ )

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


for (var aLongLoopVariableName:int = aLongInitialExpression;
aLongLoopVariableName < aLongUpperLimit;
aLongLoopVariableName++)

Оператор switch

Ставьте пробел между ключевым словом switch и левой скобкой. Никогда не ставьте пробелов после левой скобки и перед правой скобкой:
можно: switch (n)
нельзя:
switch(n)
switch( n )
switch ( n )

Комментарий

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

В основном, всё логично и выполнимо. Последний FlashDevelop успешно реализует эти правила в своем автокомплите. Теперь стало ясно, почему они так резко изменили политику расстановки фигурных скобок функций, а именно, перенос левой фигурной скобки на следующую строку. Честно говоря, я с этим переносом намучался, поскольку при переходе на стиль форматирования FlashDevelop, я специально переучивался оставлять левую скобку на строке с определением функции. А тут вдруг огорошили... И опять возвращаться к прежнему формату.

Ну всё. Следующий проект начинаю правильно форматировать.

Кстати, о проектах, которые сделаны в старом (не по правилам) формате. Часто приходится к ним возвращаться, дорабатывать, улучшать. Но уже трудно работать по-старому. Как тут быть? На переформатирование времени тратить не хочется. Где взять такой реформатер??!

Пока для себя я держу правило - работать в контексте стиля программирования дорабатываемого кода. Мой это код или чужой - всё равно следовать правилам текущего документа.
Если проект важный, в итоге будет выделено время на рефакторинг и всё само собой встанет на места.
Если проект чужой - он, вероятно, попадет обратно к автору, а тот лучше поймет что ему делать со своими или не своими (но похожими :) ) каракулями.

Остался маленький "хвостик" про ASDoc, который мы сейчас и разберем.


2008-05-29

21:57:00, DL1t's blog
Нет в жизни счастья: новые проблемы для Flash Player

Не успели мы обрадоваться выходу апдейта безопасности 9ого плеера, как снова начались проблемы…
В новом плеера обнаружена уязвимость, которая уже активно используется. “SecurityLab рекомендует всем пользователям отключить Flash Player до выхода исправления”.
А для полной радости осталось только узнать, что Firefox 3 некорректно работает с частью flash контента, а конкретно с onKeyUp, и эта проблема, похоже, не будет исправлена в релизе, а только в последующих апдейтах. С учетом популярности данного браузера новость, мягко говоря, не радует.


18:58:31, Flash-ripper.com
В проект MoeKorolevstvo.ru требуется АС3 программист, Москва

Параметры:

  • Москва, метро Курская.
  • 9-часовой рабочий день, удаленка не рассматривается.
  • предлагают 75 т. р., уточняют по результатам общения.
  • начало работы — июль 2008.
  • Работа в связке с Михаилом Антипиным, программирование игровой механики.

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

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

Если ко всему этому вы интересуетесь игростроением и игровым фольклором, знаете, чем orc отличается от ork, откуда взялась фраза "Dopefish Lives!" и умеете колонизировать незнакомые планеты — это большой плюс.

Далее — почта для прямой связи и перспектива работы в хорошей компании.

Только что заново понял фразу "работа в хорошей компании". Это когда работаешь вместе с хорошими людьми.


13:15:52, Flash-ripper.com
Флэш-дизайн и анимация на глобусе украинского дизайна :-)

JabbyPanda порадовал ссылкой на раздел Флэш-дизайн и анимация в Украине каталога, размещенного на сайте zud.com.ua.

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

Эта попытка навести чистоту очень радует. Смелый шаг в эпоху кромешного вебдваноля и как-бы-сетевой-демократии — пожелаю этому ресурсу достойного наполнения.


10:37:00, Flash-разработка
Хороший стиль Flex-программирования. Структура файла

Сегодня мы поговорим о том, как правильно организовать структуру файла Flex-фреймворка. Оригинальный текст: File Organization. По этой теме информации пока не много - большая ее часть в разработке.

Структура файла

Порядок организации файла следующий:

  • Блок Copyright
  • Объявление пакета package
  • Список объявлений import
  • Объявление use namespace
  • Метаданные класса
  • Объявление класса class
  • Инициализация класса extends
  • Список объявлений implements
  • Подключение файла Version.as
  • Список констант класса
  • Список "mix-ins"
  • Ресурсы, используемые классом
  • Переменные класса (static)
  • Свойства класса (static)
  • Методы класса (static)
  • Конструктор
  • Переменные
  • Переопределяемые свойства
  • Свойства
  • Переопределяемые методы
  • Методы
  • Переопределяемые обработчики событий
  • Обработчики событий
  • Вспомогательные классы, не входящие в пакет

Блок Copyright

Вставляйте в каждый .as-файл фреймворка блок copyright. Текст open-source copyright '2008 можно посмотреть здесь: Блок Copyright. Ширина блока - 80 символов.

Метаданные класса

Группируйте метаданные в разделы, в следующем порядке:

  • Events
  • Styles
  • Effects
  • Excluded APIs
  • Other Metadata

Вставляйте малый разделитель перед каждым разделом. (О большом и малом разделителях будет написано в следующей главе "Форматирование").

В каждом разделе располагайте метаданные в алфавитном порядке по имени name="...", а в разделе Other Metadata - по имени тега.

Код примера можно посмотреть здесь: Организация метаданных класса.

Подключение файла Version.as

В каждый класс необходимо подключать файл Version.as, содержащий объявление константы с номером версии static const VERSION:String:
include "../core/Version.as";

Список констант класса

Здесь объявляются статические константы static const.
ActionScript 3 не позволяет объявлять константы типов Array и Object. Такие константы необходимо объявлять как static var, но помещать в этот раздел, поскольку по своей сути они являются константами.

Список "mix-ins"

Здесь объявляются любые статические переменные типа Function, которые принимают ссылки на методы, но не объявляются в качестве методов. (Понятие mix-in я раскрыл так, как смог понять - возможно я ошибаюсь).

Свойства класса (static)

Здесь объявляются статические установщики и получатели (getter/setter) класса. Располагайте их в алфавитном порядке по имени свойства. Для каждого, используйте подзаголовок с именем свойства. Объявляйте сначала получатель, затем установщик.

Методы класса (static)

Здесь размещаются статические функции static function.

Переопределяемые свойства

Здесь объявляются переопределяемые нестатические установщики и получатели (getter/setter) класса. Располагайте их в алфавитном порядке по имени свойства. Для каждого, используйте подзаголовок с именем свойства. Объявляйте сначала получатель, затем установщик.

Свойства

Здесь объявляются новые нестатические установщики и получатели (getter/setter) класса. Располагайте их в алфавитном порядке по имени свойства. Для каждого, используйте подзаголовок с именем свойства. Объявляйте сначала получатель, затем установщик.

Переопределяемые методы

Здесь размещаются переопределяемые нестатические функции.

Методы

Здесь размещаются новые нестатические функции.

Переопределяемые обработчики событий

Здесь размещаются переопределяемые обработчики событий.

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

Здесь размещаются новые обработчики событий.

Комментарий

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

  • Подключение файла Version.as
  • Список объявлений implements
  • Инициализация класса extends

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

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

На основании этой статьи уже можно создавать шаблон класса для FlashDevelop, но лучше - после следующей главы "Форматирование": Formatting.



2008-05-28

18:15:40, Flash-ripper.com
Top4Top.ru — разбор полетов состоится 31 мая 2008 г. на RAFPUG-6

Разработчики проекта Top4Top расскажут о его структуре, о клиент-серверном решении и о самом Flash-клиенте, которому посвящена большая часть доклада. Будут приведены причины, по которым был выбран чистый AS3 (а не Flex), та также будут затронуты возникшие в ходе разработки проблемы и описано их решение.

Помимо этого, Артемий Малков расскажет о Flash Player 10 — об Open Screen Project, File Reference, мощной работе с текстом, UDP, 3D-эффектах, шейдерах, Drawing API, видео, звуке и улучшенном буфере обмена.

Это произойдет на 6 встрече Russian Adobe Flash Platform User Group, которая состоится 31 мая 2008 года в 12:00 в офисе Adobe в Москве (м.Павелецкая, ул.Садовническая, д. 82 строение 2, "Аврора Бизнес Парк", 2 этаж, конференц-зал "Торонто"). Внимание — регистрация на RAFPUG-6 обязательна (по причине прохождения участников встречи в охраняемое помещение). Интересно будет!


13:14:57, Flash-ripper.com
Флексеры настолько суровы, что пишут код

Илья Панин написал о достоинствах и недостатках различных IDE для создания приложений под Flash Platform (это же — его презентация на UAFPUG-2; Илья — спасибо, что опубликовал!)

Соглашусь с выводами автора (в скобках указаны оценки от Google, который тоже согласен):

Илья также приводит сводную таблицу по более чем 25 показателям для каждого из рассматриваемых редакторов — отличная работа!


2008-05-27

20:10:27, Garbage Collector
EarthBrowser — 3D AIR приложение

EarthBrowserScreencast Это будет очень короткая заметка. Думаю, вы сами сможете установить и разобраться что к чему: аналог Google Earth на AIR.

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


16:10:05, Flash-ripper.com
2 (два) Flex / AIR программиста ищут работу

Сенсация — cрочно в номер: два опытных Flex / AIR разработчика ищут работу. Компании, фирмы, конторы и студии — срочно обращайте внимание, пока рыба не уплыла! Это сокровище обнаружено в почтовой группе ruFlexJobs:

Привет! Нас зовут Александр (31 год) и Андрей(25 лет). Мы программисты из Самары.

Нас интересует работа сроком не более чем на 1 год.

Специализируемся на создании Flex/AIR приложений. Больше всего у нас опыта в разработке бизнес-приложений.

Больше всего любим и умеем "скрещивать" Flex/AIR с Java/Python/Ruby. Также у нас хорошо получается делать комбинированные Flex/Ajax приложения.

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

И совсем не нравится придумывать стили и дизайн приложений, но всё это мы с удовольствием сделаем в лучшем виде (у нас есть хорошие дизайнеры), если Вы закажите у нас проект "под ключ" — в этом случае мы делаем всю работу от составления т.з. до запуска, тестирования и раскрутки проекта.

Больше всего мы боимся Flash-а, и поэтому на нём ничего не делаем - только AS3/Flex/AIR/Ajax.

Оба в прошлом админы, поэтому умеем "с нуля" поднимать проекты любой сложности на windows/linux/bsd-системах. В том числе крупные проекты, размещённые на нескольких серверах — есть практический опыт.

Далее (под катом) — еще пара деталей и почта для связи:


14:34:00, Flex 2 & Co
Новые методы и свойства старых классов FP10
ByteArray
clear()
deflate()
inflate ()

Mouse
cursor

ContextMenu
clipboardMenu
clipboardItems
link

Capabilities
hasColorCorrection

ApplicationDomain
domainMemory
MIN_DOMAIN_MEMORY_LENGTH

NetStream
farID
farNonce
info
nearNonce
peerStreams
onPeerConnect()
play2()
DIRECT_CONNECTIONS

NetConnection
farID
farNonce
maxPeerConnections
nearID
nearNonce
protocol
unconnectedPeerStreams

FileReference
data
load()
save()

Sound
extract()
sampleData

Microphone
codec
encodeQuality
framesPerPacket

Event
CLEAR
COPY
CUT
PASTE
SAMPLE_DATA
SELECT_ALL

Stage
enableColorCorrection

MovieClip
currentFrameLabel

Graphics
beginShaderFill ()

DisplayObject
blendShader
rotationX
rotationY
rotationZ
z
globalToLocal3D ()
local3DToGlobal ()

BitmapData
histogram()

BlendMode
SHADER

14:34:00, Flex 2 & Co
Новые методы и свойства старых классов FP10
ByteArray
clear()
deflate()
inflate ()

Mouse
cursor

ContextMenu
clipboardMenu
clipboardItems
link

Capabilities
hasColorCorrection

ApplicationDomain
domainMemory
MIN_DOMAIN_MEMORY_LENGTH

NetStream
farID
farNonce
info
nearNonce
peerStreams
onPeerConnect()
play2()
DIRECT_CONNECTIONS

NetConnection
farID
farNonce
maxPeerConnections
nearID
nearNonce
protocol
unconnectedPeerStreams

FileReference
data
load()
save()

Sound
extract()
sampleData

Microphone
codec
encodeQuality
framesPerPacket

Event
CLEAR
COPY
CUT
PASTE
SAMPLE_DATA
SELECT_ALL

Stage
enableColorCorrection

MovieClip
currentFrameLabel

Graphics
beginShaderFill()
drawGraphicsData()
drawPath()
drawTriangles()
lineBitmapStyle()
lineShaderStyle()

DisplayObject
blendShader
rotationX
rotationY
rotationZ
z
globalToLocal3D ()
local3DToGlobal ()

BitmapData
histogram()

BlendMode
SHADER

10:57:30, DimZ
Я.ру

Теперь у меня есть персональная страница на Я.ру — midimz!

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


2008-05-26

22:35:07, Flash-ripper.com
flash.trace.Trace - интересная находка Эльдара Прилуцкого

Pirrest нарыл кое-что весьма интересное — flash.trace.Trace. Перевожу первый абзац:

Да, есть такой класс, очень неприметный, но может быть очень полезным :) Он делает удивительную вещь. После “запуска” выдает в output имена ВСЕХ! методов, которые сейчас выполняются, с именами классов, которым принадлежат эти методы. Класc не документирован, то есть как с ним работать не знаю (google тоже ничего не говорит), но методом проб и ошибок кое-что все же понял.

И дальше — набор волшебных методов. (Теперь я вспомнил, что у блога Эльдара есть русскоязычная версия :)


21:15:51, Flash-ripper.com
В ожидании Dreamweaver CS4

Увидев у Инжуна пост о скором выходе Dreamweaver CS4, Fireworks CS4 и SoundBooth CS4, я сходил проверить, как там он, вышел али нет на Adobe Labs. Оказывается, таки еще нет. Но времени осталось совсем немного — а нишевый домен dreamweavercs4.com свободен (если я правильно понял смысл первой ссылки в результатах поиска — может быть, все наоборот?)

Как бы там ни было — DWCS4 будет для меня сюрпризом. Мне сложно представить, что еще можно добавить к инструменту, столь близкому к совершенству. Хотя... на самом деле, добавить есть что. Например, те же инструменты для правильной поисковой оптимизации. Или тулы для Wordpress. Ага, или конструктор мета-сетей. Но до чего на самом деле додумалась Adobe? Увидим :)


2008-05-23

18:01:56, Flash-ripper.com
Есть работа: AS3. Москва. ВДНХ. Офис. На постоянку. $2-6K/мес.

Пишет флэш-разработчик Иван Дембицкий: Я стартую новый интересный коммерческий проект в качестве автора и исполнительного продюсера. Инвестор — одна из крупнейших компаний России. Подробности — под катом:


12:22:53, Flash-ripper.com
Третья ежегодная церемония награждения «Russian Flash Awards 2008»

Russian Flash Awards 2008

Официальный пресс-релиз премии Russian Flash Awards 2008
Эта премия является одним из знаковых событий в мире информационных технологий и искусства. Среди работ будут представлены лучшие российские и зарубежные flash-проекты в девяти номинациях: Art, Коммерция, AIR/Flex, Игра, Анимация, Мультипликация, Техническая заслуга, Видео, 3D.

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

На Премии «Russian Flash Awards 2008» Вы увидите самые лучшие flash-разработки, а также получите DVD-диски с полным спектром работ победителей и лауреатов конкурса. Тонизирующая обстановка позволит вам насладиться вечером, а призы и подарки от организаторов и спонсоров оставят приятные воспоминания о мероприятии.

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

Церемония награждения пройдет 10 июня 2008 года в клубе «Меццо Форте» (Москва, 1-я Останкинская ул., д. 53, метро "ВДНХ"). Заявка на участие в Церемонии награждения до 1 июня дает возможность приобрести билет с 50 % скидкой (4 тыс. рублей включая НДС).

Подробную информацию Вы можете найти на сайте www.flashawards.ru, а также запросить у Екатерины Воробьевой по телефону: 629-77-68, 629-30-00, +7 (909) 622-92-22, pr@flashawards.ru.


11:02:26, DimZ
Как сделать Gif заглушку

Gif заглушки
Для того что бы вашу рекламу увидели люди у которых не установлен Flash Player, делаетс gif загшулка. Это обычно баннер такого же размера и объема, что и основной флеш баннер.
Есть два способа сделать заглушку.

(more…)


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

Продолжаем обозревать статью Flex SDK coding conventions and best practices.

Следующий подраздел: Language Usage.

Использование языка программирования

Здесь будут рассмотрены вопросы использования языковых конструкций ActionScript 3. Особое внимание мы уделим ситуацям, когда для выражения одной идеи существует несколько способов.

Параметры компиляции

Компилируйте проекты с параметрами -strict и -show-actionscript-warnings (они заданы по умолчанию в файле flex-config.xml).

API, базирующиеся на свойствах

Старайтесь применять API, которые базируются на свойствах а не на методах. Такой способ наиболее подходит для декларативного стиля программирования MXML.

Объявление типа

Указывайте типы для каждой константы, каждой переменной, каждого аргумента функции и ее результата. Даже если они не имеют типа, указывайте ":*":

Например:
можно: var value:*;
нельзя: var value;

Используйте наиболее подходящий для конкретной ситуации тип. Например, переменную цикла "for" лучше объявлять типом int а не Number, и, конечно, не Object или *. Другой пример: в mouseDownHandler необходимо объявить аргумент в виде event:MouseEvent, но не event:Event.

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

Используйте тип * только в случае, если значение переменной может быть undefined. Но лучше всегда использовать вместо * тип Object, значение которого равно null, в случае, если объект не существует.

Если вы объявляете переменную типа Array, добавляйте комментарий /* of Тип */ непосредственно после слова Array, указывая тип элементов массива. Это важно, так как в будущих версиях ActionScript появятся типизированные массивы. (Интересно, такой синтаксис будет учитываться непосредственно компилятором, или это совет с расчетом на последующий рефакторинг кода?)


Например:
можно: var a:Array /* of String */ = [];
нельзя: var a:Array = [];
можно: function f(a:Array /* of Number */):Array /* of Object */ {...}
нельзя: function f(a:Array):Array


Литералы

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

int и uint
Никогда не используйте точку дроби в целочисленных значениях:
можно: 2
нельзя: 2.

В шестнадцатиричных числах всегда используйте "x" в нижнем регистре:
можно: 0xFEDCBA
нельзя: 0XFEDCBA

Всегда указывайте RGB-цвета в виде шестизначного шестнадцатиричного числа:
можно: private const BLACK:uint = 0x000000;
нельзя: private const BLACK:uint = 0;

При работе с индексами (например указатель на элемент в массиве), всегда используйте "-1" для обозначения отсутствия индекса.


Number
Если предполагается, что значение переменной будет дробным (обычный случай), инициировать его нужно с использованием точки дроби, после которой ставится дробная часть, либо, при ее отсутствии, нуль:
можно: alphaFrom = 0.0; alphaTo = 1.0;
нельзя: alphaFrom = 0; alphaTo = 1;

Но исключение для этого правила составляют пиксельные координаты, которые условно целые, хотя, в принципе, могут быть и дробными:
можно: var xOffset:Number = 3;
нельзя: var xOffset:Number = 3.0;

При использовании знака экспоненты, применяйте "e" в нижнем регистре:
можно: 1.0e12
нельзя: 1.0E12

Для Number используйте значение по умолчанию NaN - "не установлено".


String
Для обозначения строк всегда используйте двойные кавычки, даже если внутри строки присутствует символ кавычки:
можно: "What's up, \"Big Boy\"?"
нельзя: 'What\'s up, "Big Boy"?'

При использовании escape-последовательностей, спецсимвол "\u" указывайте в нижнем регистре:
можно: \u
нельзя: \U


Array
Используйте вместо new Array() литералы массива:
можно: [], [ 1, 2, 3 ]
нельзя: new Array(), new Array(1, 2, 3)

Используйте конструктор массива Array() только для определения массива заданного размера. Это важно, т.к. new Array(3) создает не [ 3 ], а [ undefined, undefined, undefined ].


Object
Используйте вместо new Object() литералы объекта:
можно: {}
нельзя: new Object(),

можно: {}, o = { a: 1, b: 2, c: 3 };
нельзя:
o = new Object();
o.a = 1;
o.b = 2;
o.c = 3;
или
o = {};
o.a = 1;
o.b = 2;
o.c = 3;



Function
Избегайте использования литералов функции для определения анонимных функций. Вместо этого, используйте методы класса или функции пакета.

При использовании литерала функции, обязательно указывайте возвращаемый тип, а последний оператор в теле функции заканчивайте символом точки с запятой ";":
можно: function(i:int):void { doIt(i - 1); doIt(i + 1); }
нельзя: function(i:int) { doIt(i - 1); doIt(i + 1) }


RegExp

Для определения регулярного выражения используйте представление в виде последовательности литералов, а не инстанцирование объекта RegExp с параметром String:
можно: var pattern:RegExp = /\d+/g;
нельзя: var pattern:RegExp = new RegExp("\\d+", "g");


XML и XMLList
Используйте представление в виде последовательности литералов, а не инстанцирование объекта XML с параметром String:
можно: var node:XML = <name first="Jane" last="Doe"/>;
нельзя: var node:XML = new XML("<name first=\"Jane\" last=\"Doe\"/>");

Используйте только двойные кавычки для определения значений аттрибутов тегов XML:
можно: var node:XML = <name first="Jane" last="Doe"/>;
нельзя: var node:XML = <name first='Jane' last='Doe'/>;


Class
Используйте полное имя класса (включающее имена пакетов) только в том случае, когда импортируется два класса с одним и тем же именем (но из разных пакетов), и необходимо разрешить конфликт имен:
можно:
import mx.controls.Button;
...
var b:Button = new Button();

нельзя:
import mx.controls.Button;
...
var b:Button = new mx.controls.Button();

Но в этом случае можно:
import mx.controls.Button;
import my.controls.Button;
...
var b:Button = new mx.controls.Button();



Выражения

Круглые скобки
При работе с операторами +, -, *, /, &&, , <, <=, >, >=, ==, и !=, не используйте круглые скобки там, где в этом нет необходимости:
можно: var e:Number = a * b / (c + d); var e:Boolean = a && b c == d;
нельзя: var e:Number = (a * b) / (c + d); var e:Boolean = ((a && b) (c == d));

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


Приведение типов
Не сравнивайте переменную типа Boolean с "true" или "false". Она уже является первым или вторым.
можно: if (flag)
нельзя: if (flag == true)
можно: var flag:Boolean = a && b;
нельзя: var flag:Boolean = (a && b) != false;

Явно приводите к типу Boolean переменные типа int, uint, Number или String:
можно: if (n != 0)
нельзя: if (n)
можно: if (s != null && s != "")
нельзя: if (s)

Переменные типа Object можно приводить к типу Boolean неявно:
можно: if (child)
нельзя: if (child != null)
можно: if (!child)
нельзя: if (child == null)

Лучше использовать приведение к типу (кастинг), чем оператор "as". Оператор "as" используйте только в том случае, если при ошибке приведения к типу, вы хотите получить в результате значение "null", а не генерацию исключения:
можно: IUIComponent(child).document
нельзя: (child as IUIComponent).document


Сравнение
Старайтесь расставлять сравниваемые значения в естественном для прочтения порядке (более удобном для прочтения порядке):
можно: if (n == 3) // "Если n равно 3"
нельзя: if (3 == n) // "Если 3 равно n"


Операторы ++ и --
Если в какой-либо ситуации префиксная и постфиксная формы (оператор ставится до или после переменной) логически равнозначны, используйте постфиксную форму. Используйте префиксную форму только в том случае, когда требуется получить значение переменной до ее изменения.
можно: for (var i:int = 0; i < n; i++)
нельзя: for (var i:int = 0; i < n; ++i)


Тернарный оператор

Ипользуйте вместо if/else тернарный оператор в случае простых операций проверки, особенно, для проверок значений на null:
можно: return item ? item.label : null;
нельзя:
if (!item) return null;
return item.label;

Однако, нельзя использовать вложенные тернарные операторы в сложных логических цепочках:
можно: if (a < b)
return -1;
else if (a > b)
return 1;
return 0;
нельзя:
return a < b ? -1 : (a > b ? 1 : 0);


Оператор new
Всегда используйте круглые скобки после имени класса, даже если конструктор не требует аргументов:
можно: var b:Button = new Button();
нельзя: var b:Button = new Button;

Операторы

Всегда ставьте после операторов точку с запятой ";". ActionScript 3 не считает за ошибку отсутствие точки с запятой в конце оператора, но лучше не пользоваться этой особенностью:
можно:
a = 1;
b = 2;
c = 3;
нельзя:
a = 1
b = 2
c = 3


Директива include
Используйте include вместо #include. В конце ставьте точку с запятой, как и для других операторов:
можно: include "../core/ComponentVersion.as";
нельзя: #include "../core/ComponentVersion.as"

Всегда используйте относительные пути вместо абсолютных.


Директива import
Указывайте только те классы, интерфейсы и пакетные функции, которые используйте. Не используйте спецсимвол "*":
можно:
import mx.controls.Button;
import flash.utils.getTimer;
нельзя: import mx.core.*;


Директива use namespace
Избегайте ее использования. Вместо этого, используйте синтаксис "::" для каждого определения вне основного пространства имен:
можно:
import mx.core.mx_internal;
// Позже, в каком-либо методе...
mx_internal::doSomething();
нельзя:
import mx.core.mx_internal;
use namespace mx_internal;
// Позже, в каком-либо методе...
doSomething();


Оператор if
Если ветви оператора if/else не содержат более одного оператора, не заключайте эти операторы в блок фигурными скобками.
можно: if (flag) doThing1();
нельзя: if (flag) { doThing1(); }
можно:
if (flag)
doThing1();
else
doThing2():
нельзя:
if (flag)
{
doThing1();
}
else
{
doThing2();
}

Однако, если одна из ветвей содержит более одного оператора, заключайте в блоки все ветви:
можно:
if (flag)
{
doThing1();
}
else
{
doThing2();
doThing3();
}
нельзя:
if (flag)
doThing1();
else
{
doThing2();
doThing3();
}

Если требуется проверка большого количества ошибок, используйте последовательность операторов if, которые осуществляют проверку и при ошибке, сразу возвращают результат и выходят из метода. При этом, поток выполнения проверки движется по странице вниз. В конце метода ставится возврат результата успешного прохождения проверки.
Не используйте вложенные тесты, при которых поток выполнения смещается поперек страницы:
можно:
if (!condition1)
return false;
...
if (!condition2)
return false;
...
if (!condition2)
return false;
...
return true;
нельзя:
if (condition1)
{
...
if (condition2)
{
...
if (condition3)
{
...
return true;
}
}
}
return false;


Оператор for
Всегда заключайте тело цикла в болк фигурными скобками, даже если оно состоит только из одного оператора.
можно:
for (var i:int = 0; i < 3; i++)
{
doSomething(i);
}
нельзя:
for (var i:int = 0; i < 3; i++)
doSomething(i);

Используйте для хранения верхнего предела цикла локальную переменную. Это очень важно, поскольку верхний предел пересчитывается на каждой итерации цикла. Конечно, это не распространяется на те случаи, когда пересчет предела цикла необходим:
можно:
var n:int = a.length;
for (var i:int = 0; i < n; i++)
{
...
}
нельзя:
for (var i:int = 0; i < a.length; i++)
{
...
}

Определяйте переменную цикла внутри круглых скобок оператора цикла, если она не определяется где-либо повторно:
можно: for (var i:int = 0; i < 3; i++)
нельзя:
var i:int;
for (i = 0; i < 3; i++)
{
...
}


Оператор while

Всегда заключайте тело цикла в болк фигурными скобками, даже если оно состоит только из одного оператора:
можно:
while (i < n)
{
doSomething(i);
}
нельзя:
while (i < n)
doSomething(i);


Оператор do
Всегда заключайте тело цикла в болк фигурными скобками, даже если оно состоит только из одного оператора:
можно:
do
{
doSomething(i);
}
while (i < n);
нельзя:
do
doSomething(i);
while (i < n);


Оператор switch

Заключайте тело каждого выражения case и default в болк фигурными скобками. Операторы break или return ставьте внутрь блока, а не после него. Если вы используете в блоке return, не ставьте после него break. Вариант default обрабатывайте так же как и case, вызов break из него так же обязателен:
можно:
switch (n)
{ case 0:
{ foo();
break;
}
case 1:
{
bar();
return;
}
case 2:
{
baz();
return;
}
default:
{
blech();
break;
}
}
нельзя:
switch (n) {
case 0:
foo();
break;
case 1:
{
bar();
}
break;
case 2:
baz();
return;
break;
default:
blech();
}


Оператор return

Не заключайте возвращаемое значение в круглые скобки:
можно: return n + 1;
нельзя: return (n + 1);

Вызов оператора return разрешается из любого места тела метода.

Объявления

Никогда не объединяйте несколько констант/переменных в одно объявление:
можно: var a:int = 1; var b:int = 2;
нельзя: var a:int = 1, b:int = 2;


Ключевое слово override
Там, где override необходимо, указывайте его до объявления спецификатора доступа:
можно: override protected method measure():void
нельзя: protected override method measure():void


Спецификаторы доступа

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

Перед тем, как объявить какой-либо API как public или protected, как следует подумайте, действительно ли это нужно. Public и protected API нужно документировать в обязательном порядке. Кроме того, они должны поддерживаться в нескольких последующих релизах, прежде чем станут формально устаревшими.


Ключевое слово static
Там, где static необходимо, указывайте его после объявления спецификатора доступа:
можно: public static const MOVE:String = "move";
нельзя: static public const MOVE:String = "move";


Ключевое слово final

Там, где final необходимо, указывайте его после объявления спецификатора доступа:
можно: public final class BoxDirection
нельзя: final public class BoxDirection

Объявляйте все классы-каталоги ("enum classes") как final.
Также, объявляйте "базовые" свойства и методы (те, что начинаются с $) как final.


Константы

Все константы должны объявляться как static. Нет необходимости объявлять в классе динамические константы, поскольку всё равно все объекты этого класса будут хранить одни и те же значения:
можно: public static const ALL:String = "all";
нельзя: public const ALL:String = "all";


Переменные

Если переменную необходимо инициализировать каким-либо значением, делайте это сразу при объявлении переменной, а не в конструкторе:
можно: private var counter:int = 1;
нельзя:
private var counter:int;
...
public function MyClass()
{
super();
...
counter = 1;
}


Локальные переменные

Объявляйте переменны непосредственно при их применении, или перед их первым использованием. Не объявляйте все переменные в начале функции:
можно:
private function f(i:int, j:int):int
{
var a:int = g(i - 1) + g(i + 1);
var b:int = g(a - 1) + g(a + 1);
var c:int = g(b - 1) + g(b + 1);
return (a * b * c) / (a + b + c);
}
нельзя:
private function f(i:int, j:int):int
{
var a:int;
var b:int;
var c:int;
a = g(i - 1) + g(i + 1);
b = g(a - 1) + g(a + 1);
c = g(b - 1) + g(b + 1);
return (a * b * c) / (a + b + c);
}

Объявляйте локальные переменные в функции только один раз. ActionScript 3 не поддерживает объявление локальных переменных с областью видимости в одном блоке:
можно:
var a:int;
if (flag)
{
a = 1;
...
}
else
{
a = 2;
...
}
нельзя:
if (flag)
{
var a:int = 1;
...
}
else
{
var a:int = 2;
...
}
можно:
var i:int;
for (i = 0; i < n; i++)
{
...
}
for (i = 0; i < n; i++)
{
...
}
нельзя:
for (var i:int = 0; i < n; i++)
{
...
}
for (var i:int = 0; i < n; i++)
{
...
}


Классы
Если класс наследуется от Object, не нужно указывать extends Object.

The only “bare statements” in a class should be calls to static class initialization methods, such as loadResources(). (Совсем ничего не понял в этой фразе).


Конструкторы
Если класс имеет какие-либо свойства или методы, необходимо написать конструктор. Обязательно вызывайте super(), даже если кроме него больше ничего нет.

Если в конструктор передаются аргументы, давайте им имена переменных, которым они передаются.
можно:
public function MyClass(foo:int, bar:int) {
this.foo = foo;
this.bar = bar;
}
нельзя:
public function MyClass(fooVal:int, barVal:int) {
foo = fooVal;
bar = barVal;
}

Не инициализируйте переменные класса в конструкторе. Делайте это при объявлении переменных. Это разрешается только в том случае, когда в наследуемых классах требуется переустановить значения переменных.

Послесловие

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

  • Interfaces
  • Namespaces
  • Implementing properties
  • Metadata
  • Packages
  • Helper classes
  • Bare statements

Будем иногда заглядывать СЮДА и следить за продолжением.

Правила, конечно, порой спорные.
Например, инициализация переменных при их объявлении допустима только при работе с простыми значениями. Например, инициализировав какую-либо переменную объектом {prop:1}, мы получим во всех объектах этого класса ссылку на один и тот же объект, но не клоны отого объекта.

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

Остальное, в принципе, вполне законно и приемлемо.
В следующий раз поговорим об организации файлов: File Organization.


10:28:37, Flash-ripper.com
Flash.digy.net — мы уже держим голову :)

Молодой (всего три месяца от роду), но правильно стартовавший ресурс с уроками по Flash, переводными статьями типа "Модульное тестирование с помощью FlexUnit", заметками о юзабилити, материалами о Flash Remoting (включая статью "Передача ValueObject’ов из FluorineFx во Flash CS3" — все лаконично и четко.

Кстати, у нас вроде бы не было статьи, кратко объясняющей главное о Flash Remoting на русском неподготовленному человеку? Теперь есть эта — как вариант.


06:39:49, DimZ
Ресайз flash баннера.

Ресайз – изменение размера баннера, при этом смысловая нагрузка, которую несет в себе баннер остается не изменой.

Возьмем за пример мой баннер который делался тут.
1.jpg

(more…)


2008-05-22

21:44:18, Flash-ripper.com
Финны жгут: первый параллельный текстовый редактор для совместной работы

В 2008 году финны покоряют флэш-платформу. Сначала, как заметил JabbyPanda, финский флэш-сайт как бы про лесную жизнь в исполнении студии Valve взял приз на 2008 Webby Awards (в комментариях Алексей замечает, что его сайт не впечатлил. Меня тоже, пока я не вспомнил, что этот сайт победил в категории "Корпоративные коммуникации" — это флэш-послание).

А сейчас другие финны стартуют параллельный онлайн-редактор textflow, который и драг-н-дроп поддерживает, и совместим со всеми мыслимыми форматами, и в системных требованиях у него только Flash Player 9. Один документ в нем редактируют несколько пользователей одновременно. Это как бы чат, но это не чат, а серьезный док во время редактирования.

Таковы суровые финские флэшеры, а в чате FPUG сказано уже 4МБ слов, смайлов и ссылок.


17:03:57, Flash-ripper.com
ОГО!START — психбольница в руках админов и галоперидол как орудие модераторов там, где хватило бы одного умного менеджера

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

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

Недавно "Укртелеком" усовершенствовал предлагаемую ими услугу высокоскоростного ADSL-доступа к интернету "ОГО!START". Во-первых, теперь для подключения к сети не обязательно подписывать договор с "Укртелекомом", а можно просто пойти в магазин, купить там карточку "Быстрый старт" и подключиться самостоятельно; во-вторых, упала стоимость услуги: теперь всего за 120 гривень (т.е. ~$25) можно подключиться к сети со скоростью 512 Кбит/с. Это выгодное со всех сторон предложение пользуется высокой популярностью. Но есть ложка дегтя, из-за которой не все могут получить удовольствие от данной услуги, а некоторые могут даже получить нравоучение от "Укртелекомовца".

На специальном сайте "Мой Укртелеком" есть раздел об услуге ОГО!START, и страница для самостоятельной проверки технической возможности подключения к сети — достаточно ввести номер своего квартирного телефона в форму проверки. Это очень удобно, так как позволяет избежать лишних действий в том случае, если подключение невозможно.


10:28:00, Flex 2 & Co
Открыт Google Maps API для Flash
Google наконец-то открыл API к своим картам. Igor Costa накатал небольшой примерчик на эту тему. И еще один пример.

10:28:00, Flex 2 & Co
Открыт Google Maps API для Flash
Google наконец-то открыл API к своим картам. Igor Costa накатал небольшой примерчик на эту тему. И еще один пример.

06:40:20, DimZ
Рецепт создания Flash-баннера.

Рецепт создания Flash-баннера.
Для создания баннера, понадобится: Flash, PhotoShop, Хотя какая-нибудь идея. Желательно лого компании и тексты для этого баннера. А также вам понадобятся тех. требования площадок на которых будет размещаться ваш баннер.

banner1.jpg

(more…)


2008-05-21

23:24:21, 33 коровы
UAFPUG#2, Мой доклад.

Призенташка (в плане информативности не особо полезная, но полистать можно)

Презентация не содержит всехпунктов по которым я сравнивал IDE, но у меня есть маленька табличка которая содежит список фич и плюшек, и как их поддерживает та или иная ИДЕ.

Таблица сравнения

Из всего доклада я хочу осветить предпоследний слайд, он содержит кратенькие выводы
  • FlexBuilder — выбор пролетариата
  • FlashDevelop — малыш
  • IDEA — сырой монстр
  • FDT — дорого, местами со вкусом

пояснения про FlexBuilder и FDT я уже дал,

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

добавлю лишь, что FlexBuilder медленно и верно движется в правильном направлении и у него есть все шансы!

FlashDevelop — малыш, его я так назвал потому, что он фактичеки не является средой разработки — это продвинутый блокнот с кучей удобных и полезных фич. Если делать маленький проект и одному, то его можно использовать если что-то больше то комфортнее использовать FlexBuilder или FDT.

IDEA — сырой монстр. IDEA известна свои удобством среди ява(и не только) программистов. В данный момент в версии 7.0.3 поддержка flex разработки очень сырая, много мелких неприятных глюков, но разработчики IDEA их фиксят. Вобщем когда “доварят” нашего монстра, то будет видно. И еще меня волнует позиционировние самой разработки флекс проектов в IDEA — она позиционируются как дополнительная фича, т.е. существует вероятность, что поддержка флекса будет уходить на второй план по сравнению с явой(можете попробовать разубедить меня). И еще один кирпич в огород IDEA — сложноватенько, человек который придет из мира флеша будет долго въезжать во все ньансы этого “монстра”.

Всех благ вам и удачного кода влюбой из ИДЕ:)


21:49:47, Flash-ripper.com
Психбольница в руках программистов

Нарылось на Хабре под заголовком "Алан Купер. Теперь только самое лучшее". В записи — ссылки на полный текст книги и на, что самое важное, на ее сильно сокращенный вариант. Цитату из него приведу здесь же:

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

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

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

Dilbert for 26-Oct-2007

Идите на Хабр и дайте плюс в карму пользователю badlittleduck — это его рук дело.


17:36:23, Flash-ripper.com
Астронавты! Космос и Flash Player 10 Debug — у ваших ног

Официальная API-документация к Flash Player 10 — одним большим архивом! И масса новых полезных статей:

Асторономические объемы этого нового и полезного материала сравнимы только со свежеобнаруженной половиной скрытой массы Вселенной.

// имхормация получена от тайных осведомителей из чата FPUG


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