Tag Archive for 'Flex'

Макросы компилятора ActionScript

Честно скажу, сам не знал. Прочитал только сегодня тут.

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

function log( message:String ):void
{
 	CONFIG::Debug {
  		trace( message );
  	}
}

Который, если CONFIG::Debug == true, вкомпилит этот trace, в противном же случае нет.

Константы определяются следующим образом:

  • Flash. В File > Publish Settings, кнопка Settings. Добавить имя и значение в Config constants.
  • Flex Ant Task.
    <mxmlc ... >
        <define name="CONFIG::Debug" value="false"/>
    </mxmlc>
  • Flex-config.xml
    <compiler>
            <define>
                    <name>CONFIG::Debug</name>
                    <value>false</value>
            </define>
    </compiler>
  • mxmlc -define=CONFIG::Debug,false

Получается очень интересная штука. Дебаг и релиз версии лично у меня отличаются наличием всяких внешних вызовов дебагеров, например Alcon, которые совершенно не нужны в релизе. Проблема лишь в том, что мало кто эту фишку знает и, если отсутствуют объявления этих констант (мало ли, скопипастили код), то скомпилить становится нетривиально.

AIR и ORM

Когда я узнал, что данные в AIR приложениях можно хранить в локальной SQLite базе данных, с одной стороны я был рад, но с другой я подумал, что придется опять возиться с SQL и прочей фигней. Как бы было хорошо, подумал я, если бы было какое-нибудь ORM решение типа как в Ruby или как Hybernate в Java. Статья на Хабре по поводу AIR + SQLite подтвердила мои опасения насчет SQL. Но! В комментариях я наткнулся на ссылку на онлайн журнал Adobe Edge и статью в нем про FlexORM. Как я раньше не видел этой ссылки?

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

Ant

Т.к. в руфлэшнете последние дни происходит какой-то бум дискуссий по поводу Apache Ant, я решил разобраться все же как его применять в повседневной рутине. Сразу скажу, что как-то давно пытался прикрутить себе Ant, но чрезж#пная система компиляции с jsfl из Flash CS3 IDE никак работать не хотела и я забил.

Пока что странно, что никто не написал про существования Flex Ant Task, который я успешно вчера ночьюсегодня утром прикрутил к компиляции тестов своего фреймворка.

Теперь надо бы узнать как комитить в SVN не через одно место.

RubyMine

Тут раздают 50% скидку на релиз RubyMine — отличного IDE для разработки Ruby on Rails приложений. Пользуюсь им пока не будет время заморочиться делать все (flex и rails) в Eclipse.

Flex on, чтоб его, Rails

For those who don’t understand Russian and came here after googling  “ActionController::MethodNotAllowed (Only get, put, and delete requests are allowed.)” scroll down to the very bottom of the page for some English text.

Ruby on Rails развивается такими темпами и такими сложными заковыристыми скачками, что на 2.3.2 код из книги декабря 2008 в мартеапреле 2009 уже не работает. Я это уже испытал конечно на книгах 2006-2007 годов, но все же.

Значит, сама по себе связка Flex + Ruby on Rails очаровательна. Скорость, с которой делаются простые приложения, потрясает. Поэтому я сижу читаю сейчас
Flex on Rails: Building Rich Internet Applications with Adobe Flex 3 and Rails 2 (поделитесь PDFчиком у кого есть). И, как я уже сказал, пробую на себе одни грабли за другими.

Сейчас проблема вот в чем — во Flex HTTPService хоть и говорит, что свойство method = “GET|POST|PUT|DELETE”, но на практике же посылаются только GET и POST запросы (я уверен, 90% пользователей знакомых с понятием GET и POST о том, что есть еще как минимум PUT и DELETE и не подозревают). А рельсам уж очень хочется их использовать, например GET accounts/1 возвращает инфу об акаунте, PUT accounts/1 обновляет акаунт на сервере инфой с клиента, а DELETE accounts/1 удаляет пользователя. В книге об этом написано, надо к URL прибавлять ?_method=put. Но в 2.3.2 это уже не работает. На любые попытки такого обращения получаем.

ActionController::MethodNotAllowed (Only get, put, and delete requests are allowed.)

Гугление показало, что хорошо бы посылать _method=put переменной вместе с основным запросом. Запрос посылается в XML формате, а как известно, флексовый XML не может иметь два корня, тогда как XMLList посылаться отказывается. То есть вариант <_method>put</_method><data /> не проканывает. На оборачивание этого дела в другой тэг Rails ругается.

Продолжение гугления подсказало устанавливать header HTTP_X_HTTP_METHOD_OVERRIDE = PUT. Это не помогло тоже. Тут я расплакался и пошел жаловаться мамепошел перевел Гуглом некоторую китаюскую ссылку вроде бы по теме, где бравый китайский коммунист дошел все же до конца решения этой проблемы. Оказывается, что Rails каким-то макаром приписывал переменным еще один префикс HTTP_, а соответственно на HTTP_HTTP_X_HTTP_METHOD_OVERRIDE = PUT удивленно моргал глазами “а что? это не я!” и ничего не делал.

Так что в итоге работает так:

<mx:HTTPService id=”accountsUpdate”
url=”{CONTEXT_URL}/accounts/{accountsGrid.selectedItem.id}”
method=”POST” resultFormat=”e4x”  contentType=”application/xml” headers=”{{X_HTTP_METHOD_OVERRIDE: ‘PUT’}}” >
</mx:HTTPService>

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

Some English text

Basically, in the recent Rails version adding ?_method=put to URL doesn’t work any more (say hello to those book examples). So, you either have to have a hidden from field named _method (which in case of sending XML with Flex can’t be done) or pass HTTP_X_HTTP_METHOD_OVERRIDE = PUT in request header. But Rails for some reason adds “HTTP_” to variable name, so you need to send X_HTTP_METHOD_OVERRIDE = PUT. The example above shows how to do it.

Изобретать ли свой велосипед

Значит, предлагаю тему для обсуждения.

Моя область деятельности сейчас — это промо сайты и разнообразные виджеты в том числе видео.

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

В итоге, у меня есть теперь свой маленький MVC фреймворк и почти дописанный небольшой IoC фреймворк.

Читая время от времени новости от Adobe, я вижу, что связка Catalyst + Gumbo нацелена как раз на смещение равновесия в сторону флекса.

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

Прошу высказать свои соображения.

MXML ASDoc

Учимся правильно коментить MXML.