17 ноября 2008
Переход на другую среду разработки всегда идет не гладко. Все непривычно, все вызывает раздражение. А некоторые моменты просто бесят. Я только недавно начал работать с Flex, и меня в нем многое раздражает, а кое-что просто дико бесит, заставляя ругаться матом. Полагаю, этот переходный период закончится по мере привыкания и накопления опыта. Но пока хочется выплеснуть эмоции, почему я и пишу это. Итак, вот они, выплески ненависти:
UPD: Силами BAFPUG удалось прояснить некоторые моменты. А некоторые не удалось ...
У проекта должен быть основной класс приложения, который и компилируется. Их даже может быть несколько. Это не удивительно. Удивительно то, что этот класс не может быть внутри пакета. Я уже давно привык к тому, что классов вне пакета не бывает. Любой класс находится в пакете com.yourcompanydomain.projectname или глубже (обычно глубже). Пустой пакет -- плохой стиль программирования. Flex не дает мне сделать этого. Блин, мне нафиг не нужен класс MyCoolApp. Мне нужен класс com.yzh44yzh.myCoolProject.MyCoolApp и никак иначе. Flex вынужнает меня писать говнокод.
UPD: народ говорит, что с этим ничего не поделаешь. Но что-то мне помнится, как-то раньше, когда я возился с Flex, у меня получалось назначить главным классом приложения класс внутри пакета. Сейчас почему-то неполучается. Оставим вопрос открытым.
<mx:Button> <mx:label>Push Me</mx:label> </mx:Button>
Что вы можете скажать об этом коде? Я вот скажу, что это дублирование и информационный мусор. Каждый открытые тег нужно закрыть -- это в два раза больше букв, чем нужно.
import mx.controls.Button; var b:Button = new Button(); b.label = 'Push Me';Вот это понятно и лаконично. Для меня очевидно, чем лучше второй вариант -- меньше букв, легче и быстрее читается код. Для меня полная загадка, какие преимущества имеет первый вариант. Не вижу никаких.
Я не понимал раньше, не понимаю и теперь, нафиг нужен этот MXML. Почему не писать все тоже самое на ActionScript? Ну ладно. Они там хотят писать на MXML, пусть пишут. А я буду на ActionScript писать. А вот фиг там! Второй пример кода не компилируется.
1172: Definition mx.controls:Button could not be found.
Вероятно эти классы как-то можно подключить и как-то можно скомпилировать. Но сразу "из коробки" -- не работает. Да я и не буду с этим разбираться. До сих пор прекрасно обходился без пакета mx, и дальше обойдусь. У меня есть своя gui-библиотека, потрачу время, портирую ее на AS3 и будет мне счастье.
UPD: Это заявление предсказуемо вызвало споры. Я остался при своем мнении, но в чате были интересные мысли. Поэтому я частично публикую логи чата в конце статьи. Зато выяснилась ситуация с пакетом mx. Суть в том, что пакет можно импортировать в проекте типа Flex, но нельзя импортировать в проекте типа ActionScript (а я создавал именно такой проект). Правда Алексей Ventur Логинов говорит, что у него работает mx в ActionScript проекте, и класс внутри пакета можно задать, как главный класс приложения. И у него довольно старая версия Flex. Вероятно, это можно было делать в старой версии, но нельзя в новой.
К черту HTML-wrapper! Нафиг он включен по умолчанию? Кому нужен этот говнокод, пусть включает. Почему его нельзя отключить при создании проекта? Нужно создать проект, открыть его свойства, выключить wrapper, потом сделать project->clear, чтобы все говнофайлы удалились. Повторить в каждом новом проекте.
И кстати про swfobject. Говорят, что скоро Adobe будет использовать его как основное средство для внедрения swf-файла в html-код. Это можно было бы приветсвовать, если бы сам swfobject не скатился в сторону говнофункционала. Все было хорошо до выхода версии 2.0. А в версии 2.0 появилась такая хрень как Express Install. Он устанавливает флэш-плеер автоматически, не спрашивая пользователя. Разработчики вообще охренели, пользователей за быдло держат. Типа, мы лучше знаем, что у тебя должно быть установлено. А пользователю, может, нахрен не нужен флэш-плеер. Он, может, вообще не хочет его устанавливать. Это его право.
Хорошо еще, разработчики swfobject охренели не окончательно, и этот Express Install можно отключить, хотя по умолчанию он включен.
Уж не знаю, что это такое. У меня такая фича только в одном проекте проявляется, во всех остальных нормально работает. Жмешь F11 для отладки (или Ctrl-F11), и если в редакторе активен не основной класс приложения, а любой другой, то отладка не запускается. Выскакивает алерт This file can not be launched.. В итоге нужно всегда держать открытым основной класс приложения и переключаться на него перед запуском отладки.
Искал, чем этот проект отличается от всех прочих -- не нашел. Вроде бы все такое же и в настройках, и в структуре.
Эту фичу я готов простить, хоть и сильно мешает. Прогуглю и скорее всего разберусь, в чем там дело. В данном случае понятно, что это обычный баг в IDE, который у всех бывает. А вот все предыдущее, это не баги, это злонамеренный вред.
UPD: Удалил проект и создал заново -- помогло. Теперь проект компилируется при любом активном файле. Старое доброе шаманство до сих пор помогает.
UPD: теперь отрывки из обсуждения этой статьи в чате BAFPUG. Имена участников чата я на всякий случай скрою -- вдруг кто-нибудь обидится.
Zhloba Yuri говорит: кстати, юзающие Flex, может есть что сказать по поводу моих
разачарований в нем
Zhloba Yuri говорит: желательно конструктивно -- то есть, направлено на решение проблем
Zhloba Yuri говорит: за эмоции сории, писал ночью, после двух часов отчаянной борьбы с флексом
user2 говорит: <mx:Button>
<mx:label>Push Me</mx:label>
</mx:Button>
user2 говорит: тут буду спорить
user2 говорит: не сравнивай язык разметки с экшн скриптом
user2 говорит: мог написать <mx:Button label = "dfdfgg"/>
Zhloba Yuri говорит: не, суть не в том, плох MXML или хорош
Zhloba Yuri говорит: суть в том, что должен быть выбор, на чем строить GUI
user1 говорит: у тебя есть выбор
user1 говорит: у меня есть проект на flex гед только 1 файл MXML
user1 говорит: все остальное кодом
user1 говорит: GUI тоже
Zhloba Yuri говорит: ок, как создать mx.controls.Button без MXML, на AS ?
Zhloba Yuri говорит: я догадываюсь, что это возможно, но не понял, как
...
user2 говорит: Я не понимал раньше, не понимаю и теперь, нафиг нужен этот MXML.
Почему не писать все тоже самое на ActionScript? - а нахер нужен html,
давайте писать на явасктипте :)
Zhloba Yuri говорит: аналогия имеет право на существование
Zhloba Yuri говорит: при том условии, что mx все-таки можно использовать без MXML
user3 говорит: MXML – это классно, хотя и не всегда. позволяет написать
легкочитаймые резиновые вещи
user2 говорит: и лекгопросмартиваемые в билдере
user3 говорит: я пробовал писать резинки на AS и пришел XML
user3 говорит: иначе нечитабельно
Zhloba Yuri говорит: легкочитаемые, легкопросматриваемые -- зависит от программиста и IDE,
а не от языка. Это не есть уникальная особенность MXML
Zhloba Yuri говорит: резиновый дизайн тоже
...
Zhloba Yuri говорит: легкость использования, читаемость кода, экономия времени --
свойства GUI - библиотеки. Тоже не есть уникальное достоинство MXML
Zhloba Yuri говорит: просто другие GUI-библиотеки мало известны
Zhloba Yuri говорит: ладно, я не про то
Zhloba Yuri говорит: я про отсутствие выбора
Zhloba Yuri говорит: вот что плохо
user3 говорит: в смысле, где отсутствие выбора?
Zhloba Yuri говорит: поправьте, если я не прав, но тезис таков:
если я не хочу использовать MXML, то я не могу использвать mx. Мне нужна другая gui-библиотека
user3 говорит: попробую поправить
user2 говорит: ты во флеше хочешь использовать mx?
Zhloba Yuri говорит: я хочу во флексе использовать mx, но писать код не на MXML, а на AS
Zhloba Yuri говорит: var b:Button = new Button();
user2 говорит: спокойно можешь это делать
Zhloba Yuri говорит: дык я ж говорю -- импорт не проходит
user2 говорит: значит чета нетак сделал
user3 говорит: не понял зачем тебе флекс, если тебе не нужны не их компоненты не mxml
user3 говорит: ?
Zhloba Yuri говорит: Как IDE для программирования на AS3
user3 говорит: FDT!
Zhloba Yuri говорит: FDT3 мне не нравится еще больше
user2 говорит: а мне наоборот
Zhloba Yuri говорит: такой уж я привиредливый
Zhloba Yuri говорит: и, кстати, какая разница, FDT или Flex, если не подключаются импорты
user2 говорит: короче Юра , если ты там создал флеш проджект, то на импорт билдер будет ругаццо
user2 говорит: если флекс проджект, то не будет
user3 говорит: это вопрос настроек
Zhloba Yuri говорит: понял, создавать Flex проект с пустым главным MXML классом
user2 говорит: да
Zhloba Yuri говорит: и все остальное писать на AS
user2 говорит: да
Zhloba Yuri говорит: ок, вот это я и хотел узнать. Спасибо
...
user3 говорит: use FDT, это г. но лучше остального г.
Zhloba Yuri говорит: FDT по функционалу хорош, но тормозит, жрет много памяти, и парсер глючит
Zhloba Yuri говорит: постоянно подсвечивает левые errors
user3 говорит: а mxml не бойся, это обычные классы, их можно extand-ить если надо
user3 говорит: public class extends Button{
user2 говорит: угу
Zhloba Yuri говорит: не то, чтобы я боялся MXML, просто не люблю черных ящиков.
Flex все равно генерит AS из MXML, но не спрашивает меня, как
user3 говорит: public class MyAS extends MyMXML{
...
<MyAS/>
Zhloba Yuri говорит: это иррациональное недовольсто
Zhloba Yuri говорит: не более того
Zhloba Yuri говорит: Eclipse открыт, Flex -- черный ящик. Руки так и тянутся все поломать :)
...
user2 говорит: Юра только если ты сделаешь новый флекс проджект, то мин размер твоей
аппликухи будет 300 кб
user2 говорит: потому что туда всунется весь фреймворк и менеджерами
user2 говорит: помоему у флеша тоже есть класс симплБаттон
Zhloba Yuri говорит: да, это характерно для всех больших gui-библиотек
Zhloba Yuri говорит: наша библиотека тоже где-то на 300 к тянет
user1 говорит: MXML нужен в первую очередь для визуально билдинга GUI
Zhloba Yuri говорит: а, вот, первый серьезный аргумент
Zhloba Yuri говорит: хотя Delphi делает тоже самое, и обходится без языка разметки
user1 говорит: у каждого свои подходы
user1 говорит: в том же делфи генерятся файлы описания форм
Zhloba Yuri говорит: это да. Но преимущества подходов нужно доказывать и аргументировать
Zhloba Yuri говорит: как-то мне не встречалась подобная аргументация за MXML
Zhloba Yuri говорит: кажется, все просто принимают его как данность
Zhloba Yuri говорит: и даже не задумываются, а почему?
user1 говорит: MVC
user1 говорит: View это MXML
Zhloba Yuri говорит: это не аргумент, MVC возможен и без MXML
user1 говорит: это инструмент для упрощения разделения логики и GUI
user2 говорит: типа чтобы верстальщик тоже смог влезть в код
Zhloba Yuri говорит: ага, примерно так я и высказался в своей статье
"Программирование под флэш-платформу" еще в мае месяце
Zhloba Yuri говорит: да, это годится как агрумент -- облегчает переход на Flex
для html-верстальщиков, не программистов
user4 говорит: mxml удобен при расстановке элементов управления
user4 говорит: это больше для дизайнеров
Zhloba Yuri говорит: Рост, кстати, за MXML тогда сказал, что дескать,
сейчас везде есть тенденция к декларативному описанию интерфейсов
...
user1 говорит: я готов в конструктивному спору по flex :)
Zhloba Yuri говорит: ок, мои против изложены в статье на сайте. Давай свои за
user1 говорит: щас по пунктам пройдусь
user1 говорит: 1) основной MXML, это признаюсь ни как не поправить
user1 говорит: такой у них подход
user1 говорит: package {
import mx.containers.Canvas;
import mx.controls.Button;
public class MyCanvas extends Canvas {
public function MyCanvas() {
super();
var b:Button = new Button();
b.label = "button label"
addChild(b);
}
}
}
user1 говорит: это пункт 2
user1 говорит: про кнопку в коде
Zhloba Yuri говорит: да, это уже понятно
Zhloba Yuri говорит: я создавал AS3 проект, а нужно было Flex проект
...
user1 говорит: я скажу просто про плюсы flex тогда, с моей точки зрения
user1 говорит: 1) Фрейворк Flex позволяет создавать приложения, в которых требуются
"стандартные" контролы значительно быстрее
user1 говорит: то ест за нас уже придумали, при чем багов минимум
Zhloba Yuri говорит: это позволяет делать любая gui-библиотека
user2 говорит: БАГОВ МИНИМУМ
Zhloba Yuri говорит: ладно, принимается, все равно их никто не знает, других gui-библиотек
user2 говорит: но есть :)
user1 говорит: 2) Удобные Managers, PopUp, tooltips, cursors, dragAndDrop
user1 говорит: и еще куча
user1 говорит: 3) Мощная вещь DataBinding
user1 говорит: 4) возможность отделить визульное размещения контролов от основного кода
как пример, это разделение работы между 2-3 людьми
user1 говорит: Например, MXML позволяет в коде не хранить в коде такие вещи как <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="26"
verticalAlign="middle"
cornerRadius="5" borderStyle="solid" borderThickness="0"
backgroundColor="#000000" backgroundAlpha=".1"
paddingLeft="3" paddingRight="4"
includeInLayout="{visible}"
>
user1 говорит: что делает код самих классов чище и читабельнее
user1 говорит: 5) удобное скинование, CSS вам в руки
также динамическое скинование
user2 говорит: см эксампл Валера делает mxml компонент и отдает его потом Сергею на
скинование и Валентину на прикручивание логики
user1 говорит: ну по сути все сводится к 'flex-фрейворк' и MXML
...
Zhloba Yuri говорит: моя позиция не в том, что Flex это плохо (иначе бы я на нем не работал)
Zhloba Yuri говорит: а в том, что там есть некоторые вещи, которые сделаны плохо
Zhloba Yuri говорит: так вот, что касается вещей, которые сделаны плохо, то нужно
либо разобраться, как сделать лучше, либо выяснить, что на самом деле это не плохо,
а так и надо, либо смириться с их существованием
Zhloba Yuri говорит: касательно моей статьи, по п1 -- смириться, по п2 -- решение найдено
Zhloba Yuri говорит: п3 -- не обсуждался
Zhloba Yuri говорит: п4 -- не обсуждался