Показаны сообщения с ярлыком Flex. Показать все сообщения
Показаны сообщения с ярлыком Flex. Показать все сообщения

четверг, 6 августа 2009 г.

Flex-builder под Linux

Расскажу о своих впечатлениях от установки Flex-builder'a под Debian'ом.

Когда я нашёл флекс-билдер под линукс, то очень обрадовался, потому что появилась возможность перенести всю разработку проекта на Debian и не мучаться с запуском своего сайта на виндовсе. Итак слил, постучал в бубен, установил и начал тестить.

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

понедельник, 8 июня 2009 г.

Flex & xml

Был у меня раньше xml-документ, информацию из которого нужно было нужно было использовать в моём приложении. Необходимый функционал был написан, и спокойно работал, никому не мешая. Тут понадобилось добавить дополнительные функции обработки документа с новыми тегами. Например,


<doc>
<pg>
<ln>
<tag t="1" />
<tag t="2" />
<tag t="3" />
</ln>
</pg>
</doc>


Потребовалось ввести обработку нового тега

<doc>
<pg>
<mytag t="5" n="2" />
<ln>
<tag t="1" />
<tag t="2" />
<tag t="3" />
</ln>
</pg>
</doc>

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

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


// заменить теги count на соответствующие теги ln
for (var tagCount: int = 0; tagCount < xmlText.child("pg").length(); ++tagCount) {
if (xmlText.child("pg")[tagCount].child("count").length() == 0) {
continue; // ежели тут нет тега с обратным отсчётом, то идём к следующей итерации
}

var n: int = int(parseFloat(xmlText.child("pg")[tagCount].child("count")[0].@n));
var t: int = int(parseFloat(xmlText.child("pg")[tagCount].child("count")[0].@t));


var lnXml: String = "<ln>\n";

for (var i: int = 0; i < n; ++i) {
lnXml += '<tag t="' + (t + i).toString() + '" />\n';
}
lnXml += "</ln>\n";

xmlText.child("pg")[tagCount].replace("count", lnXml); // заменить старый тег новым
}

В результате получил такой документ

<doc>
<pg>
<ln>
<tag t="1" />
<tag t="2" />
<tag t="3" />
</ln>
<ln>
<tag t="5" />
<tag t="6" />
</ln>

</pg>
</doc>


Заодно научился заменять элементы в xml-документе на Flex'е.

пятница, 15 мая 2009 г.

Операторы условия во Flex'e и чудеса, связынные с ними

Что-то странное сегодня творилось с моим мозгом и последовательностью выполнения команд при внесении изменений в разработанное ранее приложение. Имеем очень простой код:

1 top_buttons.selectedIndex = 1;
2 if (top_buttons.selectedIndex == 1) {
3 Alert.show('Ура!');
4 } else {
5 Alert.show('Фигу тебе!');
6 }


Казалось бы ход выполнения ясен как 2+2=4, НО! я вижу вовсе не радостное Ура, а самую настоящую фигу. Что это такое - я не знаю. Что самое смешное во всём этом, что вот такой код:

1 private function test(): void {
2 top_buttons.selectedIndex = 1;
3 if (top_buttons.selectedIndex == 1) {
4 Alert.show('Ура!');
5 } else {
6 Alert.show('Фигу тебе!');
7 }
8 }
9
10 test(); // Фигу
11 test(); // Ура

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

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

понедельник, 20 апреля 2009 г.

Инициализация, сервер, Flex и все-все-все

Пишем программу на Flex'е для записи звука. Алгоритм запуска, загрузки и проверки данных примерно такой:

  1. Инициализация
    1. Повесить евенты на обработку ответа сервера на методы
    2. Выключить все кнопки
  2. Получить ответ
    1. Проверить ответ сервера
    2. Включить кнопки, если всё Ок


Пока работали с удалённым сервером всё было нормально, но недавно перенесли разработку на офисный сервер, и началось. Баг неумолимо вырубал кнопку записи звука и не хотел её включать. Ошибка была в порядке инициализации объектов. Сначала мы назначали метод обработки и делали запрос на сервер. Поскольку сервер рядом, то ответ приходит мгновенно, гораздо раньше, чем выключается кнопка при инициализации. Т.е. получаем вот что: получили ответ сервера, всё Ок - кнопку включить; далее идёт инициализация приложения - кнопку выключить.


Мораль на будущее - сначала инициализаця данных, а потом назначение обработчиков событий.

вторник, 3 февраля 2009 г.

Flex и WWW

Какое-то время назад пришлось применять Flex в одном из проектов. Уйма впечатлений:
  1. Впечатление первое - дрянь какая-то. Зачем оно мне нужно, если я и на Javascript могу сделать качественный пользовательский интерфейс, который, к тому же, будет сделан из соображений ненавязчивого программирования.
  2. Впечатление второе - ух-ты сколько тут уже готовых контролов и всяких полезных штук. Почему я раньше его не использовал в работе.
  3. Впечатление третье - как это масшабировать и вносить изменения?! Всё же дрянь.
  4. Впечатление четвёртое - польза есть, но применять его везде не стоит - простоты не будет.
Написав на флексе некоторое количество кода и сделав несколько частей проекта на его основе, определился со своим отношенем к этой технологии.

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

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

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