Отличную книжку вчера пролистал.
Flex 4 Cookbook
Год выпуска: 2010
Автор: Joshua Noble, Todd Anderson, Garth Braithwaite
Издательство: O’Reilly
ISBN: 0596805616
Так нужно писать книги. А этой ссылки тут нет.
Making things move since 1999.
Отличную книжку вчера пролистал.
Flex 4 Cookbook
Год выпуска: 2010
Автор: Joshua Noble, Todd Anderson, Garth Braithwaite
Издательство: O’Reilly
ISBN: 0596805616
Так нужно писать книги. А этой ссылки тут нет.
Честно скажу, сам не знал. Прочитал только сегодня тут.
Значит, оказывается, для компилятора можно указывать константы в специальном неймспейсе ( по крайней мере выглядит так ), и потом использовать их для условной компиляции в зависимости от значения. Например, для отладки можно использовать следующий код:
function log( message:String ):void
{
CONFIG::Debug {
trace( message );
}
}
Который, если CONFIG::Debug == true, вкомпилит этот trace, в противном же случае нет.
Константы определяются следующим образом:
<mxmlc ... >
<define name="CONFIG::Debug" value="false"/>
</mxmlc>
<compiler>
<define>
<name>CONFIG::Debug</name>
<value>false</value>
</define>
</compiler>
Получается очень интересная штука. Дебаг и релиз версии лично у меня отличаются наличием всяких внешних вызовов дебагеров, например Alcon, которые совершенно не нужны в релизе. Проблема лишь в том, что мало кто эту фишку знает и, если отсутствуют объявления этих констант (мало ли, скопипастили код), то скомпилить становится нетривиально.
Когда я узнал, что данные в AIR приложениях можно хранить в локальной SQLite базе данных, с одной стороны я был рад, но с другой я подумал, что придется опять возиться с SQL и прочей фигней. Как бы было хорошо, подумал я, если бы было какое-нибудь ORM решение типа как в Ruby или как Hybernate в Java. Статья на Хабре по поводу AIR + SQLite подтвердила мои опасения насчет SQL. Но! В комментариях я наткнулся на ссылку на онлайн журнал Adobe Edge и статью в нем про FlexORM. Как я раньше не видел этой ссылки?
В общем, все просто отлично. О грязном SQL можно будет забыть.
Т.к. в руфлэшнете последние дни происходит какой-то бум дискуссий по поводу Apache Ant, я решил разобраться все же как его применять в повседневной рутине. Сразу скажу, что как-то давно пытался прикрутить себе Ant, но чрезж#пная система компиляции с jsfl из Flash CS3 IDE никак работать не хотела и я забил.
Пока что странно, что никто не написал про существования Flex Ant Task, который я успешно вчера ночьюсегодня утром прикрутил к компиляции тестов своего фреймворка.
Теперь надо бы узнать как комитить в SVN не через одно место.
Тут раздают 50% скидку на релиз RubyMine — отличного IDE для разработки Ruby on Rails приложений. Пользуюсь им пока не будет время заморочиться делать все (flex и rails) в Eclipse.
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 нацелена как раз на смещение равновесия в сторону флекса.
В связи с этим, я склоняюсь забить изобретать велосипед и начать глубоко копать в сторону этих продуктов. Но я так и не понял, будет ли это решение лучше, чем то, что у меня есть и дорабатывается сейчас.
Прошу высказать свои соображения.