Monday, February 23rd, 2009
Про апгрейченый скрипт запуска AIR дебагера:
/*
* Menu: Kill adl an run debug
* Key: M3+d
* Kudos: Ilja Panin http://the33cows.com
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
*/
var workspace = Packages.org.eclipse.core.resources.ResourcesPlugin.getWorkspace();
var configToRunName = "[YOU_DEBUG_CONFIGURATION_NAME]";
function main()
{
Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");
loadBundle("org.eclipse.debug.ui");
var ProgressMonitorDialog = Packages.org.eclipse.jface.dialogs.ProgressMonitorDialog;
var IRunnableWithProgress = Packages.org.eclipse.jface.operation.IRunnableWithProgress;
var runnableWithProgress = new IRunnableWithProgress({run: runfun});
var monitorDialog = new ProgressMonitorDialog(window.getShell()).run(true, true, runnableWithProgress);;
}
function runfun(monitorDialog)
{
monitorDialog.beginTask("Run debbuger ...", 1);
var plugin = Packages.org.eclipse.debug.core.DebugPlugin;
var launchManager = plugin.getDefault().getLaunchManager();
configurations = launchManager.getLaunchConfigurations();
var conf;
for (var i in configurations)
{
if (configurations[i].getName() == configToRunName )
{
conf = configurations[i];
}
}
if (conf)
{
var launch = Packages.org.eclipse.debug.ui.DebugUITools.buildAndLaunch(conf, "debug", monitorDialog);
}
else
{
debug("project not found!");
}
monitorDialog.done()
}
function debug(s)
{
out.println(s);
} |
/*
* Menu: Kill adl an run debug
* Key: M3+d
* Kudos: Ilja Panin http://the33cows.com
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
*/
var workspace = Packages.org.eclipse.core.resources.ResourcesPlugin.getWorkspace();
var configToRunName = "[YOU_DEBUG_CONFIGURATION_NAME]";
function main()
{
Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");
loadBundle("org.eclipse.debug.ui");
var ProgressMonitorDialog = Packages.org.eclipse.jface.dialogs.ProgressMonitorDialog;
var IRunnableWithProgress = Packages.org.eclipse.jface.operation.IRunnableWithProgress;
var runnableWithProgress = new IRunnableWithProgress({run: runfun});
var monitorDialog = new ProgressMonitorDialog(window.getShell()).run(true, true, runnableWithProgress);;
}
function runfun(monitorDialog)
{
monitorDialog.beginTask("Run debbuger ...", 1);
var plugin = Packages.org.eclipse.debug.core.DebugPlugin;
var launchManager = plugin.getDefault().getLaunchManager();
configurations = launchManager.getLaunchConfigurations();
var conf;
for (var i in configurations)
{
if (configurations[i].getName() == configToRunName )
{
conf = configurations[i];
}
}
if (conf)
{
var launch = Packages.org.eclipse.debug.ui.DebugUITools.buildAndLaunch(conf, "debug", monitorDialog);
}
else
{
debug("project not found!");
}
monitorDialog.done()
}
function debug(s)
{
out.println(s);
}
Правила применения:
1.заменяем строку [YOU_DEBUG_CONFIGURATION_NAME] на имя конфигурации запуска приложения. Это имя можно найти в меню “Run -> Open Debug Dialog…”
2. заменяем сочетание M3+d на свое (M3 это alt). Для меня alt+d ближе чем F11 🙂
При выполнении скрипт, убивается процесс AIR дебагера и запускает процесс сборки и новый дебагер.
Posted in AIR, Eclipse, Effective work, Flex Builder 3, Monkey Script | Comments Off on Закрываем И запускаем AIR-debugger с помощью Eclipse Monkey
Sunday, February 22nd, 2009
Flex Builder не умеет закрывать дебагер AIR приложений.
Лично я все время забываю закрывать приложение и каждый раз при запуске получаю сообщение об ошибке. После чего приходится “искать” приложение и закрывать его. Отнимает время и иногда нервирует.
Чтобы облегчить себе работу в закрытии приложения я написал небольшой Eclipse Monkey script:
/*
* Menu: kill adl
* Key: M3+d
* Kudos: Ilja Panin http://the33cows.com
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
*/
function main()
{
Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");
}
он убивает запущенный процесс adl.exe(отладчик AIR) легким движением руки ) и экономит время.
В идеале я хотел написать скрипт, который слушает событие эклипса о запуске дебагера, и автоматом дебагер, но не нашел как “достучатся” до дебагера.
upd: чтобы запустить скрипт нужно создать в папке со скриптами(по умолчанию проект monkey папка scripts) js файл, например kill-adl.js в него вставить код. Запускаеться скрипт нажатием alt+d или выбором пункта из меню
Posted in AIR, Eclipse, Effective work, Flex Builder 3, Monkey Script | 4 Comments »
Tuesday, September 23rd, 2008
Пример приложения использующая исходники можно найти на сайте http://www.graviti.tv/blog/?p=46 (и http://www.graviti.tv/blog/?p=75 )
Но статья не о том как сделать кастомный хром, а неверном решении индийцев из адоб.
У кастомного хрома, как и у FlexChrome (showFlexChrome=”true”) есть проблемка, при максимайзе приложения оно выступает на 3 пиксела за экран во все стороны. При showFlexChrome=”true” как раз прячется скругление заголовка окна. Великолепный ход конем! :). При showFlexChrome=”true” это еще простительно, а вот когда у вас полностью свой кастом хром, то получается ужастно.
Как побороть это нормально я не нашел, пошел по простому выходу, вставил все приложение в отдельный компонент, а его сделал меньше текущего хрома ровно на 3 пх с каждой стороны)
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
showFlexChrome="false"
showStatusBar="false"
showGripper="true"
showTitleBar="false"
width="700" height="500" frameRate="45"
horizontalScrollPolicy="off" verticalScrollPolicy="off"
xmlns:local="*"
>
<local:AIRApplicationContent width="{width-6}"
height="{height-6}"
x="{3}" y="{3}"
filters="{[new DropShadowFilter(4,45,0,0.5)]}"
/>
</mx:WindowedApplication> |
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
showFlexChrome="false"
showStatusBar="false"
showGripper="true"
showTitleBar="false"
width="700" height="500" frameRate="45"
horizontalScrollPolicy="off" verticalScrollPolicy="off"
xmlns:local="*"
>
<local:AIRApplicationContent width="{width-6}"
height="{height-6}"
x="{3}" y="{3}"
filters="{[new DropShadowFilter(4,45,0,0.5)]}"
/>
</mx:WindowedApplication>
В качестве бонуса получил использование тени от окна не сильно напрягаясь 🙂
Posted in AIR, Flex Builder 3, Mаразмы нашего городка | 2 Comments »
Monday, February 25th, 2008
Адоб зарелизил AIR и FLEX 3, бурные продолжительные апплодисменты, все встают.
В честь этого небольной редизайн сайта покравсив его в черный (флексовый) цвет. Также сделал клевую шапку-флешку иллюстрирующую что такое AIR. Стоит зайти посмотреть

Одновременно с этим injun #576871 написал пост о том, что
Скот Гутри, пару дней назад рассказал в нескольких строках о предстоящей первой бета-версии Silverlight 2.
Я если чесно очень боюсь Silverlight 2 — последнее време продукты от майкрософта безумно огромны, неповоротливы и громоздки, как бы Silverlight 2 не стал именно таким “выхлопом” от майкрософт.
Майкрософт сейчас подобен безумному полководцу с безграничной армией программеров-войнов, которых он шлет бездумно на бойницы пытаясь просто завалить их трупами войнов. Эти войны-программисты порождают безумное количесто софта который просто неудобен в использовании, но окружающие люди просто ничего не видят вокруг, за огромностью MS этого просто не видно. Эта толпа программистов способна(?) сделать много всякого функционала и возможностей, но обычно это выглядит очень убого, а порой это вообще никому не нужно. Пока МС просто пытается набрать колличественный показатель всяких плюшек и возможностей, но вопрос в том, сможет ли он перешагнуть в качественный. Лично я подозреваю, что уже не застигну этот момент ;(
“способна(?)” — это я к тому, что я в этой жизни так и не пронаблюдал релиза Silverlight 1.1, и его прорадителя :).
Posted in AIR, Flex Builder 3 | 4 Comments »
Monday, October 15th, 2007
Поставил флекс билдер 3 и решил пощупать AIR за самые интересные места, а именно за работу с файловой системой
Взял самый простой пример их хелпа по File метод browseForOpen
воткнул его в приложение
}
catch (error:Error)
{
trace(“Failed:”, error.message)
}
}
public function fileSelected(event:Event) : void
{
var stream : FileStream = new FileStream();
stream.open(File(event.target), FileMode.READ);
var fileData:String = stream.readUTFBytes(stream.bytesAvailable);
fileList.text = fileData;
}
]]>
и получил огромный болт – при нажатии на кнопку “Browse…” появляется окошко, в нем выбираешь файл но никакого события не происходит ни cancel ни select вообще ничего не происходит.
3 раза перечитал хелп, погуглил, нашел интересный блог от Benjamin Dobler – RichApps и там нашел описание мероприятия от адоба и его результатов (там есть весомый архив с различными примерами AIR приложений, в том числе и работы с файловой системой). Блог нужно читать всем внимательно 3 раза ибо интересно.
Так вот его пример работал, а мой нет разница был в том что моя переменная File был объявлена локально в функции и видимо на крысу по быстрому собралась мусорщиком %).
Правильный ответ в моей проблеме это объявить переменную как свойства класса и становиться замечательно!
}
catch (error:Error)
{
trace(“Failed:”, error.message)
}
}
public function fileSelected(event:Event) : void
{
var stream : FileStream = new FileStream();
stream.open(File(event.target), FileMode.READ);
var fileData:String = stream.readUTFBytes(stream.bytesAvailable);
fileList.text = fileData;
}
]]>
Posted in ActionScript 3.0, AIR, Flex, Flex Builder 3, mxml | 11 Comments »