<?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"
	>

<channel>
	<title>Написаному не верить</title>
	<atom:link href="http://pil.alnet.com.ua/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://pil.alnet.com.ua</link>
	<description>.NET, Flex, Air, Software development, и просто жизнь )</description>
	<pubDate>Fri, 27 Aug 2010 13:15:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Flex Builder 3 редактирование XML</title>
		<link>http://pil.alnet.com.ua/?p=171</link>
		<comments>http://pil.alnet.com.ua/?p=171#comments</comments>
		<pubDate>Wed, 23 Jun 2010 15:13:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Flex, Air]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<category><![CDATA[XML editor]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=171</guid>
		<description><![CDATA[Увы, с билдером не поставляется. Рекомендую маленький и бесплатный плагин для Eclipce:
http://editorxml.sourceforge.net/download.html.
Установка: скопировать в папку {Program Files}/Adobe/Flex Builder 3/Plugins, перезапустить билдер.
]]></description>
			<content:encoded><![CDATA[<p>Увы, с билдером не поставляется. Рекомендую маленький и бесплатный плагин для Eclipce:<br />
http://editorxml.sourceforge.net/download.html.<br />
Установка: скопировать в папку {Program Files}/Adobe/Flex Builder 3/Plugins, перезапустить билдер.</p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=171</wfw:commentRss>
		</item>
		<item>
		<title>The CSS type selector {0} was not processed because the type was not used in the application</title>
		<link>http://pil.alnet.com.ua/?p=169</link>
		<comments>http://pil.alnet.com.ua/?p=169#comments</comments>
		<pubDate>Tue, 30 Mar 2010 09:16:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Flex, Air]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=169</guid>
		<description><![CDATA[При разработке модульных приложений, когда один CSS файл используется для стилизации всего, либо когда подключается какая-то общая тема -theme, очень часто можно увидеть Warnings подобного вида:
The CSS type selector {0} was not processed because the type was not used in the application
И если например затеян какой-нибудь рефакторинг с применением [Deprecated] эти warnings кажутся незначительными и [...]]]></description>
			<content:encoded><![CDATA[<p>При разработке модульных приложений, когда один CSS файл используется для стилизации всего, либо когда подключается какая-то общая тема -theme, очень часто можно увидеть Warnings подобного вида:<br />
<strong>The CSS type selector {0} was not processed because the type was not used in the application</strong><br />
И если например затеян какой-нибудь рефакторинг с применением [Deprecated] эти warnings кажутся незначительными и мешающими. Победи врага ключем компилятора:<br />
<strong>-show-unused-type-selector-warnings=false</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=169</wfw:commentRss>
		</item>
		<item>
		<title>My Team</title>
		<link>http://pil.alnet.com.ua/?p=166</link>
		<comments>http://pil.alnet.com.ua/?p=166#comments</comments>
		<pubDate>Wed, 17 Feb 2010 21:10:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Ни туда ни сюда]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=166</guid>
		<description><![CDATA[Наша команда, наши проекты глазами Нью Йорка:

]]></description>
			<content:encoded><![CDATA[<p>Наша команда, наши проекты глазами Нью Йорка:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/qGmL5rxy9gw&amp;hl=ru_RU&amp;fs=1&amp;" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/qGmL5rxy9gw&amp;hl=ru_RU&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=166</wfw:commentRss>
		</item>
		<item>
		<title>Флеш ролик и пути</title>
		<link>http://pil.alnet.com.ua/?p=163</link>
		<comments>http://pil.alnet.com.ua/?p=163#comments</comments>
		<pubDate>Tue, 16 Feb 2010 15:22:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET development]]></category>

		<category><![CDATA[Flex, Air]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=163</guid>
		<description><![CDATA[Вопрос: как задеплоить ролик в папку /sub1/sub2/sub3, но для ролика корнем оставался корень сайта?
Ответ: Использовать параметр base в object-embed (пример под катом для ASP.NET)

&#60;object classid=&#8221;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&#8243;
id=&#8221;MyFlexApp&#8221; width=&#8221;800&#8243; height=&#8221;600&#8243;
codebase=&#8221;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&#8221;&#62;
&#60;param name=&#8221;movie&#8221; value=&#8217;&#60;%= Page.ResolveUrl(&#8221;~/MyFlexApp.swf&#8221;)%&#62;&#8217; /&#62;
&#60;param name=&#8221;quality&#8221; value=&#8221;high&#8221; /&#62;
&#60;param name=&#8221;bgcolor&#8221; value=&#8221;#869ca7&#8243; /&#62;
&#60;param name=&#8221;allowScriptAccess&#8221; value=&#8221;*&#8221; /&#62;
&#60;param name=&#8221;wmode&#8221; value=&#8221;opaque&#8221; /&#62;
&#60;param name=&#8221;base&#8221; value=&#8217;&#60;%= Page.ResolveUrl(&#8221;~&#8221;)%&#62;&#8217; /&#62;
&#60;embed src=&#8217;&#60;%= Page.ResolveUrl(&#8221;~/MyFlexApp.swf&#8221;)%&#62;&#8217; quality=&#8221;high&#8221; bgcolor=&#8221;#869ca7&#8243;
width=&#8221;800&#8243; height=&#8221;600&#8243; name=&#8221;MyFlexApp&#8221; align=&#8221;middle&#8221;
play=&#8221;true&#8221;
loop=&#8221;false&#8221;
quality=&#8221;high&#8221;
wmode=&#8221;opaque&#8221;
base=&#8217;&#60;%= Page.ResolveUrl(&#8221;~&#8221;)%&#62;&#8217;
allowScriptAccess=&#8221;*&#8221;
type=&#8221;application/x-shockwave-flash&#8221;
pluginspage=&#8221;http://www.adobe.com/go/getflashplayer&#8221;&#62;
&#60;/embed&#62;
&#60;/object&#62;
* [...]]]></description>
			<content:encoded><![CDATA[<p>Вопрос: как задеплоить ролик в папку /sub1/sub2/sub3, но для ролика корнем оставался корень сайта?</p>
<p>Ответ: Использовать параметр base в object-embed (пример под катом для ASP.NET)</p>
<p><span id="more-163"></span></p>
<blockquote><p><code><span style="font-family: Courier New; color: black; font-size: x-small;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">object</span> <span style="color: #ff0000;">classid</span><span style="color: #0000ff;">=&#8221;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&#8243;</span><br />
<span style="color: #ff0000;">id</span><span style="color: #0000ff;">=&#8221;MyFlexApp&#8221;</span> <span style="color: #ff0000;">width</span><span style="color: #0000ff;">=&#8221;800&#8243;</span> <span style="color: #ff0000;">height</span><span style="color: #0000ff;">=&#8221;600&#8243;</span><br />
<span style="color: #ff0000;">codebase</span><span style="color: #0000ff;">=&#8221;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&#8221;</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;movie&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8217;&lt;%= Page.ResolveUrl(&#8221;~/MyFlexApp.swf&#8221;)%&gt;&#8217;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;quality&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8221;high&#8221;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;bgcolor&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8221;#869ca7&#8243;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;allowScriptAccess&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8221;*&#8221;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;wmode&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8221;opaque&#8221;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;base&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8217;&lt;%= Page.ResolveUrl(&#8221;~&#8221;)%&gt;&#8217;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">embed</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">=&#8217;&lt;%= Page.ResolveUrl(&#8221;~/MyFlexApp.swf&#8221;)%&gt;&#8217;</span> <span style="color: #ff0000;">quality</span><span style="color: #0000ff;">=&#8221;high&#8221;</span> <span style="color: #ff0000;">bgcolor</span><span style="color: #0000ff;">=&#8221;#869ca7&#8243;</span><br />
<span style="color: #ff0000;">width</span><span style="color: #0000ff;">=&#8221;800&#8243;</span> <span style="color: #ff0000;">height</span><span style="color: #0000ff;">=&#8221;600&#8243;</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;MyFlexApp&#8221;</span> <span style="color: #ff0000;">align</span><span style="color: #0000ff;">=&#8221;middle&#8221;</span><br />
<span style="color: #ff0000;">play</span><span style="color: #0000ff;">=&#8221;true&#8221;</span><br />
<span style="color: #ff0000;">loop</span><span style="color: #0000ff;">=&#8221;false&#8221;</span><br />
<span style="color: #ff0000;">quality</span><span style="color: #0000ff;">=&#8221;high&#8221;</span><br />
<span style="color: #ff0000;">wmode</span><span style="color: #0000ff;">=&#8221;opaque&#8221;</span><br />
<span style="color: #ff0000;">base</span><span style="color: #0000ff;">=&#8217;&lt;%= Page.ResolveUrl(&#8221;~&#8221;)%&gt;&#8217;</span><br />
<span style="color: #ff0000;">allowScriptAccess</span><span style="color: #0000ff;">=&#8221;*&#8221;</span><br />
<span style="color: #ff0000;">type</span><span style="color: #0000ff;">=&#8221;application/x-shockwave-flash&#8221;</span><br />
<span style="color: #ff0000;">pluginspage</span><span style="color: #0000ff;">=&#8221;http://www.adobe.com/go/getflashplayer&#8221;</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">embed</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">object</span><span style="color: #0000ff;">&gt;</span></span></code></p>
<p><span style="color: gray; font-size: xx-small;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="color: gray; font-size: xx-small;">Source Code Highlighter</span></a>.</span></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=163</wfw:commentRss>
		</item>
		<item>
		<title>mx.controls.ComboBox vs System.Windows.Forms.ComboBox</title>
		<link>http://pil.alnet.com.ua/?p=161</link>
		<comments>http://pil.alnet.com.ua/?p=161#comments</comments>
		<pubDate>Tue, 09 Feb 2010 18:07:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Flex, Air]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=161</guid>
		<description><![CDATA[У Flex разработчиков существует распространенная проблемма выставить какой-то выбранный элемент в ComboBox. Фреймворк представляет 2 способа, использовать selectedIndex и selectedItem. Для того чтобы выставить selectedIndex разработчику приходится крутить цикл с целью найти среди всех доступных элементов коллекции подходящий с целью поиска его индекса. С selectedItem вступает в игру фактор сравнения ссылочных данных, выбранный елемент просто [...]]]></description>
			<content:encoded><![CDATA[<p>У Flex разработчиков существует распространенная проблемма выставить какой-то выбранный элемент в ComboBox. Фреймворк представляет 2 способа, использовать selectedIndex и selectedItem. Для того чтобы выставить selectedIndex разработчику приходится крутить цикл с целью найти среди всех доступных элементов коллекции подходящий с целью поиска его индекса. С selectedItem вступает в игру фактор сравнения ссылочных данных, выбранный елемент просто может отсутсвовать в коллекции доступных данных.</p>
<p>Если взять в учет, что почти все данные которые мы биндим в комбобоксы имеют первичные ключи, и мы не хотим реализовывать нашими сущностями IIUID, то довольно удобно использовать следующий класс, позволяющий конфигурировать поле с первичным ключем класса и получать-устанавливать выбранный елемент по первичному ключу:</p>
<p><span id="more-161"></span></p>
<blockquote><p><code><span style="font-family: Courier New; color: black; font-size: x-small;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> MyComboBox extends ComboBox<br />
{<br />
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> MyComboBox()<br />
{<br />
super();<br />
}</p>
<p><span style="color: #008000;">/**</span><br />
<span style="color: #008000;"> * like ValueMember in .NET System.Windows.Forms.ComboBox</span><br />
<span style="color: #008000;"> */</span><br />
[Bindable]<br />
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> idField:String;</p>
<p><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> get selectedId():Object {<br />
<span style="color: #0000ff;">if</span>(idField == <span style="color: #0000ff;">null</span> || selectedItem == <span style="color: #0000ff;">null</span>) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">null</span>;</p>
<p><span style="color: #0000ff;">if</span>(selectedItem.hasOwnProperty(idField)) {<br />
<span style="color: #0000ff;">return</span> selectedItem[idField];<br />
}<br />
<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">null</span>;<br />
}</p>
<p><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> set selectedId(value:Object):<span style="color: #0000ff;">void</span> {<br />
<span style="color: #0000ff;">if</span>(idField == <span style="color: #0000ff;">null</span> || idField == <span style="color: #0000ff;">null</span>) <span style="color: #0000ff;">return</span>;<br />
<span style="color: #0000ff;">for</span> each(<span style="color: #0000ff;">var</span> item:Object <span style="color: #0000ff;">in</span> collection) {<br />
<span style="color: #0000ff;">if</span>(item.hasOwnProperty(idField) &amp;&amp; item[idField] == value) {<br />
selectedItem = item;<br />
<span style="color: #0000ff;">break</span>;<br />
}<br />
}<br />
}</p>
<p>}</span></code></p>
<p><span style="color: gray; font-size: xx-small;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="color: gray; font-size: xx-small;">Source Code Highlighter</span></a>.</span></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=161</wfw:commentRss>
		</item>
		<item>
		<title>Как в Днепропетровск пришла зима.</title>
		<link>http://pil.alnet.com.ua/?p=159</link>
		<comments>http://pil.alnet.com.ua/?p=159#comments</comments>
		<pubDate>Fri, 22 Jan 2010 10:19:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Ни туда ни сюда]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=159</guid>
		<description><![CDATA[Давно такого не было. Сегодня не смог уехать на работу.

]]></description>
			<content:encoded><![CDATA[<p>Давно такого не было. Сегодня не смог уехать на работу.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/xB-sChEsupI&#038;hl=ru_RU&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/xB-sChEsupI&#038;hl=ru_RU&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=159</wfw:commentRss>
		</item>
		<item>
		<title>Flex Fonts embedding</title>
		<link>http://pil.alnet.com.ua/?p=155</link>
		<comments>http://pil.alnet.com.ua/?p=155#comments</comments>
		<pubDate>Tue, 05 Jan 2010 10:29:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Flex, Air]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=155</guid>
		<description><![CDATA[Часто флекс разработчики стоят перед дилемой: использовать или не использовать внедрение шрифтов. Использование внедренных шрифтов дает много выгод, таких как: не нужно иметь установленный шрифт на клиентской машине, можно использовать сглаживания, прозрачности, повороты и т д. Полный список бенефитов по ссылке выше. Недостаток один - сильно увеличивается размер приложения. В этой статье я постараюсь рассказать [...]]]></description>
			<content:encoded><![CDATA[<p>Часто флекс разработчики стоят перед дилемой: использовать или не использовать внедрение шрифтов. Использование внедренных шрифтов дает много <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=fonts_04.html" target="_blank">выгод</a>, таких как: не нужно иметь установленный шрифт на клиентской машине, можно использовать сглаживания, прозрачности, повороты и т д. Полный список бенефитов по ссылке выше. Недостаток один - сильно увеличивается размер приложения. В этой статье я постараюсь рассказать как добится компромиса - внедрить шрифты в отдельный ролик и подгружать его приложением.</p>
<p><span id="more-155"></span></p>
<p>Для начала создадим файл fonts_to_embed.css со следующим содержимым:</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;">@font-face {<br />
src:url(<span style="color: #a31515;">&#8216;../assets/font/verdana.ttf&#8217;</span>);<br />
fontFamily: VerdanaEmbed;<br />
fontStyle: normal;<br />
fontWeight: normal;<br />
advancedAntiAliasing: <span style="color: #0000ff;">true</span>;<br />
}<br />
@font-face {<br />
src:url(<span style="color: #a31515;">&#8216;../assets/font/verdanab.ttf&#8217;</span>);<br />
fontFamily: VerdanaEmbed;<br />
fontStyle: normal;<br />
fontWeight: bold;<br />
advancedAntiAliasing: <span style="color: #0000ff;">true</span>;<br />
}<br />
@font-face {<br />
src:url(<span style="color: #a31515;">&#8216;../assets/font/verdanai.ttf&#8217;</span>);<br />
fontFamily: VerdanaEmbed;<br />
fontStyle: italic;<br />
fontWeight: normal;<br />
advancedAntiAliasing: <span style="color: #0000ff;">true</span>;<br />
}</span></code></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>Более подробная информация по синтаксису внедрения шрифтов <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=fonts_04.html" target="_blank">здесь</a>. mxmlc умеет компилировать css, пишем билд скрипт:</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">project</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;Test&#8221;</span> <span style="color: #ff0000;">basedir</span><span style="color: #0000ff;">=&#8221;.&#8221;</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property</span> <span style="color: #ff0000;">file</span><span style="color: #0000ff;">=&#8221;build.properties&#8221;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;FLEX_HOME&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8221;${flex.home}&#8221;</span><span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">taskdef</span> <span style="color: #ff0000;">resource</span><span style="color: #0000ff;">=&#8221;flexTasks.tasks&#8221;</span> <span style="color: #ff0000;">classpath</span><span style="color: #0000ff;">=&#8221;${flex.home}/ant/lib/flexTasks.jar&#8221;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;mxmlc.bin&#8221;</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">=&#8221;${flex.home}/bin/mxmlc.exe&#8221;</span> <span style="color: #0000ff;">/&gt;</span></span></code></p>
<p><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">=&#8221;main&#8221;</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">exec</span> <span style="color: #ff0000;">executable</span><span style="color: #0000ff;">=&#8221;${mxmlc.bin}&#8221;</span> <span style="color: #ff0000;">failonerror</span><span style="color: #0000ff;">=&#8221;true&#8221;</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg</span> <span style="color: #ff0000;">line</span><span style="color: #0000ff;">=&#8221;/css/fonts_to_embed.css&#8221;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg</span> <span style="color: #ff0000;">line</span><span style="color: #0000ff;">=&#8221;-output ${deploy.dir}/MyFontsRuntime.swf&#8221;</span> <span style="color: #0000ff;">/&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">exec</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">project</span><span style="color: #0000ff;">&gt;</span></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>Выполняем, получаем MyFontsRuntime.swf, осталось его подгрузить:</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> init():<span style="color: #0000ff;">void</span> {<br />
<span style="color: #0000ff;">var</span> fontsLoader:IEventDispatcher = StyleManager.loadStyleDeclarations(<span style="color: #a31515;">&#8216;MyFontsRuntime.swf&#8217;</span>);<br />
fontsLoader.addEventListener(StyleEvent.COMPLETE, onFontsLoadingComplete);<br />
}</span></code></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>Все. Шрифты внедренные, размер приложения не увеличился.</p>
<p>PS. Грузить шрифты лучше всего до того, как приложение начнет отрисовываться.</p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=155</wfw:commentRss>
		</item>
		<item>
		<title>WebOrb.NET &#038; server to client invocation</title>
		<link>http://pil.alnet.com.ua/?p=145</link>
		<comments>http://pil.alnet.com.ua/?p=145#comments</comments>
		<pubDate>Wed, 21 Oct 2009 13:08:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET development]]></category>

		<category><![CDATA[Flex, Air]]></category>

		<category><![CDATA[Air]]></category>

		<category><![CDATA[WebOrb]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=145</guid>
		<description><![CDATA[Хм.. даже не знаю с чего начать  Ладно, часто возникает задача, когда сервер должен извещать клиента о чем-то важном и полезном. Например - изменение состояния каких-то объектов мониторинга, готовность результатов работы какой-то длительной операции, изменение состояния других клиентов и т д.
Глобально, реализаций этого сценария 2:

ping (клиент с каким-то интервалом опрашивает сервер)
сервер сам нотифицирует клиента [...]]]></description>
			<content:encoded><![CDATA[<p>Хм.. даже не знаю с чего начать <img src='http://pil.alnet.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Ладно, часто возникает задача, когда сервер должен извещать клиента о чем-то важном и полезном. Например - изменение состояния каких-то объектов мониторинга, готовность результатов работы какой-то длительной операции, изменение состояния других клиентов и т д.</p>
<p>Глобально, реализаций этого сценария 2:</p>
<ul>
<li>ping (клиент с каким-то интервалом опрашивает сервер)</li>
<li>сервер сам нотифицирует клиента (клиент при этом должен быть подключенным)</li>
</ul>
<p>О том как реализовать 2-й сценарий для <a href="http://www.themidnightcoders.com/products/weborb-for-net/overview.html" target="_blank">WebObr.NET</a> + <a href="http://labs.adobe.com/technologies/flex/" target="_blank">Adobe Flex</a> + <a href="http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol" target="_blank">RTMP</a> речь пойдет ниже:</p>
<p><span id="more-145"></span></p>
<p>Начнем с серверной стороны. Я не буду рассказывать как создавать приложения под WebOrb, как деплоить и т д, об этом прекрасно написано в его документации, поэтому - с корабля на бал:</p>
<p>1. В веб проекте в файле Global.asax в методе Application_Start создаем RTMPServer (будет один на приложение):</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #0000ff;">var</span> config = <span style="color: #0000ff;">new</span> Weborb.Config.ORBConfig();<br />
<span style="color: #0000ff;">var</span> server = <span style="color: #0000ff;">new</span> Weborb.Messaging.RTMPServer(<span style="color: #a31515;">&#8220;MyCallBack&#8221;</span>, 2037, 500, config);<br />
server.setApplication(<span style="color: #0000ff;">this</span>);<br />
server.start();<br />
Application[ <span style="color: #a31515;">"MyCBServer"</span> ] = server;</span></code></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>2. Здесь же, не забываем его тушить:</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #0000ff;">void</span> Application_End(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">EventArgs</span> e)<br />
{<br />
<span style="color: #0000ff;">var</span> server = Application[<span style="color: #a31515;">"</span></span></code><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #a31515;">MyCBServer</span></span></code><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #a31515;">"</span>] <span style="color: #0000ff;">as</span> RTMPServer;<br />
<span style="color: #0000ff;">if</span>( server != <span style="color: #0000ff;">null</span> ) server.shutdown();<br />
}</span></code></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>3. В веб сайте, в папке Applications, создаем новую папку: MyCallBack, куда помещаем файл app.config с следующим содержимым:</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #0000ff;">&lt;?</span><span style="color: #800000;">xml</span> <span style="color: #ff0000;">version</span><span style="color: #0000ff;">=&#8221;1.0&#8243;</span> <span style="color: #ff0000;">encoding</span><span style="color: #0000ff;">=&#8221;utf-8&#8243;</span>?<span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">application-handler</span><span style="color: #0000ff;">&gt;</span><br />
MySite.Applications.MyCallBack.MyApplicationAdapter<br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">application-handler</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span></span></code></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>То что мы только что прописали - ссылка на класс ApplicationAdapter, который будет обслуживать наше приложение MyCallBack. Осталось его написать:</p>
<p>4. Будет он в нашем тесте приблизительно таким:</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> MyApplicationAdapter : ApplicationAdapter<br />
{<br />
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">bool</span> appConnect(IConnection conn, <span style="color: #0000ff;">object</span>[] parms)<br />
{<br />
IClient client = conn.getClient();<br />
<span style="color: #0000ff;">if</span>(parms != <span style="color: #0000ff;">null</span> &amp;&amp; parms.Length &gt; 0)<br />
client.setAttribute(<span style="color: #a31515;">&#8220;sessionId&#8221;</span>, parms[0]);<br />
<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">base</span>.appConnect(conn, parms);<br />
}</span></code></p>
<p><span style="font-size: x-small; font-family: Courier New; color: black;"> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">void</span> appDisconnect(IConnection conn)<br />
{<br />
<span style="color: #0000ff;">base</span>.appDisconnect(conn);<br />
}</span></p>
<p><span style="font-size: x-small; font-family: Courier New; color: black;"> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> AddTask(<span style="color: #0000ff;">string</span> sessionId, <span style="color: #0000ff;">string</span> taskName)<br />
{<br />
ThreadPool.QueueUserWorkItem(FakeTaskInvoker, <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">string</span>[] {sessionId, taskName});<br />
}</span></p>
<p><span style="font-size: x-small; font-family: Courier New; color: black;"> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> FakeTaskInvoker(<span style="color: #0000ff;">object</span> param)<br />
{<br />
<span style="color: #0000ff;">string</span>[] ps = (<span style="color: #0000ff;">string</span>[]) param;<br />
Thread.Sleep(5000);<br />
<span style="color: #0000ff;">string</span> taskName = ps[1];<br />
<span style="color: #0000ff;">string</span> result = <span style="color: #0000ff;">string</span>.Format(<span style="color: #a31515;">&#8220;Congradulations! Task &#8216;{0}&#8217; has been completed&#8221;</span>, taskName) ;<br />
<span style="color: #0000ff;">string</span> sessionId = ps[0];</span></p>
<p><span style="font-size: x-small; font-family: Courier New; color: black;"> <span style="color: #0000ff;">lock</span> (_locker)<br />
{<br />
IEnumerator&lt;IConnection&gt; connections = scope.getConnections();<br />
<span style="color: #008000;">// find client and invoke it result function</span><br />
<span style="color: #0000ff;">while</span> (connections.MoveNext())<br />
{<br />
IConnection connection = connections.Current;<br />
IClient client = connection.getClient();<br />
<span style="color: #0000ff;">string</span> sid = <span style="color: #2b91af;">Convert</span>.ToString(client.getAttribute(<span style="color: #a31515;">&#8220;sessionId&#8221;</span>));<br />
<span style="color: #008000;">//</span><br />
<span style="color: #0000ff;">if</span> (connection <span style="color: #0000ff;">is</span> IServiceCapableConnection &amp;&amp; sessionId == sid)<br />
{<br />
((IServiceCapableConnection)connection).invoke(<span style="color: #a31515;">&#8220;serverTaskComplete&#8221;</span>, <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">object</span>[] { taskName, result });<br />
<span style="color: #0000ff;">break</span>;<br />
}<br />
}<br />
}</span></p>
<p><span style="font-size: x-small; font-family: Courier New; color: black;"> }<br />
}</span></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>Как видим, он наследуется от ApplicationAdapter и позволяет переопределить подключение клиентов, отключение клиентов и т д. Какую логику он здесь выполняет:<br />
при подключении клиента запоминает ID сессии (здесь увы нет HttpContext). При вызове клиентом метода AddTask, ждет 5 секунт, ищет клиента среди подключенных и вызывает удаленный клиентский метод.</p>
<p>5. Клиент. Мого буков не будет, пусть код говорит сам за себя (RTMPBridge.as):</p>
<blockquote><p><code><span style="font-size: x-small; font-family: Courier New; color: black;">[Event(name=<span style="color: #a31515;">"serverTaskComplete"</span>, type=<span style="color: #a31515;">"mx.rpc.events.ResultEvent"</span>)]<br />
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> RTMPBridge extends EventDispatcher<br />
{<br />
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">var</span> _connection:NetConnection;<br />
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">var</span> _sessionId:String = </span></code><code><span style="font-size: x-small; font-family: Courier New; color: black;"><span style="color: #a31515;">&#8220;someSessionId&#8221;</span></span></code><code><span style="font-size: x-small; font-family: Courier New; color: black;">;</span></code></p>
<p><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> RTMPBridge()<br />
{<br />
_connection = <span style="color: #0000ff;">new</span> NetConnection();<br />
_connection.client = <span style="color: #0000ff;">this</span>;<br />
_connection.objectEncoding = ObjectEncoding.AMF0;<br />
_connection.addEventListener( NetStatusEvent.NET_STATUS, handleNetStatus );<br />
_connection.connect( <span style="color: #a31515;">&#8220;rtmp://localhost:2037/MyCallBack&#8221;</span>, <code><span style="font-size: x-small; font-family: Courier New; color: black;">_sessionId</span></code><code><span style="font-size: x-small; font-family: Courier New; color: black;"> );<br />
}</span></code></p>
<p><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> handleNetStatus(<span style="color: #0000ff;">event</span>:NetStatusEvent):<span style="color: #0000ff;">void</span> {</p>
<p>}</p>
<p><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> addTask(taskName:String):<span style="color: #0000ff;">void</span> {<br />
<span style="color: #0000ff;">var</span> responder:Responder = <span style="color: #0000ff;">new</span> Responder(onTaskSend, onTaskFault);<br />
_connection.call(<span style="color: #a31515;">&#8220;AddTask&#8221;</span>, responder, _clientId, taskName);<br />
}</p>
<p><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> onTaskSend(<span style="color: #0000ff;">event</span>:ResultEvent):<span style="color: #0000ff;">void</span> {</p>
<p>}</p>
<p><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> onTaskFault(<span style="color: #0000ff;">event</span>:FaultEvent):<span style="color: #0000ff;">void</span> {</p>
<p>}</p>
<p><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> serverTaskComplete( taskName:String, taskResult:Object ) : <span style="color: #0000ff;">void</span><br />
{<br />
dispatchEvent(<span style="color: #0000ff;">new</span> ResultEvent(<span style="color: #a31515;">&#8220;serverTaskComplete&#8221;</span>, <span style="color: #0000ff;">false</span>, <span style="color: #0000ff;">true</span>, [taskName, taskResult]));<br />
}</p>
<p><span style="font-size: x-small; font-family: Courier New; color: black;"> }</span></p>
<p><span style="font-size: xx-small; color: gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="font-size: xx-small; color: gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>Ну вот и все. Естественно, скопилось много вопросов - откуда взялся sessionId, почему пустые обработчики статусов и ошибок и т д. - ответов на них не будет <img src='http://pil.alnet.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=145</wfw:commentRss>
		</item>
		<item>
		<title>Блокировки в БД</title>
		<link>http://pil.alnet.com.ua/?p=141</link>
		<comments>http://pil.alnet.com.ua/?p=141#comments</comments>
		<pubDate>Fri, 09 Oct 2009 11:48:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET development]]></category>

		<category><![CDATA[RDBMS]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=141</guid>
		<description><![CDATA[Сегодня, когда в очередной раз меня спросили о сабже, чтобы не писать руками, спросил у Google, оказывается в MSDN есть прекрасная статья для тех, кто об этом никогда не слышал и столкнулся с одновременным доступом к БД впервые. Кому интересно - знакомимся: http://msdn.microsoft.com/ru-ru/library/cs6hb8k4.aspx
]]></description>
			<content:encoded><![CDATA[<p>Сегодня, когда в очередной раз меня спросили о сабже, чтобы не писать руками, спросил у <a href="http://google.com" target="_blank">Google</a>, оказывается в MSDN есть прекрасная статья для тех, кто об этом никогда не слышал и столкнулся с одновременным доступом к БД впервые. Кому интересно - знакомимся: <a href="http://msdn.microsoft.com/ru-ru/library/cs6hb8k4.aspx" target="_blank">http://msdn.microsoft.com/ru-ru/library/cs6hb8k4.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=141</wfw:commentRss>
		</item>
		<item>
		<title>Spicefactory</title>
		<link>http://pil.alnet.com.ua/?p=139</link>
		<comments>http://pil.alnet.com.ua/?p=139#comments</comments>
		<pubDate>Wed, 23 Sep 2009 11:55:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Flex, Air]]></category>

		<category><![CDATA[Air]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://pil.alnet.com.ua/?p=139</guid>
		<description><![CDATA[Интересную ссылку подкинул сегодня товарищ: Spicefactory
Очень интересный фреймворк судя по описанию. Что меня заинтересовало:
- IOC, Dependency Injection, Reflection API (хоть кто-то написал обертку над describeType() :)), XML-to-Objects mapping, Logging и много другого.
По поводу лицензии - Parsley is Open Source, licensed under the Apache License 2.0.
Качаем, знакомимся
]]></description>
			<content:encoded><![CDATA[<p>Интересную ссылку подкинул сегодня товарищ: <a href="http://www.spicefactory.org/parsley/" target="_blank">Spicefactory</a></p>
<p>Очень интересный фреймворк судя по описанию. Что меня заинтересовало:</p>
<p>- IOC, Dependency Injection, Reflection API (хоть кто-то написал обертку над describeType() :)), XML-to-Objects mapping, Logging и много другого.</p>
<p>По поводу лицензии - Parsley is Open Source, licensed under the Apache License 2.0.</p>
<p>Качаем, знакомимся</p>
]]></content:encoded>
			<wfw:commentRss>http://pil.alnet.com.ua/?feed=rss2&amp;p=139</wfw:commentRss>
		</item>
	</channel>
</rss>
