<?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>Блог одиноко стоящего игрока вспышки &#187; utils</title>
	<atom:link href="http://murejib.com/tag/utils/feed/" rel="self" type="application/rss+xml" />
	<link>http://murejib.com</link>
	<description>flash, actionscript, animation, анимация</description>
	<lastBuildDate>Sat, 10 Dec 2011 07:58:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>FireFox. FlashTracer. FlashPlayer9 debug</title>
		<link>http://murejib.com/2008/04/10/firefox-flashtracer-flashplayer9-debug/</link>
		<comments>http://murejib.com/2008/04/10/firefox-flashtracer-flashplayer9-debug/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 09:09:39 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[баг]]></category>
		<category><![CDATA[грабли]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[NB]]></category>
		<category><![CDATA[traps]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=44</guid>
		<description><![CDATA[Давно не писал, ибо пребываю сейчас в экстремальном непроходящем дебаге )) О нем и будет короткая моя речь )) Недавно вышла новая весрия флеш плеера, о чем было уже писано переписано, все дружно обновились, я полагаю ). В куче мы могли также качать дебаг-версию. И тут я вспомнил, что FlashTracer &#8211; милый плагин под файрФокс, [...]]]></description>
			<content:encoded><![CDATA[<p>Давно не писал, ибо пребываю сейчас в экстремальном непроходящем дебаге ))</p>
<p>О нем и будет короткая моя речь ))</p>
<p>Недавно вышла новая весрия флеш плеера, о чем было уже писано переписано, все дружно обновились, я полагаю ). В куче мы могли также качать дебаг-версию.<br />
И тут я вспомнил, что FlashTracer &#8211; милый плагин под файрФокс, позволяющий выводить трейс из флешек в режиме браузера, перестал откликаться, если я использую 9-ю версию дебаггера.</p>
<p>Как оказалось, такая проблема постигла не только меня. Решение найдено, спасибо Silin-у, подсказал верную мысль )</p>
<p>Дело в том, что я мануально поменял путь к файлу flashlog.txt, вытащив его из длинной цепочки <em>C:\Documents and Settings\user\Application Data\Macromedia\Flash Player\Logs</em>   немного поближе.<br />
Так вот флешки, опубликованные под версию плеера НИЖЕ 9-ки спокойно отдавали свои логи в этот файл В ЛЮБОМ дебаг плеере (тут конечно участие принял другой полезный аддон для FF &#8211; FlashSwitcher). Зато флешки, требующие как минимум 9-ю версию &#8211; тихо сдавали свои логи все по тому же длинному адресу по умолчанию, оставляя указанный мной flashlog.txt без должного внимания. Импичмент, понимаешь.</p>
<p>Так что пришлось смириться с адресом по умолчанию, но зато браузерный дебаг мой снова стал чистым и шелковистым. Вот веть какая штука.</p>
<p>PS. Кажется меня приняли в мксня-аггрегатор. Тут и проверим )) Ответсвенность то какая ))</p>
<img src="http://murejib.com/?ak_action=api_record_view&id=39&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/04/10/firefox-flashtracer-flashplayer9-debug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Разбираемся с SWFAddress</title>
		<link>http://murejib.com/2008/02/26/swfaddress/</link>
		<comments>http://murejib.com/2008/02/26/swfaddress/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 11:37:03 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[грабли]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[deep linking]]></category>
		<category><![CDATA[swfaddress]]></category>
		<category><![CDATA[traps]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=41</guid>
		<description><![CDATA[В сети море полезных фреймворков, классов и решений различных задач. Однако очень многие из них имеют существенный недостаток &#8211; УЖАСНАЯ, если вообще присутствующая документация. Недавно я прикоснулся к магии SWFAddress, библиотеке AS+JS, решающей проблему deep linking для FLASH и AJAX. Для таких как я (гуманитариев и не-программистов) предлагаю свой опыт по освоению СВФАдреса. Нет. Документацию [...]]]></description>
			<content:encoded><![CDATA[<p>В сети море полезных фреймворков, классов и решений различных задач.<br />
Однако очень многие из них имеют существенный недостаток &#8211; УЖАСНАЯ, если вообще присутствующая документация.</p>
<p>Недавно я прикоснулся к магии SWFAddress, библиотеке AS+JS, решающей проблему deep linking для FLASH и AJAX.<br />
Для таких как я (гуманитариев и не-программистов) предлагаю свой опыт по освоению СВФАдреса.<br />
<span id="more-36"></span> Нет. Документацию на русский язык я переводить не буду. Не вижу в этом смысла. Документация более чем минималистическая. С тем же успехом ее можно было бы вообще не писать. В прочем + от нее все же есть &#8211; сводная таблица всех доступных в классе методов.</p>
<p>Первое что следует сделать &#8211; это скачать библиотеку. Настоятельно рекомендую качать <a href="http://asual.com/download/?swfaddress">7-мегабайтовый архив</a> с примерами и документацией.  Потому что, как выяснилось в процессе, если бы я ограничился скачиванием только классов — меня бы постигла неудача, и я бы так и не понял в чем дело. А непоняток-ошибок на пути встретилось некоторое количество )</p>
<p><strong>Первая ошибка.</strong> Исторически сложилось так, что я работал над сайтом, к которому намеревался прикрутить SWFAddress на завершающем этапе.  <em>Собираетесь использовать дип линкинг &#8211; сразу работайте с SWFAddress</em>. Дело в том, что любое изменение адресной строки браузера (А это именно то, зачем нам вообще нужен дип линкинг) вызывает событие SWFAddress.onChange. То есть фактически и переключение разделов из флеш сайта (конечно если оно должно вести к изменению в адресной строке) , и переключение разделов извне (навигация по кнопкам ВПЕРЕД НАЗАД ,навигация по якорям на хтмл-странице и т.д.) вызывает это событие. В сущности на нем как раз и будет строиться обработка события переключения между разделами.<br />
<strong>Ошибка вторая.</strong> Я доверился заявлению <em>Flash CS3 Support</em>. Фактически же, если публиковать ролик на странице с помощью AC_RunActiveContent.js, которое генерируется Flash IDE &#8211; дип линкинг не работает. Изменения в адресной строке &#8211; да, но ролик не реагирует на навигацию из браузера. Я дошел до этого знания случайно. Потеряв веру в свой мозг, я просто взял рабочий пример, и заменил в нем флешку на свою &#8211; и все заработало. Путем исключений я нашел камень преткновения. Каким то образом AC_RunActiveContent.js из примера отличается от того, что генерируется FLASH CS3 IDE. Так что пользуйтесь скриптом из примеров. Что касается работы с SWFObject и UFO &#8211; не проверял. У вас есть отличная возможность сделать это за меня, а потом отписаться здесь, если пожелаете.</p>
<p>Теперь о некоторых тонкостях и внутренностях. В архиве есть коды для всех трех версий AS. Мои опыты ставились на AS2.0</p>
<p>1. Класс написан как TopLevel-класс, или для тех кто не понимает этого словосочетания, &#8211; он не создает экземпляров. Пример такого класса -Math, все функции в нем вызываются подобным образом: Math.sin(), Math.round() и т.д. То же справедливо и для SWFAddress.</p>
<p>2. Адресная строка.<br />
Для решения задачи дип линкинга, к существующему URL добавляется якорь # за которым следует строка, которую разработчик волен генерить сам, по своим правилам, и сам же по своим правилам ее  и разбирает. Есть два режима. setStrict(true) &#8211; в конце адреса жестко добавляется слеш (/) и setStrict(false) &#8211; никаких слешей без ведома разрабочика.</p>
<p>3. Основные полезные методы.<br />
В классе присутствует набор методов для разбора строки. Весьма удобно.<br />
К примеру в адресной строке имеем</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://flashsite.com/#news?page=&amp;img=2</pre></div></div>

<p><strong>SWFAddress.getValue():String -</strong> вернет значение строки аккурат после # со всеми Вашими изысками (парами имя=значение)</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">news?page=1&amp;img=2</pre></div></div>

<p><strong>SWFAddress.getPath():String -</strong> вернет значение строки аккурат после # без дополнительных параметров<br />
<em>news</em></p>
<p><strong>SWFAddress.getQueryString():Array -</strong> вернет строку с дополнительными параметрами</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">page=1&amp;img=2</pre></div></div>

<p><strong>SWFAddress.getParameterNames():Array -</strong> вернет массив с именами дополнительных переменных<br />
<em>page,img</em></p>
<p><strong>SWFAddress.getParameter(value:String):String -</strong> вернет значение дополнительного параметра указанного в value<br />
<em>getParameter(&#8220;page&#8221;) // 1;<br />
</em><em>getParameter(&#8220;img&#8221;) // 2;<br />
</em></p>
<p>Для того чтобы изменить адресную строку из FLASH существует метод <strong>setValue(value:String) &#8211; </strong>помните, что вызов этого метода автоматически приведет к вызову события onChange, так что фактически переключение между разделами сводится к замене значения адресной строки и последующей обработке события.</p>
<p>Остальные методы описывать не стану, они весьма просты и даже данных документации хватит для их освоения.</p>
<p>4. События.<br />
Я уже говорил о событии onChange. Должен отметить, что событие это вызывается сразу же, при первом же упоминании класса, равно как и событие onInit. Большого смысла в событии onInit я не уловил. В самом начале оно вызывается и тут же за ним вызывается onChange. Возможно есть смысл для более четкой структуризации, и отделении инит-процедур от собственно обработки переключений между разделами.</p>
<p>Более подробно поговрим о событии onChange, хотя в случае с onInit все работает абсолютно так же, за исключением значения cвойств SWFAddressEvent: path=null; value=null; type=init;</p>
<p>События доступны в двух ипостасях:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">SWFAddress.<span style="color: #006600;">onChange</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SWFAddress.onChange&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>В данном случае мы просто определяем статичную функцию onChange.</p>
<p>Второй вариант &#8211; подписать любой свой объект на событие. Во многом это удобнее, чем описывать вложенные функции с обработчиком события.<br />
К примеру мне удобно подписать экземпляр класса, который напрямую работает с SWFAddress. Для этого я сначала создаю функцию обработчик:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onChange<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> \
<span style="color: #66cc66;">&#123;</span>
   <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Class's onChange&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>И далее подписывась на событие с помощью метода класса  SWFAddress  &#8211; addEventListener(type:String,listener:Function);<br />
Поскольку в этом учавствует стандартный mx.utils.EventDispatcher, нужно подписаться так, чтобы наша функция onChange знала кто в доме хозяин &#8211; то есть надо жестко определить this. Делается это при помощи mx.utils.Delegate.create().<br />
Итак подписка на событие для нашего экземпляра будет выглядеть так</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">SWFAddress.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;change&quot;</span>,Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,onChange<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Теперь мы можем из тела функции onChange обращаться ко всем свойствам и методам нашего экземпляра. Ура.<br />
Продвинемся дальше. В том случае, если мы подписываемся на событие, в качестве параметра в наш обработчик приходит экземпляр SWFAddressEvent, который несет в себе ценную информацию <img src='http://murejib.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Модифицируем наш обработчик.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onChange<span style="color: #66cc66;">&#40;</span>evt:SWFAddressEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #808080; font-style: italic;">//вернет путь после # из адресной строки БЕЗ параметров</span>
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;path:&quot;</span>+evt.<span style="color: #006600;">path</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #808080; font-style: italic;">//вернет  путь после # из адресной строки С параметрами</span>
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;value:&quot;</span>+evt.<span style="color: #006600;">value</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Также событие несет информацию о своем типе (type=&#8221;change&#8221; или &#8220;init&#8221;), target (это всегда отсылка на SWFAddress) а также массив parameters (&#8220;ассоциативный&#8221;)   с параметрами из queryString. Если в адресной строке есть news?param=value, то значение param можно получить так : SWFAddressEvent.parameters.param</p>
<p>Какие замечены баги.</p>
<p>1. Самый неприятный. В опере любое переключение между страницами ИЗ браузера (навигация вперед назад, якоря) вызывает полную перезагрузку страницы. Не очень то красиво, особенно если это флеш сайт с какими то особенными переходами между страницами. К счастью внутренние флешовые переходы проходят как обычно.</p>
<p>2.Если вручную вставить адрес в браузерной строке в FireFox &#8211; адресная строка перестает изменяться, когда переключаешься между разделами. Вроде как адреса заносятся в history, навигация вперед.назад работает,  но это не отображается в адресной строке. В принципе &#8211; я лично замечал вообще странное поведение адресной строки в Фоксе, и без дип линкинга, например иногда в ней просто невозможно перенабрать адрес.</p>
<p>Работоспособность проверена на:</p>
<ul>
<li>Mozzilla FireFox 2.0.0.12</li>
<li>Opera 9.10</li>
<li>IE 6.0</li>
<li>Safari (win) 3.0.3</li>
</ul>
<p>В завершении могу только дать ссылку на первый свой опыт с SWFAddress, где вы можете потестировать работоспособность библиотеки в разных браузерах. Будет полезно, если здесь вы запостите свои баг репорты, ну или зададите вопросы о том, что осталось непонятным. Цель этого топика &#8211; сделать эту бесспорно полезную опцию более доступной всем категориям разработчиков )) Поэтому -включайтесь )</p>
<p><a href="http://kvadra.net/samples/goodpeople/_flash/#chillout/two?pgid=2t&#038;imgid=36">http://kvadra.net/samples/goodpeople/_flash/#chillout/two?pgid=2t&#038;imgid=36 </a></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=36&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/02/26/swfaddress/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>fscommand EXEC &#8211; сюрпризы от CS3</title>
		<link>http://murejib.com/2008/02/01/fscommand-exec-in-cs3/</link>
		<comments>http://murejib.com/2008/02/01/fscommand-exec-in-cs3/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 18:35:05 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[баг]]></category>
		<category><![CDATA[грабли]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[fscommand]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=37</guid>
		<description><![CDATA[Многие наверное помнят, что флеш-проектор может запускать exe-шники и bat-файлы, если они лежат в папке fscommand? На этом стояли неcколько лет производители CD-презентаций, инсталляторов с флеш оболочкой и иже с ними&#8230; Но вот недавно я пробился несколько часов, и удивлению моему не было предела &#8211; бат файлы отказывались запускаться, тогда как я РУКУ мог дать [...]]]></description>
			<content:encoded><![CDATA[<p>Многие наверное помнят, что флеш-проектор может запускать exe-шники и bat-файлы, если они лежат в папке fscommand?</p>
<p>На этом стояли неcколько лет производители CD-презентаций, инсталляторов с флеш оболочкой и иже с ними&#8230;</p>
<p><span id="more-33"></span></p>
<p>Но вот недавно я пробился несколько часов, и удивлению моему не было предела &#8211; бат файлы отказывались запускаться, тогда как я РУКУ мог дать на отсечение что раньше мне это удавалось.</p>
<p>Краем глаза я успевал заметить, что дос-окно отчаянно пытается мне что-то сказать&#8230; Полчаса скоростных нажатий спасительной PrintScreen &#8211; и я узнал, что по какой то причине CMD.EXE ответственный за запуск батников, принимает адрес текущего каталога в т.н UNC-формате.</p>
<p>И вот сегодня мне в приватное сообщение приходит ссылка от<strong> @st@l@vist@</strong> (Грандиозное ему спасибо за это) .Нашелся умелец, который не остановился как я, и все понял до конца )))</p>
<p>Вот <a href="http://www.northcode.com/blog.php/2007/08/14/FSCommand-EXEC-is-Broken-in-Flash-CS3">статья</a> в оригинале.<br />
По традиции &#8211; мой вольный перевод.<br />
В начале статьи читаем увлекательный рассказ, как автор поймал баг и, так же как и я, пытался поймать скриншот ). Эту часть я опущу.<br />
Далее по тексту (с сокращениями).</p>
<p><strong>Почему Flash пытается запустить CMD.EXE,</strong> когда его попросили запустить BAT файл? CMD.EXE &#8211; это системное приложение Windows, отвечающее за бат-ники, и ОС запускает копию CMD.EXE (Именно поэтому мы видим уродское дос-окно).<br />
Поскольку <strong>CMD.EXE не понимает UNC путей</strong> и не может определить директорию, из которой батник запущен &#8211; он устанавливает значение по умолчанию, т.е папку Windows, в которой естественно нет тех файлов, которые мы хотим запустить.<br />
<strong>BAT файлы продолжают работать под Windows 98 and ME, но перестают работать под XP и Vista</strong>, потому что эти ОСи используют разные приложения для запуска батников (command.com до XP, и CMD.EXE, начиная с XP). Flash CS3 не генерирует UNC путей на старых ОСях.<br />
Если  Adobe не вернет использование DOS путей вместо  UNC &#8211; остается одно решение &#8211; использовать альтернативный процессор для запуска батников. И именно такой процессор совершенно безвозмездно был создан автором статьи (Тимом)</p>
<p>Вот маленький exe-шник. (52 кило)<br />
<a href="http://www.northcode.com/free/proxy/proxy.exe">http://www.northcode.com/free/proxy/proxy.exe </a></p>
<p>Надо сказать, что с exe-шниками все работает как раньше. Так вот. Пишете свой батник. Запускаете из него хоть мп3 хоть пдф, хоть черта лысого. Рядом кладете этот proxy.exe и называете его так же как и батник &#8211; только расширение exe оставляете. Все. Из флеш-проектора запускаем не батник &#8211; а прокси &#8211; вуаля. Нет уродского черного-дос окна, и все работает )) Слава Тиму Освободителю )</p>
<p>Вот еще ссылочка на первоисточник мануала: <a href="http://www.northcode.com/blog.php/2007/08/07/Conquering-FSCommand-EXEC-Part-1-Proxy">http://www.northcode.com/blog.php/2007/08/07/&#8230;Proxy</a></p>
<p>На последок &#8211; пара полезностей. Для тех кто вообще ни понял что такое батник )))</p>
<p>*.bat &#8211; файл &#8211; это такая инструкция с ДОС-командами &#8211; что запустить и откуда запустить.<br />
Хотите больше знать о ДОС-командах? Гугл в помощь ) Изучаем MS-DOS )))</p>
<img src="http://murejib.com/?ak_action=api_record_view&id=33&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/02/01/fscommand-exec-in-cs3/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Vector magic.</title>
		<link>http://murejib.com/2007/12/15/vector-magic/</link>
		<comments>http://murejib.com/2007/12/15/vector-magic/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 12:56:55 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[flex]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=26</guid>
		<description><![CDATA[Отличное, а главное, очень полезное он-лайн приложение &#8211; трейс битмапа в вектор. Очень приличный конвертер. Input: JPG, GIF, PNG, BMP, TIFF Output: EPS, SVG, PNG Сделано на флексе. http://vectormagic.stanford.edu/ И посмотрите сравнение результатов VM, Adobe LiveTrace и Corel. http://vectormagic.stanford.edu/vectorize/comparisons]]></description>
			<content:encoded><![CDATA[<p>Отличное, а главное, очень полезное он-лайн приложение &#8211; трейс битмапа в вектор. Очень приличный конвертер.</p>
<table>
<tr>
<td>Input:</td>
<td>JPG, GIF, PNG, BMP, TIFF</td>
</tr>
<tr>
<td>Output:</td>
<td>EPS, SVG, PNG</td>
</tr>
</table>
<p>Сделано на флексе.</p>
<p><a href="http://vectormagic.stanford.edu/">http://vectormagic.stanford.edu/<br />
</a></p>
<p>И  посмотрите сравнение результатов VM, Adobe LiveTrace и Corel.</p>
<p><a href="http://vectormagic.stanford.edu/vectorize/comparisons">http://vectormagic.stanford.edu/vectorize/comparisons </a></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=24&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2007/12/15/vector-magic/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Защита от неплательщиков.</title>
		<link>http://murejib.com/2007/12/06/pay-protection/</link>
		<comments>http://murejib.com/2007/12/06/pay-protection/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 12:12:42 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[грабли]]></category>
		<category><![CDATA[traps]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=10</guid>
		<description><![CDATA[На волнах фриланса частенько попадаются жадные купцы. Денежку пожалеют, и разработчику не заплатят. Особенно озадачивает разработчика сей факт, когда он, наивный, отдал результат работы в жадные купцовы руки. Лучшая защита &#8211; работать только с теми, кто у вас в local-trust ))) Но вот еще небольшая подмога. Класс Permission. Для работы с ним, конечно понадобиться свой [...]]]></description>
			<content:encoded><![CDATA[<p>На волнах фриланса частенько попадаются жадные купцы.<br />
Денежку пожалеют, и разработчику не заплатят.<br />
Особенно озадачивает разработчика сей факт, когда он, наивный, отдал результат работы в жадные купцовы руки.</p>
<p>Лучшая защита &#8211; работать только с теми, кто у вас в local-trust )))</p>
<p><span id="more-11"></span></p>
<p>Но вот еще небольшая подмога. Класс Permission.<br />
Для работы с ним, конечно понадобиться свой родной домен,  на который вы сможете положить скромный crossdomain.xml. В нем укажите доступ  для того домена, на котором будет лежать результат вашей работы. Ну а если не знаете где именно, будет лежать разрешайте доступ всем. Хуже не будет.</p>
<p>Далее. Кладем у себя мальнький текстовый файл, в котором будут записаны две переменных allow=1 и message=ЗАПЛАТИ ДЕНЕГ!!!</p>
<p>Пока allow=1 флешка будет работать как положено.<br />
Но как только вам покажется, что денег больше не видать &#8211; меняйте allow=0.<br />
Теперь все будут поверх флешки периодически читать ваш душещипательный message.</p>
<p>Конечно, по завершении работ, в случае благополучной оплаты &#8211; лучше убрать эту мышеловку из кода, и отправить финальный , стерильный вариант.</p>
<p><strong>Использование:</strong></p>
<p>Просто заводим новый экземпляр Permission и передаем в конструкторе путь к текстовому файлу.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> my_permission:Permission = <span style="color: #000000; font-weight: bold;">new</span> Permission<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;my_domain.net/my_permission.txt&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p><strong>Код классa:</strong> <a href="http://bbexp.ru/ru/decafe/utils/Permission.as">ru.decafe.utils.Permission</a></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
* class ru.decafe.utils.Permission
* @author Mikhail Ivanchuk
* @version 0.1
*/</span>
<span style="color: #0066CC;">import</span> ru.<span style="color: #006600;">decafe</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Cache</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> ru.<span style="color: #006600;">decafe</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Permission</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span>  theURL:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;&quot;</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> accessor:<span style="color: #0066CC;">LoadVars</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> blinker:<span style="color: #0066CC;">Number</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> alert_mc:<span style="color: #0066CC;">MovieClip</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">message</span>:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;&quot;</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Permission<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">url</span>:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		theURL = <span style="color: #0066CC;">url</span>;
		accessor = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">LoadVars</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> loadAccess<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">var</span> refer:Permission = <span style="color: #0066CC;">this</span>;
		<span style="color: #000000; font-weight: bold;">var</span> _key:<span style="color: #0066CC;">String</span> = theURL.<span style="color: #0066CC;">indexOf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;?&quot;</span><span style="color: #66cc66;">&#41;</span>==-<span style="color: #cc66cc;">1</span>?<span style="color: #ff0000;">&quot;?&quot;</span>:<span style="color: #ff0000;">&quot;&amp;amp;&quot;</span>;
		accessor.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span>theURL+Cache.<span style="color: #006600;">disable</span><span style="color: #66cc66;">&#40;</span>_key+<span style="color: #ff0000;">&quot;nocache=&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		accessor.<span style="color: #0066CC;">onLoad</span> = <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>success:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> mode:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;demo&quot;</span>;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>success <span style="color: #66cc66;">&amp;</span>amp;<span style="color: #66cc66;">&amp;</span>amp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">allow</span> == <span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				mode = <span style="color: #ff0000;">&quot;allow&quot;</span>;
			<span style="color: #66cc66;">&#125;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mode: &quot;</span>+mode+<span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>+<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">message</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>mode==<span style="color: #ff0000;">&quot;demo&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				refer.<span style="color: #0066CC;">message</span> = <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">message</span>;
				refer.<span style="color: #006600;">blinker</span> = <span style="color: #0066CC;">setInterval</span><span style="color: #66cc66;">&#40;</span>refer,<span style="color: #ff0000;">&quot;alert&quot;</span>,<span style="color: #cc66cc;">10000</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> alert<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		alert_mc = _level0.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;alrt&quot;</span>,_level0.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> txt:<span style="color: #0066CC;">TextField</span> = alert_mc.<span style="color: #0066CC;">createTextField</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;txt&quot;</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">150</span>,<span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span>;
		txt.<span style="color: #0066CC;">background</span> = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
		txt.<span style="color: #0066CC;">multiline</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">wordWrap</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">backgroundColor</span> = 0xDEDEDE;
		txt.<span style="color: #0066CC;">border</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">borderColor</span> = <span style="color: #cc66cc;">0</span>;
		txt.<span style="color: #0066CC;">html</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">condenseWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">htmlText</span> = <span style="color: #ff0000;">&quot;
&nbsp;
&lt;span style=&quot;</span>font-family: Arial;<span style="color: #ff0000;">&quot;&gt;&quot;</span>+<span style="color: #0066CC;">message</span>+<span style="color: #ff0000;">&quot;
&nbsp;
&quot;</span>;
		alert_mc.<span style="color: #006600;">counter</span> = <span style="color: #cc66cc;">100</span>;
		alert_mc.<span style="color: #0066CC;">onEnterFrame</span> = <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">counter</span>--;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #006600;">counter</span><span style="color: #66cc66;">&amp;</span>lt;<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">removeMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&lt;/</span>span<span style="color: #66cc66;">&gt;</span></pre></div></div>

<p><span style="font-family: Arial;">+ Cache.as, который необходим для работы класса Permission: <a href="http://bbexp.ru/ru/decafe/utils/Cache.as">ru.decafe.utils.Cache </a></p>
<p></span></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=11&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2007/12/06/pay-protection/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Кеширование данных, и как с ним бороться.</title>
		<link>http://murejib.com/2007/12/06/anti-cache/</link>
		<comments>http://murejib.com/2007/12/06/anti-cache/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 11:52:46 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=9</guid>
		<description><![CDATA[Мало мальски серьезное приложение обязательно грузит в себя некие внешние данные. В случае работы на просторах сети эти данные попадают в кеш. Иногда эта особенность сильно мешает. К примеру мы делаем галерею которая постоянно пополняется. Адреса изображений заносятся в XML файл, который мы и грузим первым делом в нашу галерею. Единожды загрузившись &#8211; этот файл [...]]]></description>
			<content:encoded><![CDATA[<p>Мало мальски серьезное приложение обязательно грузит в себя некие внешние данные.<br />
В случае работы на просторах сети эти данные попадают в кеш.<br />
Иногда эта особенность сильно мешает. К примеру мы делаем галерею которая постоянно пополняется. Адреса изображений заносятся в XML файл, который мы и грузим первым   делом в нашу галерею. Единожды загрузившись &#8211; этот файл надолго попадает в кеш и наша галерея ничего и знать не знает об обновлениях.</p>
<p><span id="more-10"></span></p>
<p>Сценарий 2:<br />
Мы пишем клиентскую часть игры для он-лайн казино. Все процессы связанные с логикой   игры происходят на жутко засекреченном сервере, наш клиент только отображает красиво все эти процессы. В определенный момент отправляет серверу данные о   действиях игрока, в ответ получая XML с состоянием дел: Баланс игрока, комбинацию карт (или символов, если это слот-машина) ну и много всего разного.</p>
<p>Несмотря на то что мы не запрашиваем реально существующий XML, все равно результат заносится в кеш, и по следующему подобному запросу мы получим старые данные. В итоге &#8211; игрок выиграл 100000, но не знает, что это случилось.</p>
<p>Самый простой способ это приклеить <em><span style="color: #000080;">Math.random() </span></em>к запросу. Тогда браузер воспримет такой запрос как абсолютно новый и радостно вернет нам нужные данные в самом свежем виде. Но, полагаться на <em><span style="color: #000080;">Math.random()</span></em> всегда я бы не стал.</p>
<p>И я не стал. Как раз когда мне довелось писать кучу игр для казино, возник вопрос о железной защите от кеша. В итоге родился шизофренический метод, который позже я перелопатил в класс с одним единственным статичным методом. Базируется он на самой непостоянной субстанции &#8211; времени.</p>
<p>Однако на этом мы успокаиваться не будем. Иногда нам нужно чтобы свежие данные приходили не так часто. Допустим у меня есть сайт-портфолио, состоящий из нескольких html-страниц.  На каждой имеется флеш-галерея работ. Если я буду отключать кеш для каждой загрузки &#8211; то мой посетитель будет упорно грузить свежие данные при каждом возвращении на страницу. Выход &#8211; обновляться скажем только каждый час, или день.</p>
<p>В общем хватит слов. Класс элементарный &#8211; и все будет ясно из его кода.</p>
<p>Метод один <em>Cache.disable(key:<span style="color: #000080;">String</span>, level:<span style="color: #000080;">Number</span>);</em><br />
<em>key</em> &#8211; это строка, которую нужно приклеить к запросу.  Или банальный &#8220;?&#8221; (&#8220;&amp;&#8221; если в запросе уже есть пары имя=значение), или что-то сокровенное вроде &#8220;?nocache=&#8221;.<br />
<em>level</em> &#8211; уровень защиты от кеша. Передаем одну из констант:<br />
<em>Cache.MONTH, Cache.DAY, Cache.HOUR, Cache.MINUTE, Cache.FULL</em></p>
<p><strong>код класса:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
* class Cache
* @author Mikhail Ivanchuk
* @version 0.1
*/</span>
<span style="color: #000000; font-weight: bold;">class</span> ru.<span style="color: #006600;">decafe</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Cache</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> MONTH:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> DAY:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> HOUR:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">3</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> MINUTE:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">4</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> FULL:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">5</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> disable<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>:<span style="color: #0066CC;">String</span>, <span style="color: #0066CC;">level</span>:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> == <span style="color: #0066CC;">undefined</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0066CC;">level</span> = Cache.<span style="color: #006600;">FULL</span>;
		<span style="color: #000000; font-weight: bold;">var</span> browser:<span style="color: #0066CC;">Boolean</span> = <span style="color: #66cc66;">&#40;</span>_level0.<span style="color: #0066CC;">_url</span>.<span style="color: #0066CC;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #ff0000;">&quot;http&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// timestamp</span>
		<span style="color: #000000; font-weight: bold;">var</span> timestamp:<span style="color: #0066CC;">Date</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampY:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getYear</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampMN:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getMonth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampD:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getDate</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampH:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getHours</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampM:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getMinutes</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampS:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getSeconds</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampMS:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getMilliseconds</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampMT:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Date</span>.<span style="color: #0066CC;">UTC</span><span style="color: #66cc66;">&#40;</span>timestampY,timestampMN,timestampD,timestampH,timestampM,timestampS,timestampMS<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">//date string</span>
		<span style="color: #000000; font-weight: bold;">var</span> dateString:<span style="color: #0066CC;">String</span> = timestampY.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span> +timestampMN.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">MONTH</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampD.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">DAY</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampH.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">HOUR</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampM.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">MINUTE</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampS.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>+timestampMS.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>+timestampMT.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// random</span>
		<span style="color: #000000; font-weight: bold;">var</span> addition:<span style="color: #0066CC;">String</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">floor</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1024</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString+addition<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<img src="http://murejib.com/?ak_action=api_record_view&id=10&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2007/12/06/anti-cache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

