<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог Diestro &#187; ActionScript 3.0</title>
	<atom:link href="http://blog.diestro.ru/category/actionscript-3-0/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.diestro.ru</link>
	<description>Flex, Flash, ActionScript</description>
	<lastBuildDate>Mon, 26 Apr 2010 16:13:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Знакомство с MVCS фреймворком Robotlegs</title>
		<link>http://blog.diestro.ru/znakomstvo-s-robotlegs/</link>
		<comments>http://blog.diestro.ru/znakomstvo-s-robotlegs/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 18:28:04 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[Robotlegs]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=152</guid>
		<description><![CDATA[Впервые об этом фреймворке я услышал на BURAFPUG, прошедшем 6 февраля 2010 г. После некоторого изучения документации я пришел к выводу, что Robotlegs действительно очень интересный фреймворк.
Я не буду здесь рассказывать о конкретной реализации простого приложения типа Hello World, т.к. примеров приложений вполне достаточно  на сайте фреймворка.
Robotlegs это MVCS фремворк реализующий паттерн MVC с [...]]]></description>
			<content:encoded><![CDATA[<p>Впервые об этом фреймворке я услышал на BURAFPUG, прошедшем 6 февраля 2010 г. После некоторого изучения документации я пришел к выводу, что <a href="http://www.robotlegs.org/">Robotlegs</a> действительно очень интересный фреймворк.</p>
<p><span id="more-152"></span>Я не буду здесь рассказывать о конкретной реализации простого приложения типа Hello World, т.к. <a href="http://github.com/robotlegs/robotlegs-demos-Bundle">примеров приложений</a> вполне достаточно  на сайте фреймворка.</p>
<p>Robotlegs это MVCS фремворк реализующий паттерн MVC с добавлением еще одного элемента – Services, использующегося для реализации взаимодействия с «внешним миром», будь то Web-сервисы, файловая система, базы данных, взаимодействие с другими Flash-приложениями через Local Connection и т.п.</p>
<h2>Внедрение зависимостей (Dependency Injection)</h2>
<p>Современные фреймворки, базирующиеся на паттерне MVC теми или иными способами поддерживают реализацию принципа Inversion of Control (Ioc) или Dependency Injections (DI). Robotlegs также основан на этом принципе.</p>
<p>Для чего нужно использование паттерна Dependency Injection? ООП приложение состоит из классов. Классы могут получать доступ к другим классам имея ссылки на них. Они взаимодействуют друг с другом, используя эти ссылки. Смысл Dependency Injection &#8211; уйти от высокой связанности приложения, заменив описание взаимодействия между конкретными классами на интерфейсы. Т.е. класс X будет использовать не класс Y а реализациею его интерфейса I. В результате мы получаем низко связанное приложение, классы которого знают только о интерфейсах для работы с другими классами. Например в приложении для работы с почтой мы будем работать с интерфейсом IMailLoader, вызывая метод load(), а не с конкретной реализацией класса IMAPMailLoader. В этом случае IMAPMailLoader будет легко заменить на POPMailLoader,реализующий интерфейс IMailLoader или на любой другой класс реализующий нужный интерфейс.</p>
<p>В Robotlegs DI реализован с помощью SwiftSuspenders. Это легковесный DI фреймворк для реализации этого паттерна посредством метатегов [Inject].</p>
<p>Работая с Robotlegs с классом наследуемом от Context (о нем я расскажу ниже) мы имеем доступ к переменной injector. Это экземпляр класса, реализующего функционал фреймворка  SwiftSuspenders. injector – это менеджер внедряющий нужный экземпляр класса в классы нашего приложения.</p>
<p>Возвращаясь к примеру с почтовым сервисом реализация DI с помощью Robotlegs выглядит следующим образом:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">//Когда запрашивают &nbsp;интерфейс IMailLoader вернуть экземпляр класса &nbsp;IMAPMailLoader</span><br />
injector.<span style="color: #006600;">mapClass</span><span style="color: #66cc66;">&#40;</span>IMailLoader, IMAPMailLoader<span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Для того чтобы фреймворк внедрил то что мы описали выше, в нашем классе достаточно будет написать:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#91;</span>Inject<span style="color: #66cc66;">&#93;</span><br />
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> mailLoader:IMailLoader;</div></td></tr></tbody></table></div>
<p>В результате переменная mailLoader будет содержать экземпляр класса IMAPMailLoader.</p>
<p>Если же мы напишем:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">injector.<span style="color: #006600;">mapClass</span><span style="color: #66cc66;">&#40;</span>IMailLoader, IMAPMailLoader, <span style="color: #ff0000;">&quot;IMAP&quot;</span><span style="color: #66cc66;">&#41;</span>;<br />
injector.<span style="color: #006600;">mapClass</span><span style="color: #66cc66;">&#40;</span>IMailLoader, POPMailLoader, <span style="color: #ff0000;">&quot;POP&quot;</span><span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>В нашем классе мы можем задать name, для инстанцирования нужной нам реализации:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#91;</span>Inject<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;POP&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><br />
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> mailLoader:IMailLoader;</div></td></tr></tbody></table></div>
<p>В результате переменная mailLoader будет содержать экземпляр класса POPMailLoader.</p>
<p>Создавая карты с помощью injector можно также внедрять конкретные экземпляры классов (mapValue), классы «одиночки» (mapSingleton) и пр. Подробнее об этом написано в <a href="http://wiki.github.com/robotlegs/robotlegs-framework/best-practices">документации Robotlegs</a>.</p>
<p>Немножко разобравшись с реализацией DI в Robotlegs перейдем к реализации MVCS архитектуры.</p>
<h2>Контекст</h2>
<p>Сердцем фреймворка Robotlegs является класс Context, от которого собственно и наследуется наш главный класс приложения. В этом классе задаются основные связи между компонентами приложения.</p>
<h3>Карты команд</h3>
<p>С помощью commandMap задается какую команду нужно вызывать при возниковении того или иного события.</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">commandMap.<span style="color: #006600;">mapEvent</span><span style="color: #66cc66;">&#40;</span>MyEvent.<span style="color: #006600;">SOME_HAPPENED</span>, MyCoolCommand, MyEvent<span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<h3>Карты отображения</h3>
<p>Так же как и PureMVC в Robotlegs для взаимодействия с view-компонентами используются посредники, называемые медиаторами. View-компоненты и их медиаторы сопоставляются с помощью mediatorMap.</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mediatorMap.<span style="color: #006600;">mapView</span><span style="color: #66cc66;">&#40;</span>MyAwesomeWidget, MyAwesomeWidgetMediator<span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Интересной особенностью медиаторов является их автоматическое инстанцирование только в случае добавления view-компонента, связанного с этим медиатором, в список отображения,что впрочем можно отключить во время задания правила для mediatorMap. Существует еще и viewMap, о котором в официальной документации не сказано ничего, но насколько я понял он используется для «внедрения» view-компонентов в классах приложения, т.е. является полным аналогом прямого использования injector.</p>
<h3>Карты внедрения (иньекций)</h3>
<p>Здесь описываем все классы или их экземпляры, которые необходимо «внедрять» в классы нашего приложения посредством использования метатега [Inject]. В частности здесь мы описываем наши классы с данными и сервисами необходимыми для реализации MVCS:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">injector.<span style="color: #006600;">mapSingleton</span><span style="color: #66cc66;">&#40;</span> ApplicationModel <span style="color: #66cc66;">&#41;</span>;<br />
injector.<span style="color: #006600;">mapSingletonOf</span><span style="color: #66cc66;">&#40;</span> IGalleryImageService, GalleryImageService <span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Все классы описанные с помощью commandMap и mediatorMap автоматически подготавливаются фреймворком  для «внедрения» в классы приложения.<br />
Таким образом в нашем главном классе приложения перед запуском мы конфигурируем все необходимые компоненты и взаимодействия.</p>
<h2>События</h2>
<p>Для системы событий Robotlegs использует «родные» события Flash-плеера. Для их распространения внутри фреймворка используется следующий синтаксис:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dispatch<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ContextEvent<span style="color: #66cc66;">&#40;</span>ContextEvent.<span style="color: #006600;">STARTUP</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Чтобы слушать события используется следующий синтаксис:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">eventMap.<span style="color: #006600;">mapListener</span><span style="color: #66cc66;">&#40;</span>dispatcher, ContextEvent.<span style="color: #006600;">STARTUP</span>, startupHandler<span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Либо как уже было сказано выше во время конфигурации приложения можно указать на какое событие должна запускаться та или иная команда:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">commandMap.<span style="color: #006600;">mapEvent</span><span style="color: #66cc66;">&#40;</span> ContextEvent.<span style="color: #006600;">STARTUP</span>, StartupCommand, ContextEvent<span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Распространять и слушать события могут далеко не все фигуранты фреймворка. Кратко рассмотрим «Актёров» Robotlegs (MVCS).</p>
<h2>Модель и сервисы (M и S)</h2>
<p>Я позволю себе объединить описание этих двух составных частей фреймворка в одном месте, так как оба этих компонента должны наследоваться от класса Actor. Для фреймворка не имеет значение модель это или сервисы, это просто «Актер», наделить их функционалом должен уже разработчик.</p>
<p>Для того чтобы иметь доступ к модели или классу сервиса из других классов фреймворка достаточно будет написать [Inject] перед объявлением переменной. Например если класс с данными называется ApplicationModel, то в классе, где необходимо будет его  использовать, достаточно написать:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#91;</span>Inject<span style="color: #66cc66;">&#93;</span><br />
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> myModel:ApplicationModel;</div></td></tr></tbody></table></div>
<p>Перед этим, естественно, нужно не забыть его добавить в карту внедрения, как это было указано выше.</p>
<p>Наследники класса Actor могут посылать события приложению используя метод dispatch.</p>
<h2>Отображение (V)</h2>
<p>Как правило каждый компонент отображения в Robotlegs состоит из двух элементов &#8211;  cобственно компонента отображения и элемента, являющегося частью фреймворка – медиатора. Медиатор является  посредником между компонентом отображения и фреймворком. Его основная задача информировать приложение о действиях пользователя и наоборот – изменять элементы отображения в соответствии с изменениями в приложении.</p>
<p>Медиатор должен наследоваться от класса Mediator. Элемент отображения связанный с медиатором доступен в переменной viewComponent. Медиатор имеет доступ к dispatch() и eventMap, а это значит что он может как распространять так и слушать события внутри приложения.</p>
<p>Для инициализации медиатора крайне не рекомендуется пользоваться конструктором. Для этого существует метод  onRegister(), который необходимо переопределить и писать код инициализации в нем.</p>
<p>Для доступа к модели достаточно внедрить класс модели с помощью метатега [Inject] , так как это было описано выше.</p>
<h2>Контроллер (С)</h2>
<p>Функционал контроллера реализуется в Robotlegs посредством вызова команд. Класс команды должен наследоваться от класса Command.  Команда создается только на время выполнения и после выполнения попадает в Garbage Collector. Команда появляется как результат возникновения события. Код, который должен выполнить команда должен быть помещен внутри переопределенного метода execute(). Сопоставления команд событиям происходит в commandMap Контекста приложения. Тот же самый commandMap доступен и внутри любой из комманд.</p>
<p>Доступ к модели организуется так же как и в классах отображения.</p>
<p>В процессе обработки командой события наверняка понадобится возможность иметь доступ к экземпляру класса события, явившегося причиной запуска команды. Это делается следующим образом:</p>
<div class="codecolorer-container actionscript mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#91;</span>Inject<span style="color: #66cc66;">&#93;</span><br />
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> event:MyCustomEvent;</div></td></tr></tbody></table></div>
<p>Команда может также посылать события приложению используя метод dispatch.</p>
<p>Кратко резюмируя хотелось бы сказать что реализация Robotlegs действительно очень интересная и заслуживает внимания. В чем то она похожа на PureMVC, об этом же говорит и автор Robotlegs. Однако в Robotlegs иначе организована система событий, не нужно писать switch/case в обработчиках событий, как это реализовано в PureMVC. Достаточно подписаться на нужное событие и назначить метод обработчик, так как мы это привыкли делать со стандартными событиями Flash. По другому организовано и взаимодействие между компонентами приложения. В отличии от  PureMVC в  Robotlegs для доступа к другим компонентам приложения уже не используются retrieveProxy, retrieveMediator и т.п., а используется метатег [Inject].</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/znakomstvo-s-robotlegs/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Firebug для Flash</title>
		<link>http://blog.diestro.ru/firebug-dlya-flash/</link>
		<comments>http://blog.diestro.ru/firebug-dlya-flash/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 17:16:38 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Всяко-разно]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=131</guid>
		<description><![CDATA[Поковырявшись сегодня в аддонах для Firefox нашел пару полезных расширений для Firebug, позволяющих упростить жизнь Flash-разработчику.
Само собой для работы каждого из них необходим установленный Firebug.
Итак:
Flashbug
Данное расширение позволяет увидеть все &#8220;трейсы&#8221; на новой панели &#8220;Flash Console&#8221; плагина Firebug. Плагин имеет &#8220;Policy log&#8221;, позволяющий увидеть лог сообщений безопасности Flash-плеера. Для открытого в данный момент ресурса также можно [...]]]></description>
			<content:encoded><![CDATA[<p>Поковырявшись сегодня в аддонах для Firefox нашел пару полезных расширений для <a href="https://addons.mozilla.org/ru/firefox/addon/1843" target="_blank">Firebug</a>, позволяющих упростить жизнь Flash-разработчику.<br />
Само собой для работы каждого из них необходим установленный <a href="https://addons.mozilla.org/ru/firefox/addon/1843" target="_blank">Firebug</a>.<br />
Итак:</p>
<p><a href="https://addons.mozilla.org/ru/firefox/addon/14465" target="_blank"><strong>Flashbug</strong></a><br />
Данное расширение позволяет увидеть все &#8220;трейсы&#8221; на новой панели &#8220;Flash Console&#8221; плагина Firebug. Плагин имеет &#8220;Policy log&#8221;, позволяющий увидеть лог сообщений безопасности Flash-плеера. Для открытого в данный момент ресурса также можно увидеть сохраненные Shared objects. Flashbug  так же дает возможность увидеть отсылаемые данные AMF в панели Net (Сеть):</p>
<div id="attachment_136" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.diestro.ru/wp-content/uploads/2010/01/amf1.jpg" target="_blank"><img class="size-medium wp-image-136" title="amf" src="http://blog.diestro.ru/wp-content/uploads/2010/01/amf1-300x114.jpg" alt="AMF в Firebug" width="300" height="114" /></a><p class="wp-caption-text">AMF в Firebug</p></div>
<p>Для своей работы требует debug версии Flash-плеера.<br />
На <a href="http://blog.coursevector.com/flashbug" target="_blank">сайте автора</a> можно подробнее почитать о расширении. Но почему то кажется что активность автора спала и доработку своего детища он отложил в долгий ящик. Будем надеяться на лучшее. Тем не менее это достойная замена <a href="https://addons.mozilla.org/ru/firefox/addon/3469">FlashTracer&#8217;у</a>, которым я пользовался до этого.</p>
<p><strong><a href="https://addons.mozilla.org/ru/firefox/addon/55979" target="_blank">FireFlash</a></strong><br />
Посредством FireFlash Console API позволяет отображать  объекты, массивы, XML и другие данные через Firebug console. Очень удобное и мощное средство для дебага и логинга. Позволяет группировать выдаваемые сообщения, есть механизмы запуска и остановки таймера для определения времени работы скрипта. На <a href="http://www.actionscript-flash-guru.com/blog/21-fireflash-firebug-console-for-flash" target="_blank">сайте автора</a> расширения есть подробное описание API, примеры и видео помогающее понять как это работает.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/firebug-dlya-flash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ложное срабатывание MOUSE_MOVE на Stage в MacOS</title>
		<link>http://blog.diestro.ru/mouse_move-na-stage-v-mac-os/</link>
		<comments>http://blog.diestro.ru/mouse_move-na-stage-v-mac-os/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 06:26:57 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=117</guid>
		<description><![CDATA[Эх, где же та самая кроссплатформенность.
Разрабатываю свои проекты я под Windows, поэтому для отлавливания бага, проявляющегося только под MacOS пришлось заимствовать макбук.
Выяснилось что Flash-приложение открытое в  любом из браузеров подвисает во время потери фокуса самим браузером (переключение на другое приложение). Причина зависания &#8211; в момент потери фокуса приложением, содержащим Flash-контент, на Stage флэшки приходит [...]]]></description>
			<content:encoded><![CDATA[<p>Эх, где же та самая кроссплатформенность.</p>
<p>Разрабатываю свои проекты я под Windows, поэтому для отлавливания бага, проявляющегося только под MacOS пришлось заимствовать макбук.</p>
<p>Выяснилось что Flash-приложение открытое в  любом из браузеров подвисает во время потери фокуса самим браузером (переключение на другое приложение). Причина зависания &#8211; в момент потери фокуса приложением, содержащим Flash-контент, на Stage флэшки приходит событие MOUSE_MOVE, содержащее какие-то немыслимые координаты курсора (x:-100500,y:-100500). Соответственно подвешенный на это событие обработчик, занимающийся отрисовкой шлейфа мыши, входил в безумно длинный цикл и Flash-приложение подвисало.</p>
<p>Еще раз повторюсь это происходит только под MacOS, под Windows &#8220;ложного&#8221; срабатывания MOUSE_MOVE не происходит.</p>
<p>Будьте внимательны при обработке данного события. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/mouse_move-na-stage-v-mac-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
