Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > alatar

Оценить эту запись

redtamarin

Запись от alatar размещена 20.07.2011 в 23:36

Что это за зверь?
Примат семейства игрунковых.
Проект основанный на Tamarin позволяющий запускать AS3 код из командной строки. Но так как Tamarin содержит только базовые классы (Object, Array и т.д.) redtamarin добавляет нативный функционал, вроде определения под какой системой запущено приложение, запись/чтение файлов, работа с сокетами и т.д.

Подробнее с проектом можно ознакомиться на офсайте. Здесь я опишу компиляцию и установку инструментария под Windows (Ибо как раз под виндой не все гладко. Те кто используют Linux могут пропустить раздел о установке и почитать о нем на офсайте) и приведу вольный перевод Getting Started из вики проекта.

Установка под Windows

Сборка интрументария

Для установки понадобятся ant, java и svn клиент, например TortoiseSVN. Если у вас их нет, придется скачать и установить.

Далее, качаем оболочку (по-сути это виртуальная машина для выполнения *.as или бинарных файлов) redtamarin_{version}_WIN.zip.

В принципе, на этом можно остановиться уже можно работать.
Распакуйте содержимое архива, создайте в этой папке файл hello.as со следующим содержимым:
Код AS3:
trace("hello world");
Запустите консоль и введите:
Код:
redshell.exe hello.as
Но, писать без автокомплита грустно. К тому же, оболочка не умеет создавать исполняемые файлы. Поэтому продолжим.

Для полноценной работы необходимо скачать исходники инструментария. Сделать это можно с помощью svn, в консоли:
Код:
svn co http://redtamarin.googlecode.com/svn/tools/trunk redtamarin-tools
или с помощью вашей любимой графической оболочки над svn.

Получится такая структура папок:
Код:
redtamarin-tools
  |_ build
  |    |_ ant
  |    |_ red
  |        |_ nix
  |        |_ osx
  |        |_ win
  |
  |_ src
      |_ ...
Далее, распаковываем ранее скачанный архив в папку /build/red/win.
После чего, запускаем консоль, переходим в папку redtamarin-tools и вводим:
Код:
ant
После чего будет создана папка bin, с небольшой горсткой файлов:
Код:
bin
     |_ abcdump.exe               <- Показывает содержимое abc или swf файла
     |_ asc.exe                   <- Исполняемая обертка для asc.jar
     |_ asc.ajr
     |_ builtin.abc
     |_ createprojector.exe       <- Утилита для создания projector
     |_ EclipseExternalTools.exe  <- Утилита для создания Eclipse External Tools для redtmarin
     |_ redshell.exe              <- redshell release
     |_ redshell_d.exe            <- redshell debug
     |_ swfmake.exe               <- Утилита для вшивания ABC файлов в swf
     |_ toplevel.abc
Все инструментарий готов. Можно заняться удобствами.

Подключение к Flash Builder

С подключением не все так гладко, как было до этого (если у вас до этого этапа все было гладко ).
Авторы redtamarin предлагают воспользоваться любезно предоставленным EclipseExternalTools.exe для подключения инструментария. Но на практике, штука это довольно глючная (под виндой).

Запустите консоль и введите:
Код:
EclipseExternalTools.exe путь/к/workspace/вашего/FlashBulder
Если в пути к workspace есть пробелы, то его необходимо заключить в кавычки. Обратите внимание, что должны использоваться прямые слеши, а не обратные и в конце не должно быть слеша.
Для тех, кто никогда не использовал чистый Eclipse, workspace это папка в которой по-умолчанию создаются ваши проекты. Что-то типа c:/Documents and Settings/username/Adobe Flash Builder 4 под XP или c:/User/username/Adobe Flash Builder 4 в семерке.
Или можете просто скопировать EclipseExternalTools.exe в workspace и набрать:
Код:
EclipseExternalTools.exe .
Если этот фокус не проходит (мне удалось пропатчить только основной workspace, на дополнительном валилось с ошибкой без объяснений), то запускаем FlashBuilder, выбираем в меню Run -> External Tools -> External Tools Configurations выделяем Program и создаем конфигурации запуска (иконка в виде листка с плюсом).
Необходимо создать следующие конфигурации:
Код:
Name: ASC_compile
Location: ${project_loc}/bin/asc.exe
Working Derictory: ${project_loc}/bin/
Arguments: -AS3 -strict -import builtin.abc -import toplevel.abc ${resource_loc}
Код:
Name: dump_api
Location: ${project_loc}/bin/abcdump.exe
Working Derictory: ${project_loc}/src/
Arguments: -api ${resource_loc}
Код:
Name: dump_infos
Location: ${project_loc}/bin/abcdump.exe
Working Derictory: ${project_loc}/src/
Arguments: -i ${resource_loc}
Код:
Name: extract_abc
Location: ${project_loc}/bin/abcdump.exe
Working Derictory: ${project_loc}/src/
Arguments: -a ${resource_loc}
Код:
Name: make_projector
Location: ${project_loc}/bin/createprojector.exe
Working Derictory: ${project_loc}/src/
Arguments: -exe ../bin/redshell.exe ${resource_loc}
Код:
Name: redshell_debug
Location: ${project_loc}/bin/redshell_d.exe
Working Derictory: ${project_loc}/src/
Arguments: ${resource_loc}
Код:
Name: redshell_run
Location: ${project_loc}/bin/redshell.exe
Working Derictory: ${project_loc}/src/
Arguments: ${resource_loc}
Если фокус таки прошел, не расслабляйтесь, придется добавить расширения exe по образцу приведенному выше.

Создание нового проекта и компиляция

Тут все просто. Создаем в билдере ActionScript проект. Удаляем весь автосгенерированный код (оставляем только пустой as файл). Копируем в него папку bin из инструментария (прямо в папку проекта, не в src) качаем swc (redtamarin_{version}_SWC.zip) с компонентами (нам ведь нужен автокомплит?) и кладем ее в папку libs (например) в проекте.

Далее открываем свойства проекта, переходим к ActionScript Build Path -> Library Path и убираем оттуда всё. После чего подключаем нашу папку libs. Переходим к Builder и снимаем чекбокс рядом с Flex. Билдер ругнется, но нам, как говорится, пофиг, поэтому подтверждаем наше решение.

Всё. Инструментарий к бою готов.

Первая кровь

Поскольку redtamarin предназначен для разработки консольных приложений, неплохо бы эту консоль включить в билдере Window -> Console.

В нашем as файле пишем следующее:
Код AS3:
import avmplus.OperatingSystem;
 
trace("username: " + OperatingSystem.username);
Убеждаемся, что в Package Explorer выбран наш as файл и нажимаем ASC_compile
Название: ExternalTools.JPG
Просмотров: 1777

Размер: 14.2 Кб
Полдела сделано, в папке src появился файл с расширением abc, теперь его можно запустить. Выбираем файл abc и нажимаем redshell_run и в консоли видим
Код:
username: ваше имя
Усложняем себе жизнь пример, пишем:
Код AS3:
package test
{
	import avmplus.System;
 
	public class Robot
	{
		private var _name:String;
		private var _username:String;
 
		public function Robot(name:String)
		{
			_name = name;
		}
 
		public function askUserName():void
		{
			trace("What is you name?");
 
			var answer:String = System.readLine();
 
			if (answer != "")
			{
				_username = answer;
			}
		}
 
		public function sayHello():void
		{
			trace("Hello " + _username + ".");
		}
 
		public function sayMyName():void
		{
			trace("I am " + _name + ".");
		}
	}
 
	//entry point
        //программа начнет работать отсюда
 
	var rob:Robot = new Robot("Rob");
	rob.askUserName();
	rob.sayHello();
	rob.sayMyName();
}
Обратите внимание:
1. Точка входа нашей программы находится вне класса.
2. Имя файла может не совпадать с именем класса и в одном файле может быть сколько угодно классов и они все будут доступны из-вне.
3. Пакет может быть любым и можно не дублировать в виде системы каталогов.
4. trace() выводит всегда, а не только в дебаг версии.
5. Консоль в FlashBuilder (точнее в Eclipse) не поддерживает интерактивный режим, поэтому лучше запускать ваше приложение из полноценной консоли.

Можно вынести класс Robot в отдельный файл, но тогда вы должны будете прописать для него include в дополнение к импорту.
Код AS3:
include "test/Robot.as";
 
import test.Robot;
 
var rob:Robot = new Robot("Rob");
rob.askUserName();
rob.sayHello();
rob.sayMyName();
Более сложные примеры можно увидеть на офсайте.
Всего комментариев 30

Комментарии

Старый 21.07.2011 11:35 Котяра вне форума
Котяра
 
Аватар для Котяра
Код AS3:
rob.askUserName()
Ждёт ввода?
Вот ещё очень важное отличие - последовательность выполнения кода.
Старый 21.07.2011 11:39 alatar вне форума
alatar
 
Аватар для alatar
Да, забыл дописать. System.readLine(); блокирует программу и ждет ввода пользователя.
Старый 21.07.2011 12:14 alatar вне форума
alatar
 
Аватар для alatar
Последовательность выполнения кода обычная. Блокеры есть и в флеш-плеере (при печати например), событие ENTER_FRAME, по понятным причинам отсутствует, но его можно элементарно эмулировать.
Старый 24.07.2011 01:19 funnycrap вне форума
funnycrap
тупой вопрос, но все же: выводится ли графика, если да, то куда?
Старый 24.07.2011 02:05 alatar вне форума
alatar
 
Аватар для alatar
Только псевдографика
Ну, можно в текстовый файл вывести или в другое консольное приложение.
Старый 24.07.2011 02:17 funnycrap вне форума
funnycrap
а что собственно собой представляет эта "псевдографика"? непросчитанный дисплэйлист?
Старый 24.07.2011 03:05 alatar вне форума
alatar
 
Аватар для alatar
Старый 12.08.2011 11:13 windrunner31 вне форума
windrunner31
а смысл от подобной канители?
Старый 12.08.2011 19:29 alatar вне форума
alatar
 
Аватар для alatar
Смысл — создание консольных приложений.
Старый 12.08.2011 21:25 windrunner31 вне форума
windrunner31
кстати да,обьясните,зачем СЕЙЧАС вообще нужны консольные приложения?
Старый 13.08.2011 00:42 alatar вне форума
alatar
 
Аватар для alatar
А что не так с СЕЙЧАС, что отпала необходимость в консольных приложениях?
Старый 13.08.2011 00:47 alatar вне форума
alatar
 
Аватар для alatar
Графический интерфейс далеко не всегда необходим.
Старый 13.08.2011 06:16 ChuwY вне форума
ChuwY
 
Аватар для ChuwY
Графический интерфейс далеко не всегда необходим.
И консольные приложения используются очень часто.
Но все же флеш для консольных приложений кажется все же очень узкой темой.
Не изучал прикрепленные ссылки.
Производительность на том же уровне, что и в обычном флешплерее?
Старый 14.08.2011 00:30 alatar вне форума
alatar
 
Аватар для alatar
ChuwY, не надо смешивать все в одну кучу. Язык ActionScript вполне отделим от технологии флеш. Да и сама технология не ограничивается флеш-плеером и AIR. Про NodeJS слышали? Чем AS3 хуже JavaScript?
Старый 14.08.2011 16:22 Sintesis вне форума
Sintesis
 
Аватар для Sintesis
Таким способом можно создать текстовый файл с данными?
Например есть код на AS3 который рассчитывает кое что и готовый результат нужно хранить в каком-нибудь файлике, что-б в дальнейшем когда-нибудь использовать вычисленные данные на AS3. С помощью просто Flash такое не получится, да?
Старый 14.08.2011 16:33 alatar вне форума
alatar
 
Аватар для alatar
Цитата:
Таким способом можно создать текстовый файл с данными?
Можно и не текстовый. Можно и в стандартный выходной поток послать и т.д.
Цитата:
С помощью просто Flash такое не получится, да?
Получится, но не такое. Флеш-плеер не даст сохранить файл без взаимодействия с пользователем. В AIR это возможно, но будут тратиться ресурсы, на ненужный в серверном исполнении GUI, рассылку ENTER_FRAME, RENDER и т.д.
Старый 15.08.2011 15:20 ChuwY вне форума
ChuwY
 
Аватар для ChuwY
Но мой второй вопрос все еще корректен, не правда ли?
Старый 15.08.2011 16:08 alatar вне форума
alatar
 
Аватар для alatar
Который из них?
Старый 15.08.2011 16:40 alatar вне форума
alatar
 
Аватар для alatar
Насчет производительности? JIT используется тот же, что и в плеер. Тестов на производительность не делал.
Старый 10.01.2013 16:40 дизаитс вне форума
дизаитс
бывают же извращения)
вот положа руку на сердце, предложите пример практического применения данной технологии
Старый 10.01.2013 16:45 alatar вне форума
alatar
 
Аватар для alatar
Какой пример вам необходим? NodeJS тоже извращение? Серверные скриптовые языки тоже?
Старый 10.01.2013 20:51 iflamberg вне форума
iflamberg
 
Аватар для iflamberg
Честно говоря, по мне, так nodeJS - извращение. Однозначно. Ну, т.е. я понимаю, когда программеры продвигают python, erland, ruby. Это годные языки, новые языки, нестандартные языки, с интересными конструкциями, позволяющими писать код красиво и компактно. Но использовать неторпливый, нетипизированный js для cgi? Зачем?
Старый 10.01.2013 21:30 alatar вне форума
alatar
 
Аватар для alatar
С неторопливостью можно и поспорить. Большинство скриптовых серверных языков либо слабо, либо динамически типизированы (в частности, все вами перечисленные). Python старше JavaScript, Ruby того же года, что и JS. В чем измеряется "годность" языков?
Преимущество решений типа NodeJS (кстати, есть и NodeAS) в возможности использовать один язык для клиентской и серверной частей, что потенциально удешевляет разработку или, как минимум, прототипирование.
Старый 11.01.2013 01:07 Котяра вне форума
Котяра
 
Аватар для Котяра
за NodeAs - респект и уважуха)
Старый 11.01.2013 15:05 iflamberg вне форума
iflamberg
 
Аватар для iflamberg
Ну слушай, эти бэнчмарки не могут быть объективны. "showing the performance of the languages in one aspect, and mainly: loops, dynamic arrays with numbers, basic math operations". Можно подумать в cgi-скриптах меня больше всего волнует скорость математических операций. Меня будет волновать как при наименьших затратах времени написать как можно больше эффективного кода. Именно поэтому пхп стал намного более популярным чем перл. Перл компактен, но пойди разберись в том коде, что писал всего два месяца назад. В cgi приложениях, когда производительности одного веб-сервера становится недостаточно, и акселлераторы перестают справляться, дешевле поставить еще одну машину в кластер - это две штуки единоразово, чем заставлять программиста дополнительно оптимизировать код или переписывать на cpp - это больше чем две штуки на зарплату программисту в месяц.

js и as - расширения ECMAScript. Это значит - прошел стандартный учебный курс по cpp - ECMAscript для тебя как родной. Но язык-то бедненький на лексику. Ни тебе итераторов, ни компактных команд для работы со списками, чего уж там, цепочечных сравнений и то нет.

Ну и зачем эти языки тянуть еще и в cgi? Тут и так есть php, jsp, asp, python, ruby, perl, чего тут только нет. И многие из них буквально рождены для работы с текстовыми данными, для их парсинга и обработки. Чтобы удешевить разработку? Да что за глупости. Во время учебного курса по программированию студент обычно учит, ну как минимум языка 3. Обычно это pascal, delphi, cpp или с# сейчас. И знакомится еще с несколькими, там, скажем, vb, js, php, пролог или лисп, еще что-нибудь. Что такое для программиста выучить еще один язык? Что такое месяц посидеть вечерком вникая в новый материал по сравнению с возможность писать красиво и эффективно всю оставшуюся жизнь?
Старый 12.01.2013 02:08 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
Что такое для программиста выучить еще один язык? Что такое месяц посидеть вечерком вникая в новый материал по сравнению с возможность писать красиво и эффективно всю оставшуюся жизнь?
Это ошибочное мнение, что хороший программист выучит новый язык очень быстро.
Выучить, то он может и выучит (синтаксис), но особенности, фичи и баги, крачивые решения - накапливаются годами.
Я сам, как мне казалось раньше, знал c++, delphi.
Разбираюсь в синтаксисе java и c#,
могу со словарём почитать erlang и haskel
но специалистом я себя считаю только в as. Ну и просто хорошим проектировщиком, пароходом и человеком)
Старый 12.01.2013 14:44 expl вне форума
expl
По последним данным C++ вообще никто не знает (даже те, кто разрабатывал компиляторы под него). Видимо тут дело в языке

Оно конечно хорошо писать писать на том же языке, что и клиент,
только вот от изучения API серверной части и вообще теории о том как работает сервер это не спасёт.

Наворачивать _неклассическую_ технологию только для того, чтобы использовать тот же синтаксис?
Это только усложнит изучение API - для неклассической технологии меньше материала в сети и готовых решений часто встречающихся проблем. Плюс не надо забывать, что будут баги, т.е. то что работало на нашем любимом AS3 во флеше - на сервере может не прокатить.

Это просто контрпример. Это не значит что использование одного языка вообще не имеет смысла.
Я пару тулз на Air написал и это было проще, чем на C#, особенно при работе с графикой (ну с асинхронностью приходилось возиться там, где в каком-нть PHP можно было просто подряд 2 строчки).
Но в то же время редактор локализации оказалось раз в 10 проще написать на C#.
Но это десктопные тулзы, а чтобы писать на сервере после клиента придется изучать больше новых апи.
Обновил(-а) expl 12.01.2013 в 15:02
Старый 12.01.2013 14:57 iflamberg вне форума
iflamberg
 
Аватар для iflamberg
2Котяра: Ну, понятное дело, что "особенности, фичи и баги, крачивые решения - накапливаются годами". И что? Поэтому, если тебе понадобится своими руками закодить сокет-сервер, ты его будешь писать на AS? Зная, что решение, скажем, на java лучше тем, что оно как минимум быстрее, есть куча накопленных библиотек и примеров и проще запустить на арендованном сервере?
Старый 13.01.2013 01:07 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
ну если логика и на клиенте и на сервере (проверки, либо синхронизация), то конечно, эту часть лучше было бы инкапсулировать в отдельный модуль, и использовать и на клиенте, и на серваке. Но это, к сожалению лишь теория. Можно конечно написать свое DSL расширение - на котором можно будет описывать нейкие общие для сервера и клиента вещи. Но вряд ли кто то эти будет заниматься.
Старый 14.01.2013 13:02 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Но вряд ли кто то эти будет заниматься
По секрету могу сказать, что небезызвестная компания Zinga именно так и поступает - делает свой DSL, пишет на нем логику и в ус не дует имеет успех. Мы у себя попробавили немного другую схему и в итоге после года разработки изобрели CQRS. Очень забавно что ты в течнеие года придумывал то, что было известно до того как ты появился на свет =)
 

 


Часовой пояс GMT +4, время: 09:34.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.