<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Блог Diestro</title>
	
	<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>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/diestro" /><feedburner:info uri="diestro" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Доступна русскоязычная документация для Flash Builder 4</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/W5k8CzGyt6o/</link>
		<comments>http://blog.diestro.ru/rus-doc-flash-builder-4/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 11:41:57 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Flash Builder 4]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=246</guid>
		<description><![CDATA[С выпуском релизной версии Flash Builder 4 на сайте Adobe появилась русскоязычная документация по Flash Builder. К сожалению переведено не все, но справочник уже можно использовать.
]]></description>
			<content:encoded><![CDATA[<p>С выпуском <a href="http://www.adobe.com/products/flex/" target="_blank">релизной версии Flash Builder 4</a> на сайте Adobe появилась <a href="http://help.adobe.com/ru_RU/Flex/4.0/AccessingData/WS4bebcd66a74275c31ce8701d123721e6814-8000.html" target="_blank">русскоязычная документация</a> по Flash Builder. К сожалению переведено не все, но <a href="http://help.adobe.com/ru_RU/AS3LCR/Flex_4.0/index.html" target="_blank">справочник</a> уже можно использовать.</p>
<img src="http://feeds.feedburner.com/~r/diestro/~4/W5k8CzGyt6o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/rus-doc-flash-builder-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/rus-doc-flash-builder-4/</feedburner:origLink></item>
		<item>
		<title>Релиз Adobe Flash Builder 4</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/18CnFQD9kvk/</link>
		<comments>http://blog.diestro.ru/reliz-adobe-flash-builder-4/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 08:18:20 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Flash Builder 4]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=242</guid>
		<description><![CDATA[Вышел Adobe Flash Builder 4. Уже несколько дней упорно  грызу гранит бета-версии. А тут такое счастье привалило. Теперь ждем релиз Adobe Catalyst.
]]></description>
			<content:encoded><![CDATA[<p>Вышел <a href="http://www.adobe.com/products/flex/" target="_blank">Adobe Flash Builder 4</a>. Уже несколько дней упорно  грызу гранит бета-версии. А тут такое счастье привалило. Теперь ждем релиз Adobe Catalyst.</p>
<img src="http://feeds.feedburner.com/~r/diestro/~4/18CnFQD9kvk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/reliz-adobe-flash-builder-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/reliz-adobe-flash-builder-4/</feedburner:origLink></item>
		<item>
		<title>Плагин Sourcemate для Flash Builder 4</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/WvyxOlXecxM/</link>
		<comments>http://blog.diestro.ru/sourcemate_dlya_flash_builder_4/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 12:27:22 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Flash Builder 4]]></category>
		<category><![CDATA[SourceMate]]></category>
		<category><![CDATA[сниппеты]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=231</guid>
		<description><![CDATA[
Отличная новость от Lee Brimelow! Flash Builder 4 еще в бете, а для него уже существует плагин, дополняющий его тем чего нам так не хватало &#8211; сниппеты, рефакторинг, генерация геттеров/сеттеров, автокомплит метатегов и др. Именно из-за нехватки подобных вещей многие использовали FDT либо вместо, либо вместе с Flex Builder, что доставляло ряд неудобств.
Новый плагин называется [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.elementriver.com/sourcemate/" target="_blank"><img class="alignnone" src="http://blog.diestro.ru/wp-content/images/sourcemate.jpg" alt="Sourcemate" width="387" height="65" /></a><br />
Отличная <a href="http://theflashblog.com/?p=1830">новость от Lee Brimelow</a>! Flash Builder 4 еще в бете, а для него уже существует плагин, дополняющий его тем чего нам так не хватало &#8211; сниппеты, рефакторинг, генерация геттеров/сеттеров, автокомплит метатегов и др. Именно из-за нехватки подобных вещей многие использовали FDT либо вместо, либо вместе с Flex Builder, что доставляло ряд неудобств.</p>
<p>Новый плагин называется <a href="http://www.elementriver.com/sourcemate/">SourceMate</a>. Стоит денег. 30 дней можно пощупать бесплатно. Ставится через <strong>Help &gt; Install New Software</strong> -&gt; <strong>Search for new features to instal</strong>l -&gt; <strong>Next</strong> -&gt; <strong>New remote site</strong> -&gt; указываем url: <strong>http://updates.elementriver.com/sourcemate/v1</strong> устанавливаем, щупаем.</p>
<p>Не скажу что плагин, в том виде в котором он есть сейчас, богат функционалом, но то что появились сниппеты в виде темплейтов кода, а как мне кажется это наиболее удобный способ работы со сниппетами, это просто потрясающе.</p>
<img src="http://feeds.feedburner.com/~r/diestro/~4/WvyxOlXecxM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/sourcemate_dlya_flash_builder_4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/sourcemate_dlya_flash_builder_4/</feedburner:origLink></item>
		<item>
		<title>Знакомство с MVCS фреймворком Robotlegs</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/N9lpsmxX_Wg/</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>
<img src="http://feeds.feedburner.com/~r/diestro/~4/N9lpsmxX_Wg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/znakomstvo-s-robotlegs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/znakomstvo-s-robotlegs/</feedburner:origLink></item>
		<item>
		<title>Firebug для Flash</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/mqWE3BgaXGc/</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>
<img src="http://feeds.feedburner.com/~r/diestro/~4/mqWE3BgaXGc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/firebug-dlya-flash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/firebug-dlya-flash/</feedburner:origLink></item>
		<item>
		<title>Ложное срабатывание MOUSE_MOVE на Stage в MacOS</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/q3YvA0f8sUk/</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>
<img src="http://feeds.feedburner.com/~r/diestro/~4/q3YvA0f8sUk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/mouse_move-na-stage-v-mac-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/mouse_move-na-stage-v-mac-os/</feedburner:origLink></item>
		<item>
		<title>Видеоуроки “Flex 4 beta за неделю”</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/yxKZ7TgUy3g/</link>
		<comments>http://blog.diestro.ru/videouroki-flex-4-beta-za-nedelyu/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 19:49:43 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[Flex Builder]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=113</guid>
		<description><![CDATA[Отличный видео-материал от Adobe: Flex 4 beta in a Week.
]]></description>
			<content:encoded><![CDATA[<p>Отличный видео-материал от Adobe: <a href="http://www.adobe.com/devnet/flex/videotraining/flex4beta/" target="_blank">Flex 4 beta in a Week</a>.</p>
<img src="http://feeds.feedburner.com/~r/diestro/~4/yxKZ7TgUy3g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/videouroki-flex-4-beta-za-nedelyu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/videouroki-flex-4-beta-za-nedelyu/</feedburner:origLink></item>
		<item>
		<title>Сниппеты во Flex</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/Cc7Nec42Pz0/</link>
		<comments>http://blog.diestro.ru/snippety-vo-flex/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 13:50:34 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[Flex Builder]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=97</guid>
		<description><![CDATA[Недавно для себя сделал небольшое открытие, что со сниппетами (Snippets), называемых еще шаблонами кода,  во Flex оказывается все не совсем так и плохо.

Lee Brimelow в одном из своих постов о том как сделать Flex удобнее рассказал как минимум о трёх вариантах подключения сниппетов.
Eclipse Monkey
О том что это за зверь, и как использовать Eclipse Monkey для [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно для себя сделал небольшое открытие, что со сниппетами (Snippets), называемых еще шаблонами кода,  во Flex оказывается все не совсем так и плохо.</p>
<p><span id="more-97"></span></p>
<p><a href="http://theflashblog.com/" target="_blank">Lee Brimelow</a> в одном из своих постов о том как сделать Flex удобнее рассказал как минимум о <a href="http://theflashblog.com/?p=484" target="_blank">трёх вариантах</a> подключения сниппетов.</p>
<p><strong>Eclipse Monkey</strong><br />
О том что это за зверь, и как использовать Eclipse Monkey для сниппетов в частности, было написано <a href="http://yzh44yzh.com/blog/eclipse_monkey_for_flex" target="_blank">здесь</a>. И даже существует русскоязычный <a href="http://code.google.com/p/monkey-for-flex/" target="_blank">проект</a> на GoogleCode, в котором предлагается складывать скрипты для Eclipse Monkey.</p>
<p><a href="http://www.youtube.com/watch?v=z9aL_OZzRJk">На этом видео</a>, кстати, можно посмотреть насколько эффектно и эффективно можно  кодить, используя Eclipse Monkey.</p>
<p>Все в Eclipse Monkey хорошо и возможности (выходящие далеко за рамки создания сниппетов)  и большое количество уже готовых скриптов для него. Не хорошо только то, что для того чтобы реализовать что-то новое под Eclipse Monkey нужно кодить. На что может не хватать ни времени, ни желания. Ну и еще один недостаток – он не работает в mxml редакторе.</p>
<p><strong>Snip Tree View</strong><br />
Данная панелька присутствует в плагине CFEclipse.  И позволяет используя заданную горячую клавишу превращать определенную последовательность символов в нужный разработчику кусок кода.</p>
<p>Устанавливается плагин CFEclipse через <em>Help &gt; Software Updates &gt;Findand install…</em> с сайта <em>http://www.cfeclipse.org/update</em> . Для того чтобы воспользоваться панелькой нужно зайти  <em>Window &gt; Other Views…</em> Затем найти Snap Tree View в ветке CFML.<br />
Горячую клавишу можно назначить зайдя в <em>Windows &gt; Prefernces…</em> А далее как показано на рисунке:</p>
<p><a href="http://blog.diestro.ru/wp-content/uploads/2009/03/preff.png"><img class="alignnone size-medium wp-image-99" title="Настройка горячей клавиши для Snip Panel" src="http://blog.diestro.ru/wp-content/uploads/2009/03/preff-300x158.png" alt="" width="300" height="158" /></a></p>
<p>Недостатков было найдено достаточно много:</p>
<ul>
<li>для работы плагина обязательно должна быть видна панель плагина с кнопками,  коих очень много:   <a href="http://blog.diestro.ru/wp-content/uploads/2009/03/buttons.png"><img class="size-medium wp-image-102 aligncenter" title="buttons" src="http://blog.diestro.ru/wp-content/uploads/2009/03/buttons-300x34.png" alt="" width="300" height="34" /></a> Частично проблема решается замещением всех этих кнопок одной вот <a href="http://theflashblog.com/plugins/TheFlashBlog_1.0.0.zip">этой</a> путем копирования содержимого архива в папку plugins. Остальные кнопки нужно убрать ручками через <em>Customize Perspective…</em>;</li>
<li>не работает в mxml редакторе;</li>
<li>функционал очень сильно ограничен. Можно задать только текст вставляемый ДО и ПОСЛЕ курсора.</li>
</ul>
<p><strong>WST Snippets Panel</strong><br />
Позволяет создать сложные шаблоны кода на основе указания необходимых переменных в появляющемся диалоговом окне.</p>
<p>Установить можно весь пакет Web Standart Tools, в состав которого входит эта панелька, через <em>Help &gt; Software Updates &gt;Findand install…</em>, далее выбрать <em>Web Tools Platform (WTP) Updates</em>, затем через Europa Discovery Site найти и поставить пакет WST и все от чего он зависит.  А можно сделать проще &#8211; просто кинуть в папку plugins этот <a href="http://blog.diestro.ru/wp-content/uploads/2009/03/orgeclipsewstcommonsnippets_11101v200705302225.jar">файлик</a>.</p>
<p>После установки панель можно найти в <em>Window &gt; Other Views…</em>, далее <em>General &gt; Snippets</em><br />
Создавать шаблоны кода в этой панели несложно. На рисунке показан созданный мною шаблон кода для генерации геттеров и сеттеров:</p>
<p><a href="http://blog.diestro.ru/wp-content/uploads/2009/03/insert_get_set_in_wst.png"><img class="alignnone size-medium wp-image-101" title="insert_get_set_in_wst" src="http://blog.diestro.ru/wp-content/uploads/2009/03/insert_get_set_in_wst-300x230.png" alt="" width="300" height="230" /></a></p>
<p>Теперь для того чтобы вставить шаблон в код необходимо дважды кликнуть по необходимому шаблону в панели Snippets и в появившемся окне указать PROPERTY_NAME и PROPERTY_TYPE:</p>
<p><a href="http://blog.diestro.ru/wp-content/uploads/2009/03/insert_in_code.png"><img class="alignnone size-medium wp-image-103" title="insert_in_code" src="http://blog.diestro.ru/wp-content/uploads/2009/03/insert_in_code-300x205.png" alt="" width="300" height="205" /></a></p>
<p>Недостатки тоже присутствуют:</p>
<ul>
<li>нету горячих клавиш. Вставлять шаблоны можно только с помощью клика мыши;</li>
<li>при вставке шаблона не учитывает  первоначальные табы, поэтому после вставки код приходится двигать.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/diestro/~4/Cc7Nec42Pz0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/snippety-vo-flex/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/snippety-vo-flex/</feedburner:origLink></item>
		<item>
		<title>Самоизобретающийся велосипед</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/CZZaCKnbCV4/</link>
		<comments>http://blog.diestro.ru/samoizobretayushhijsya-velosiped/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 15:39:01 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[Всяко-разно]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=95</guid>
		<description><![CDATA[Оказывается бесконечно можно смотреть не только на то как горит огонь и работает кто-то другой, а еще и как самоизобретается велосипед.
]]></description>
			<content:encoded><![CDATA[<p>Оказывается бесконечно можно смотреть не только на то как горит огонь и работает кто-то другой, а еще и как <a href="http://www.wreck.devisland.net/ga/">самоизобретается</a> велосипед.</p>
<img src="http://feeds.feedburner.com/~r/diestro/~4/CZZaCKnbCV4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/samoizobretayushhijsya-velosiped/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/samoizobretayushhijsya-velosiped/</feedburner:origLink></item>
		<item>
		<title>Adobe выпустила тестовую версию компилятора Alchemy</title>
		<link>http://feedproxy.google.com/~r/diestro/~3/akjx2Rc8Hic/</link>
		<comments>http://blog.diestro.ru/adobe-kompilyator-alchemy/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 15:19:25 +0000</pubDate>
		<dc:creator>Diestro</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://blog.diestro.ru/?p=87</guid>
		<description><![CDATA[Как пишут на OpenNews:
Компания Adobe выпустила тестовую версию компилятора alchemy, предназначенного для сборки программ, написанных на языках Си и Си++, в байткод AS3, пригодный для выполнения в виртуальной машине ActionScript Virtual Machine (AVM2). Результатом сборки является SWF или SWC файл, пригодный для выполнения в Flash Player 10 или Adobe AIR 1.5. Разработка базируется на использовании [...]]]></description>
			<content:encoded><![CDATA[<p>Как пишут на <a href="http://www.opennet.ru/opennews/art.shtml?num=19008"  target="_blank">OpenNews</a>:</p>
<blockquote><p>Компания Adobe выпустила тестовую версию компилятора <a href="http://labs.adobe.com/technologies/alchemy/" target="_blank">alchemy</a>, предназначенного для сборки программ, написанных на языках Си и Си++, в байткод AS3, пригодный для выполнения в виртуальной машине ActionScript Virtual Machine (AVM2). Результатом сборки является SWF или SWC файл, пригодный для выполнения в Flash Player 10 или Adobe AIR 1.5. Разработка базируется на <a href="http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler.pdf" target="_blank">использовании</a> открытого компилятора LLVM (Low Level Virtual Machine).</p>
<p>Основная цель проекта alchemy &#8211; разработка на языке Си/Си++ универсальных <a href="http://labs.adobe.com/wiki/index.php/Alchemy:Libraries" target="_blank">библиотек функций</a>, с реализацией требующих интенсивных вычислений операций, таких как кодирование аудио/видео, преобразование данных, парсинг XML, криптографические операции, симулирование физических процессов. При написании таких библиотек на языке Си/Си++ производительность, при выполнении в виртуальной машине AVM2 будет значительно выше, чем при их реализации на ActionScript 3.0, но все же в 2-10 раз медленнее чем при станратной компиляции в машинный код.</p>
<p>Для работы программ доступен POSIX совместимый API, а также специальная мультимедийная библиотека, предоставляющая интерфейс к функциям технологии Flash. Для прямого доступа к памяти из Си программ, был разработан специальный режим эмуляции, осуществляющий маппинг блоков памяти внутри VM, немного замедляющий работу программ. Исходные тексты новой системы планируется представить под одной из открытых лицензий. В настоящее время <a href="http://labs.adobe.com/downloads/alchemy.html" target="_blank">представлены</a> только бинарные сборки alchemy для Linux, Mac OS X и Windows.</p>
<p>Принцип работы компилятора:</p>
<ul>
<li>При помощи LLVM, Си программа преобразуется в набор инструкций для абстрактной виртуальной машины;</li>
<li>LLVM инструкции преобразуются в объектный код, специфичный для виртуальной машины, выполняющей ActionScript;</li>
<li>ActionScript автоматически компилируется в байткод пригодный для запуска в Adobe Flash. Байткод в дальнейшем может быть преобразован в машинные инструкции при помощи JIT-компилятора из состава проекта Tamarin.</li>
</ul>
<p>Первый раз технология была представлена в прошлом году на выставке MAX 2007, тогда специалисты из Adobe продемонстрировали выполнения игры Quake в окне браузера. Позднее для выполнения в виртуальной машине Flash удалось адаптировать интерпретаторы языков программирования Python, Lua, Ruby,Perl и эмулятор платформы Nintendo.</p></blockquote>
<p><a href="http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Getting_Started" target="_blank">Здесь документация</a>.</p>
<p><a href="http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Developing_with_Alchemy" target="_blank">API здесь</a></p>
<img src="http://feeds.feedburner.com/~r/diestro/~4/akjx2Rc8Hic" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.diestro.ru/adobe-kompilyator-alchemy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.diestro.ru/adobe-kompilyator-alchemy/</feedburner:origLink></item>
	</channel>
</rss>
