<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>блог программера :)</title>
		<link>http://alexcoder.ucoz.ru/</link>
		<description></description>
		<lastBuildDate>Wed, 21 Nov 2012 23:50:23 GMT</lastBuildDate>
		<generator>uCoz Web-Service</generator>
		<atom:link href="https://alexcoder.ucoz.ru/news/rss" rel="self" type="application/rss+xml" />
		
		<item>
			<title>Поведение IE при модификации DOM до готовности, или ошибка &quot;Не удалось открыть узел ххх.ххх.ххх.ххх. Операция прервана&quot;</title>
			<description>При верстке сайта на Drupal столкнулся с тем, что понадобилась хотя бы минимально необходимая совместимость с IE 7 (когда же IE&lt;9 наконец &quot;уйдут&quot;), а он выкидывал упомянутую в заголовке ошибку без дальнейшего показа страницы.</description>
			<content:encoded>При верстке сайта на Drupal столкнулся с тем, что понадобилась хотя бы минимально необходимая совместимость с IE 7 (когда же IE&lt;9 наконец &quot;уйдут&quot;), а он выкидывал упомянутую в заголовке ошибку без дальнейшего показа страницы. &lt;br /&gt; Ошибка проявляется при модификации документа до готовности DOM. В IE9-10 не наблюдается. В моём случае их стало возможно исправить, обернув в &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; $(document&amp;#41;.ready(function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;... &lt;br /&gt; }&amp;#41;; &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; вместо &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; (function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;... &lt;br /&gt; }&amp;#41;(&amp;#41;; &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/povedenie_ie_pri_modifikacii_dom_do_gotovnosti_ili_oshibka_ne_udalos_otkryt_uzel_khkhkh_khkhkh_khkhkh_khkhkh_operacija_prervana/2012-11-22-28</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/povedenie_ie_pri_modifikacii_dom_do_gotovnosti_ili_oshibka_ne_udalos_otkryt_uzel_khkhkh_khkhkh_khkhkh_khkhkh_operacija_prervana/2012-11-22-28</guid>
			<pubDate>Wed, 21 Nov 2012 23:50:23 GMT</pubDate>
		</item>
		<item>
			<title>Парсер тегов ID3 на PHP + JS</title>
			<description>Задача : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt;скрипту необходимо знать о том, что записано в тегах &lt;br /&gt; &lt;li&gt;желательно, чтобы разбор шёл уже при загруженной странице &lt;br /&gt; &lt;li&gt;формат - MP3 &lt;br /&gt; &lt;/ul&gt;</description>
			<content:encoded>В общем использован такой код - PHP &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; &lt;?php &lt;br /&gt;&amp;nbsp;&amp;nbsp;function getTags($filename,$outencoding&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;$f = fopen($filename, &apos;rb&apos;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;rewind($f&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;fseek($f, -128, SEEK_END&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;$tmp = fread($f,128&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;fclose($f&amp;#41;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if ($tmp&amp;#91;125] == Chr(0&amp;#41; and $tmp&amp;#91;126] != Chr(0&amp;#41;&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;$format = &apos;a3TAG/a30NAME/a30ARTISTS/a30ALBUM/a4YEAR/a28COMMENT/x1/C1TRACK/C1GENRENO&apos;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;$format = &apos;a3TAG/a30NAME/a30ARTISTS/a30ALBUM/a4YEAR/a30COMMENT/C1GENRENO&apos;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;$id3tag = unpack($format, $tmp&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;$res = array(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;foreach($id3tag as $key=&gt;$value&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;$res&amp;#91;$key] = mb_convert_encoding($value, $outencoding, &apos;Windows-1251&apos;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;return $res; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;$mp3=$_GET&amp;#91;&apos;mp3&apos;]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if($mp3!=&apos;&apos;&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(strpos($mp3,&apos;.mp3&apos;&amp;#41;==(strlen($mp3&amp;#41;-4&amp;#41;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;$info = getTags($mp3,&apos;UTF-8&apos;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;$callback = htmlspecialchars($_GET&amp;#91;&apos;callback&apos;]&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;header(&apos;Content-type: text/javascript&apos;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;echo $callback.&apos;({ARTISTS:&quot;&apos;.$info&amp;#91;&apos;ARTISTS&apos;].&apos;&quot;,ALBUM:&quot;&apos; &lt;br /&gt;&amp;nbsp;&amp;nbsp;.$info&amp;#91;&apos;ALBUM&apos;].&apos;&quot;,NAME:&quot;&apos;.$info&amp;#91;&apos;NAME&apos;].&apos;&quot;,YEAR:&apos;.$info&amp;#91;&apos;YEAR&apos;].&apos;, GENRENO: &apos;.$info&amp;#91;&apos;GENRENO&apos;].&apos;}&amp;#41;;&apos;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt; ?&gt; &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Как параметры скрипту даются - callback - имя вызываемой функции JavaScript и mp3 - путь к файлу относительно скрипта &lt;br /&gt; Вот использованный JS : &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; function getID3info(filename,callback&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;scr = $(&quot;&lt;script&gt;&lt;/scr&quot;+&quot;ipt&gt;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;scr.attr(&quot;src&quot;,&quot;http&amp;#58;//nikrock.org.ua/player/id3.php?callback=&quot;+callback+&quot;&amp;mp3=&quot;+filename&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;$(&quot;head&quot;&amp;#41;.append(scr&amp;#41;; &lt;br /&gt; } &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Соответственно, можно проделать такой вызов : &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;function mycallback(id3&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;newBlock = $(&quot;&lt;div&gt;&quot;+id3.ARTISTS+&quot;-&quot;+id3.NAME+&quot;&lt;/div&gt;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;$(&quot;#block-views-season-hit-view-block .file&quot;&amp;#41;.append(newBlock&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(newBlock.height(&amp;#41;&gt;30&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;newBlock.html(&quot;&lt;marquee&gt;&quot;+newBlock.html(&amp;#41;+&quot;&lt;/marquee&gt;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;getID3info(hitURL.replace(&apos;http&amp;#58;//nikrock.org.ua/&apos;,&apos;../&apos;&amp;#41;,&quot;mycallback&quot;&amp;#41;; &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Где hitURL - путь к файлу на сайте, и его элементы меняются для соответствия пути относительно скрипта</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/parser_tegov_id3_na_php_js/2012-11-05-27</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/parser_tegov_id3_na_php_js/2012-11-05-27</guid>
			<pubDate>Mon, 05 Nov 2012 02:48:05 GMT</pubDate>
		</item>
		<item>
			<title>Галерея с комментированием отдельных изображений в Drupal 7</title>
			<description>В общем, потребовалось мне в сайте на Drupal 7 добавить фотоальбомы. Да при этом - необходимо, чтобы каждое фото можно было комментировать отдельно. Что из этого вышло - смотрите далее.</description>
			<content:encoded>Итак, что необходимо :&lt;ul&gt; &lt;br /&gt; &lt;li&gt;количество изображений галереи может быть произвольным &lt;br /&gt; &lt;li&gt;При клике на изображении необходимо показать его полный вариант &lt;br /&gt; &lt;li&gt;Комментирование как отдельных комментариев, так и галереи &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt; Обращу внимание на то, что последнее у меня пока реализовано лишь на стадии неотображения комментариев галереи в фотках, Но это дело техники - при загрузке страницы галереи добавить комментариям фоток класс hidden, а при выводе комментов фото - вернуть такие элементы назад :-) &lt;br /&gt;&lt;br /&gt; Использованы модули : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt;Multiupload Filefield Widget &lt;br /&gt; &lt;li&gt;Multiupload Imagefield Widget &lt;br /&gt; &lt;li&gt;Views (для вывода списка галерей) &lt;br /&gt; &lt;li&gt;Ctools (для запуска Views) &lt;br /&gt; &lt;li&gt;Colorbox &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt;&lt;br /&gt; Создан тип &quot;галерея&quot;, а в нем - поле изображения (машинное имя - &lt;i&gt;field_image&lt;/i&gt;, тип - изображение. виджет - multiupload, формат вывода - colorbox) &lt;br /&gt;&lt;br /&gt; Далее, для фильтрации комментариев создано текстовое поле &lt;i&gt;imageSrc&lt;/i&gt;, а в таблицу стилей добавлен такой код : &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; .field-name-field-imagesrc { display: none; } &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; Потом модифицирован файл jquery.colorbox.js (в настройках Colorbox установите использование несжатого варианта). &lt;br /&gt;&lt;br /&gt; Нас интересует функция publicMethod.load, а именно - её завершение. В принципе, код помещения комментариев в всплывающее окно можно поместить просто в конец добавляемого ей &lt;i&gt;onload&lt;/i&gt;, но опыт дал такой результат - размеры криво считает. Так что приюзал &lt;i&gt;setTimeout&lt;/i&gt; : &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;publicMethod.load = function (launched&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;... //не меняем &lt;br /&gt;&amp;nbsp;&amp;nbsp;} else if (isImage(href&amp;#41;&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;$(photo = new Image(&amp;#41;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;.addClass(prefix + &apos;Photo&apos;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;.error(function (&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;settings.title = false; &lt;br /&gt;&amp;nbsp;&amp;nbsp;prep($tag(div, &apos;Error&apos;&amp;#41;.html(settings.imgError&amp;#41;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;.load(function (&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;... // Код не меняем &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// Внедрённый код &lt;br /&gt;&amp;nbsp;&amp;nbsp;setTimeout(function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;//Комменты показываем только в галерее &lt;br /&gt;&amp;nbsp;&amp;nbsp;if($(&quot;body.node-type-gallery&quot;&amp;#41;.size(&amp;#41;&gt;0&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;lcontent = $(&quot;#cboxLoadedContent&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;//В качестве фильтра по значнию поля ImageSrc - адрес картинки &lt;br /&gt;&amp;nbsp;&amp;nbsp;imageURL = lcontent.find(&quot;img&quot;&amp;#41;.attr(&quot;src&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;commentsBlock = $(&quot;#comments&quot;&amp;#41;.clone(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;//Подставим его в форму отправки комментария &lt;br /&gt;&amp;nbsp;&amp;nbsp;commentsBlock.find(&quot;.field-name-field-imagesrc input&quot;&amp;#41;.val(imageURL&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;//Проходим по комментам, вырезая неугодные :-&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;commentsArr = commentsBlock.find(&quot;.comment&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;for(i=0;i&lt;commentsArr.size(&amp;#41;;i++&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;obj = commentsArr.eq(i&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if( obj.html(&amp;#41;.indexOf(imageURL&amp;#41;==-1&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;obj.remove(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;lcontent.append(commentsBlock&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;},300&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;#41;; &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/galereja_s_kommentirovaniem_otdelnykh_izobrazhenij_v_drupal_7/2012-10-17-26</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/galereja_s_kommentirovaniem_otdelnykh_izobrazhenij_v_drupal_7/2012-10-17-26</guid>
			<pubDate>Wed, 17 Oct 2012 01:16:26 GMT</pubDate>
		</item>
		<item>
			<title>Шаблон для сайта-визитки на PHP</title>
			<description>Вот, накидал для себя шаблон сайтов-визиток. Здесь предлагаю сам шаблон и объяснение логики для начинающих :-)</description>
			<content:encoded>Допустим, нам нужно несколько однотипных с точки зрения дизайна страниц - разумеется с разным контентом. &lt;br /&gt; При этом : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt;меню, страницы и дизайн должны меняться отдельно &lt;br /&gt; &lt;li&gt;Желательно - чтобы решение было как можно более простым &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt; В общем я решил так : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt; есть шаблон дизайна и пусть в него встраиваются заголовки (сайта и страницы) и контент. &lt;br /&gt; &lt;li&gt; страницы вынесены в отдельные файлы, валяются в специальной папке. &lt;br /&gt; &lt;li&gt; при попытке выбраться куда-то за пределы дозволенного кидаем 404 &lt;br /&gt; &lt;li&gt; чтение страницы реализуем, например в index.php (имя файла страницы - параметр page, по умолчанию - главная страница) &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt; Вот архив с исходниками : &lt;a class=&quot;link&quot; href=&quot;http://alexcoder.ucoz.ru/load/0-0-0-5-20&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://alexcoder.ucoz.ru/load/0-0-0-5-20&lt;/a&gt;</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/shablon_dlja_sajta_vizitki_na_php/2012-08-19-25</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/shablon_dlja_sajta_vizitki_na_php/2012-08-19-25</guid>
			<pubDate>Sat, 18 Aug 2012 23:22:09 GMT</pubDate>
		</item>
		<item>
			<title>Создание простейшего драйвера для WINDOWS.</title>
			<description>Пожалуй, первое с чем придётся столкнуться при этом - малое количество документации на русском. &lt;br /&gt; Но самый необходимый минимум найти вполне реально. Здесь же я рассмотрю написание на C драйвера, имитирующего нажатие клавиши ps/2 клавиатуры.</description>
			<content:encoded>Вводная : &lt;br /&gt; Необходимо отсылать приложению клавиши. Защита приложения не позволяет этого делать, перехватывая NtUserSendInput - т.е. любые API нам не помогут (если без из?бств) Остаётся работать на уровне ядра и прикинуться железкой. Т.к. на компе была ps/2 клава и у заказчика приложения - аналогично, причём переход на usb не планировался - то решено имитировать PS/2, благо инфы в инете всё же есть (начать стоит с &quot;i8042 controller refence manual&quot; как-то так :-)) &lt;br /&gt;&lt;br /&gt; Работаем так (алгоритм выявлен с помощью этих документов и реверсинженеринга простого ассемблерного x86-драйвера (собственно, невозможность собрать его под x64 и вынудила меня тут извращаться) : &lt;br /&gt; Ждем пока 7-й (младший бит порта 64h) не выставится в 0. &lt;br /&gt; Теперь - пока 6-й. &lt;br /&gt; Запишем в 64h команду 0x0d2 (она заставит считать посланный байт пришедшим с клавы) &lt;br /&gt; Опять ждём установки 6-го байта в 0. &lt;br /&gt; Пишем в 60h скан-код имитируемой клавиши &lt;br /&gt;&lt;br /&gt; Так проходимся по массиву скан-кодов (&lt;i&gt;ВАЖНО : СКАН-КОДЫ И ВИРТУАЛЬНЫЕ КОДЫ - ДВЕ РАЗНЫЕ ВЕЩИ.&lt;/i&gt;) таблицу скан кодов приводить не буду - я за развитие навыков поиска информации, тем более - легкодоступной :-) &lt;br /&gt;&lt;br /&gt; Попытки реализовать это из охренной библиотеки inpout32 не привели в лучшем случае ни к чему хорошему - т.к. какая-нибудь скотина в самый ответственный момент брала управление на себя и творила свои грязные делишки. &lt;br /&gt;&lt;br /&gt; Т.е. было надо строить драйвер. Сперва я нашёл вот это : &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerkXNmJ_&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerkXNmJ_&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerkXNmJ_&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerkXNmJ_&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerkXNmJ_&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Драйвер на masm32&apos;);$(&apos;#uSpoilerkXNmJ_&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerkXNmJ_&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerkXNmJ_&apos;)).val(&apos;[+] Драйвер на masm32&apos;);$(&apos;#uSpoilerkXNmJ_&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Драйвер на masm32&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;script src=&quot;http://pastebin.com/embed_js.php?i=zSbEJzXa&quot;&gt;&lt;/script&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Драйвер на masm32)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; Этот драйвер юзает KmdKit и masm32 - причём пойдёт не всякий masm. Я юзал тот что в Microsoft Visual Studio 2005 (не ржать :-) ). &lt;br /&gt;&lt;br /&gt; Но под 64-битными ОС оно не пахало - и пришлось-таки изобретать велосипед, вспоминать университетский курс чистой сишки, и упарываться MSDN-ом. &lt;br /&gt;&lt;br /&gt; Начнём с того, что нам нужен Windows DDK. И ещё крайне желательна утилита DebugView. Не бойтесь, всё бесплатно, пиратить не заставлю :-) &lt;br /&gt;&lt;br /&gt; Когда всё скачено - пора перейти к кодингу. &lt;br /&gt;&lt;br /&gt; Открой Windows DDK в меню пуск - дальше выбери платформу для компиляции (OS и архитектуру). &lt;br /&gt;&lt;br /&gt; Если у тебя Windows x64 - сразу обрадую тем, что придётся попотеть чтобы отладить драйвер, ведь без сертификатов система вообще хер чего сделает. Ладно, не ссы, прорвёмся (и не трубы :-) ) &lt;br /&gt;&lt;br /&gt; Вот код драйвера на C : &lt;br /&gt; &lt;script src=&quot;http://pastebin.com/embed_js.php?i=q5uajb6k&quot;&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt; Первая строка инклудит заголовки ntddk (да, я Кеп). &lt;br /&gt; Далее объявим макрос с именем устройства - для NT и для прочих. &lt;br /&gt;&lt;br /&gt; Потом с синтаксим древнего C (не С99 явно) пойдёт сам драйвер. Сначала описываются функции, в том числе - DriverEntry - точка входа (там ОС и получает базовую инфу о файле), CtlCreate (создание коннекта с внешними миром), CtlClose - и так ясно из предыдщего, DriverUnload - тоже понятно и CtlDispatch - вот она-то нам и нужна для обмена &lt;br /&gt;&lt;br /&gt; Из pIrpStack-&gt;Parameters.DeviceIoControl.IoControlCode мы получим, какой код управления нам кинули (если он равен IOCTL_WRITE, т.е. значению объявленного вверху макроса - обработаем данные). &lt;br /&gt;&lt;br /&gt; С помощью Irp-&gt;AssociatedIrp.SystemBuffer мы получили указатель на переданные нам данные. А данные такие : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt;Во первых - каждое значение - 1 байт &lt;br /&gt; &lt;li&gt;Первый байт (у которого нулевой индекс) - число сканкодов для отсылки &lt;br /&gt; &lt;li&gt;Дальше - сами сканкоды &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt;&lt;br /&gt; DbgPrint используется чтобы следить за состоянием из отладчика. Синтаксис аналогичен printf &lt;br /&gt;&lt;br /&gt; Для чтения/записи в порты в HAL есть 3 группы функций : READ_PORT_UCHAR/WRITE_PORT_UCHAR, READ_PORT_USHORT/WRITE_PORT_USHORT и READ_PORT_ULONG/WRITE_PORT_ULONG. &lt;br /&gt; Они работают соответственно с 1,2 и 4 байтами. (КРАЙНЕ ВАЖНО! ПУТАНИЦА МОЖЕТ ПРИВЕСТИ ТЗИНЧ ЗНАЕТ К ЧЕМУ :-) ) &lt;br /&gt;&lt;br /&gt; Сам драйвер компилируется при помощи команды build из DDK. &lt;br /&gt;&lt;br /&gt; Вот с сертификацией и установкой в ОС могут быть проблемы. Разберём по частям : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt;Если содавать программно с помощью CreateService и прочих - при вылете прога не удалит службу и в дальнейшем не сможет приконнектиться без траблов &lt;br /&gt; &lt;li&gt;В Windows 7 x64 неподписанный драйвер не запустить. Нужен хотя бы самописный сертификат &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt;&lt;br /&gt; Так что для первого я приюзал 2 *.bat-файла - driver/install.bat, driver/remove.bat &lt;br /&gt; &lt;script src=&quot;http://pastebin.com/embed_js.php?i=hZwxmUmJ&quot;&gt;&lt;/script&gt; &lt;br /&gt; Вот код установщика. Тут всё ясно, но что за dseo13b.exe? А эта программа впишет самописный сертификат. Гулится вполне легко. Есть и иные способы (гуглите по &quot;подписание драйверов windows 7 x64&quot;) &lt;br /&gt;&lt;br /&gt; Ну, а деисталлятор - тупо первые строки отсюда, удаляющие службу и файл &lt;br /&gt;&lt;br /&gt; Вот пример на дельфи. &lt;br /&gt; &lt;script src=&quot;http://pastebin.com/embed_js.php?i=V5YKFM1a&quot;&gt;&lt;/script&gt; &lt;br /&gt; Он тупо ждём 2.5 секунды, а потом шлёт клавишу Enter (скан код указан дважды - для нажатой codes[1] и отжатой codes[2]. Второй можно получить, добавив 128 к первому)</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/sozdanie_prostejshego_drajvera_dlja_windows/2012-08-06-24</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/sozdanie_prostejshego_drajvera_dlja_windows/2012-08-06-24</guid>
			<pubDate>Mon, 06 Aug 2012 12:59:41 GMT</pubDate>
		</item>
		<item>
			<title>Встраивание Lua в C# приложение.</title>
			<description>В общем возникла тут необходимость встроить какой-либо интерпретируемый язык в программу на C# (бота к одной онлайн-игре). (ввиду того, что его поведение - особенно при отладке нужно было часто менять - описывать его в основном участке как-то не хотелось). &lt;br /&gt; На Lua выбор пал, в общем-то случайно. Соответственно приюзал библиотеку &lt;a class=&quot;link&quot; href=&quot;http://luaforge.net/projects/luainterface/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://luaforge.net/projects/luainterface/&lt;/a&gt; о работе с которой дальше и пойдёт речь.</description>
			<content:encoded>Начнём с того,что скачанную библиотеку LuaInterface.dll необходимо подключить как ссылку к проекту. &lt;br /&gt; Первым делом, как всегда - Hello, World! (особые эстеты могут приюзать &quot;Привет, дятел!&quot;) &lt;br /&gt; Сразу же предлагаю выделить функции, которые будут передаваться в Lua в отельный класс. Так как по умолчанию Lua никак не может вывести информацию, то у нас это будет функция print_s (заменить стандартную в Lua print напрямую не удалось) &lt;br /&gt; &lt;script src=&quot;http://pastebin.com/embed_js.php?i=qSnM5rSv&quot;&gt;&lt;/script&gt; &lt;br /&gt; Теперь - основной код : &lt;br /&gt; &lt;script src=&quot;http://pastebin.com/embed_js.php?i=Y3u79HxE&quot;&gt;&lt;/script&gt; &lt;br /&gt; Как видите, тут происходит присоединение функций из lf - экземпляра LuaFunctions, а потом - вызов script.lua. Его содержимое может быть таково : &lt;br /&gt; &lt;script src=&quot;http://pastebin.com/embed_js.php?i=3fpSn69k&quot;&gt;&lt;/script&gt; &lt;br /&gt; Можно было и напрямую вызывать print_s, но я считаю, что лучше привести среду в максимальное соответствие стандартам. &lt;br /&gt; P.S. На правах неоплачиваемой рекламы - в качестве редактора для скриптов больше понравился &lt;a class=&quot;link&quot; href=&quot;http://www.sublimetext.com/2&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Sublime Text 2&lt;/a&gt; (карта кода - при больших объёмах весьма помогает, неплохое автозавершение, да и вообще много всего :-) )</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/vstraivanie_lua_v_c_prilozhenie/2012-07-29-23</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/vstraivanie_lua_v_c_prilozhenie/2012-07-29-23</guid>
			<pubDate>Sun, 29 Jul 2012 15:54:27 GMT</pubDate>
		</item>
		<item>
			<title>Freelance.ru RSS Filter</title>
			<description>Вы видели у freelance.ru фильтрацию категорий для rss-подписки? Я не нашёл :-) &lt;br /&gt; Для чего был написан свой фильтр. Описание - дальше</description>
			<content:encoded>Для начала встаёт вопрос того, что юзать :-) &lt;br /&gt; Я решил юзать php-скрипт, качающий подписку &lt;a class=&quot;link&quot; href=&quot;http://freelance.ru/rss/projects.xml&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://freelance.ru/rss/projects.xml&lt;/a&gt; и выдающий в результате подписку только из соответствующих категорий (тег category). &lt;br /&gt; Номера категорий будем передавать в виде параметра в GET. Если он не передан - выведем GUI для выбора категорий. &lt;br /&gt; Разумеется к такому делу надо прикрутить кеширование (чтобы генерировать меньше трафика). Оно реализовано просто : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt;каждый раз как качнули новое создаём фал кеша. Имя файла формируется из : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt; количества секунд unix эпохи поделенного на 300 (т.е. 5 минут). Разумеется без остатка &lt;br /&gt; &lt;li&gt; фильтра &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt; &lt;li&gt;если есть подходящий файл кеша - просто отобразим его &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt; Остальное в основном - малоинтересная работа с XML :-) &lt;br /&gt;&lt;br /&gt; В общем вот ссылка : &lt;a class=&quot;link&quot; href=&quot;http://freelance-ru-rss.netai.net/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://freelance-ru-rss.netai.net/&lt;/a&gt; &lt;br /&gt; Вот исходники : &lt;a class=&quot;link&quot; href=&quot;http://freelance-ru-rss.netai.net/sources.zip&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://freelance-ru-rss.netai.net/sources.zip&lt;/a&gt;</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/freelance_ru_rss_filter/2012-06-02-22</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/freelance_ru_rss_filter/2012-06-02-22</guid>
			<pubDate>Sat, 02 Jun 2012 19:29:08 GMT</pubDate>
		</item>
		<item>
			<title>Пишу приложение ВКонтакте</title>
			<description>В общем пост - о написании приложения для социальной сети ВКонтакте.</description>
			<content:encoded>С февраля у меня был неплохой такой перерыв в написании чего-либо в свои блоги. &lt;br /&gt; В общем-то причины просты : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt;писать в принципе не о чём - влом было за что-то браться &lt;br /&gt; &lt;li&gt;Иногда я переставал класть на учёбу (впрочем и сейчас вроде прекратил - всё ж зачётная неделя и сессия близки :-) ) &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt;&lt;br /&gt; Но меня таки выбесило отсутствие в плеере ВКонтакте вменяемой сортировки по исполнителю и многого другого. Вменяемого приложения-заменителя я не нашёл. Так что я снова взялся на кодинг :-) &lt;br /&gt;&lt;br /&gt; Первым делом предстояло выбрать на чём реализовать приложение : &lt;br /&gt; Desctop - вообще не вариант :-) &lt;br /&gt; Отдельный сайт - можно, но нефига не удобно :-) &lt;br /&gt; Flash - вариант. Но в итоге посланный далеко и надолго - ввиду наличия audio :-) &lt;br /&gt; Iframe - ага, на этом я и остановился. &lt;br /&gt;&lt;br /&gt; Придётся юзать хостинг под страницы приложения. Тут выбор полностью за вами. &lt;br /&gt;&lt;br /&gt; Далее создаём приложение : &lt;a class=&quot;link&quot; href=&quot;vkontakte.ru/apps.php?act=add&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;vkontakte.ru/apps.php?act=add&lt;/a&gt;. На странице настроек приложения нам придётся установить права, необходимые приложению (настраиваем необходимость установки, а потом и права). &lt;br /&gt;&lt;br /&gt; Начнём готовить заготовку для приложения. &lt;br /&gt;&lt;br /&gt; На странице, указанной для приложения как главная нам нужно будет : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt; &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&lt;script src=&quot;http&amp;#58;//vk.com/js/api/xd_connection.js?2&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; &lt;li&gt;вызвать VK.init(callback) &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt;&lt;br /&gt; Так как VK.init может выполнить callback-функцию до полной загрузки страницы, то я приделал такую вещь для вызова callback-а когда произойдёт оба события &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerNgY5eb&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerNgY5eb&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerNgY5eb&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerNgY5eb&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerNgY5eb&apos;)).val(&apos;[&amp;#92;&amp;#8211;] initialization.js&apos;);$(&apos;#uSpoilerNgY5eb&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerNgY5eb&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerNgY5eb&apos;)).val(&apos;[+] initialization.js&apos;);$(&apos;#uSpoilerNgY5eb&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] initialization.js&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; /* &lt;br /&gt;&amp;nbsp;&amp;nbsp;* Инициализация приложения &lt;br /&gt;&amp;nbsp;&amp;nbsp;* Проверяется иницализация VK API и загрузки документа &lt;br /&gt;&amp;nbsp;&amp;nbsp;* По готовности вызывается callback-функция main_init &lt;br /&gt;&amp;nbsp;&amp;nbsp;*/ &lt;br /&gt;&lt;br /&gt; function check_initialization(timeout,callback&amp;#41; &lt;br /&gt; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(window.vk_initialized &amp;&amp; window.w_loaded&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;clearTimeout(window.timeout_id&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch(err&amp;#41;{} &lt;br /&gt;&amp;nbsp;&amp;nbsp;finally &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;callback(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;window.timeout_id=setTimeout(function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;check_initialization(timeout,callback&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;timeout&amp;#41;; &lt;br /&gt; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; window.w_loaded=false; &lt;br /&gt; window.onload=function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;window.w_loaded=true; &lt;br /&gt; }; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; window.vk_initialized=false; &lt;br /&gt; VK.init(function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;window.vk_initialized=true; &lt;br /&gt; }&amp;#41;; &lt;br /&gt;&lt;br /&gt; check_initialization(100,function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;main_init(&amp;#41;; &lt;br /&gt; }&amp;#41;; &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=initialization.js)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; Смысл такой : для VK.init и window.onload создаются глобальные переменные которые выставятся в true их callback-ами (изначально в них false). Функция checkInitialization дёргает себя по таймеру раз в 100мс (задаётся её первым вызовом) и когда в обоих будет true - вызовет функцию main_init(). &lt;br /&gt;&lt;br /&gt; При выполнении main_init и позже мы уже : &lt;br /&gt; &lt;ul&gt; &lt;br /&gt; &lt;li&gt; уверены в том, что основная страница загрузилась &lt;br /&gt; &lt;li&gt; VK Api будет работать :-) &lt;br /&gt; &lt;/ul&gt; &lt;br /&gt;&lt;br /&gt; Далее нам наверняка понадобится функция vk.api &lt;br /&gt; Не буду её описывать - документацию можно найти. &lt;br /&gt;&lt;br /&gt; Сразу скажу - я реализовал для неё обертку, по умолчанию юзающий мой собственный callback в случае ошибки : &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerYKSLoe&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerYKSLoe&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerYKSLoe&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerYKSLoe&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerYKSLoe&apos;)).val(&apos;[&amp;#92;&amp;#8211;] core.js&apos;);$(&apos;#uSpoilerYKSLoe&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerYKSLoe&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerYKSLoe&apos;)).val(&apos;[+] core.js&apos;);$(&apos;#uSpoilerYKSLoe&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] core.js&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; /* &lt;br /&gt;&amp;nbsp;&amp;nbsp;* Обработчик ошибок API VK &lt;br /&gt;&amp;nbsp;&amp;nbsp;* Отсылает данные разработчику при помощи ajax и php-скрипта &lt;br /&gt;&amp;nbsp;&amp;nbsp;*/ &lt;br /&gt; function call_error(out&amp;#41; &lt;br /&gt; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;err_div=document.createElement(&apos;div&apos;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;err_div.id=&apos;err_div&apos;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;err_div.style.display=&apos;none&apos;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;document.body.appendChild(err_div&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;url=&quot;http&amp;#58;//audio-player.host56.com/err.php?response=&quot;+out.toString(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;$(&quot;#err_div&quot;&amp;#41;.load(url,function(&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;err_div=document.getElementById(&apos;err_div&apos;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;document.getElementById(&apos;err_div&apos;&amp;#41;.parentNode.removeChild(err_div&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;#41;; &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; /* &lt;br /&gt;&amp;nbsp;&amp;nbsp;* Обёртка для VK.api &lt;br /&gt;&amp;nbsp;&amp;nbsp;* Добавляет стандартный обработчик ошибок &lt;br /&gt;&amp;nbsp;&amp;nbsp;*/ &lt;br /&gt; function api(api,callback,error_callback&amp;#41; &lt;br /&gt; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;VK.api(api,function(data&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(data.response&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;alert(data.response&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;callback(data.response&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(data.error&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if( (error_callback!=undefined&amp;#41;&amp;&amp;(error_callback!=null&amp;#41; &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;error_callback(data.error&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;call_error(data.error&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;#41;; &lt;br /&gt; } &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=core.js)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; Смысл в том, чтобы в случае отсутствия заданного обработчика (ситуация не предусмотрена заранее) инфа об ошибке отсылалась разработчику (т.е. мне) при помощи &quot;стандартного&quot; обработчика. &lt;br /&gt;&lt;br /&gt; Напоследок : возможна автоматическая блокировка приложений по URL-у. Сам столкнулся. Придётся писать в техподдержку - т.к. в такой ситуации доступа к API нет и даже нормальная разработка не возможна :-(</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/pishu_prilozhenie_vkontakte/2012-05-27-21</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/pishu_prilozhenie_vkontakte/2012-05-27-21</guid>
			<pubDate>Sat, 26 May 2012 23:58:36 GMT</pubDate>
		</item>
		<item>
			<title>Написал скрипт подбора параметра гаусса для femm</title>
			<description>&lt;a class=&quot;link&quot; href=&quot;http://gauss.ucoz.ru/blog/modeliruem_gauss/2012-02-08-18&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://gauss.ucoz.ru/blog/modeliruem_gauss/2012-02-08-18&lt;/a&gt;</description>
			<content:encoded>&lt;a class=&quot;link&quot; href=&quot;http://gauss.ucoz.ru/blog/modeliruem_gauss/2012-02-08-18&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://gauss.ucoz.ru/blog/modeliruem_gauss/2012-02-08-18&lt;/a&gt;</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/napisal_skript_podbora_parametra_gaussa_dlja_femm/2012-02-08-20</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/napisal_skript_podbora_parametra_gaussa_dlja_femm/2012-02-08-20</guid>
			<pubDate>Tue, 07 Feb 2012 23:36:17 GMT</pubDate>
		</item>
		<item>
			<title>Транслятор Brainfuck в C#.</title>
			<description>Написал транлятор brainfuck в C#. Подробности - далее</description>
			<content:encoded>В общем, принцип работы : &lt;br /&gt; Есть оcновной C# код, читающий bf-файл, и обрабатывающий его. и второй файл - шаблон (описывающий конкретную реализацию операций и место подстановки полученного кода). &lt;br /&gt; Вот исходники &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerfNgl3s&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerfNgl3s&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfNgl3s&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfNgl3s&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerfNgl3s&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerfNgl3s&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfNgl3s&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerfNgl3s&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerfNgl3s&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt;&lt;br /&gt; using System; &lt;br /&gt; using System.Collections; &lt;br /&gt; using System.Linq; &lt;br /&gt; using System.Text; &lt;br /&gt; using System.IO; &lt;br /&gt; using System.Diagnostics; &lt;br /&gt;&lt;br /&gt; namespace ConsoleApplication1 &lt;br /&gt; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;class Program &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;static void WriteLine(string message&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;Console.WriteLine(message&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;static void WriteError(string message&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(message&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;Process.GetCurrentProcess(&amp;#41;.Kill(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Получаем C# код по коду brainfuck &lt;br /&gt;&amp;nbsp;&amp;nbsp;static string translateBrainFuck(string bf_code&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;string res = &quot;&quot;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Функции, которые должны быть описаны в шаблоне : &lt;br /&gt;&amp;nbsp;&amp;nbsp;// changeElement(value&amp;#41; - изменение значения элемента в текущей ячейке на value &lt;br /&gt;&amp;nbsp;&amp;nbsp;// memoryIndex - индекс текущей ячейки памяти &lt;br /&gt;&amp;nbsp;&amp;nbsp;// outputElement - вывод символа, соответствующего текущему значению ячейки памяти &lt;br /&gt;&amp;nbsp;&amp;nbsp;// inputElement - запись в ячейку кода введённого символа &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Заменыв формате &lt;br /&gt;&amp;nbsp;&amp;nbsp;//&lt;brainfuck&gt; &lt;C#&gt; &lt;cycle&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;//где : &lt;br /&gt;&amp;nbsp;&amp;nbsp;// cycle == 0 если конструкция не задаёт цикла &lt;br /&gt;&amp;nbsp;&amp;nbsp;// cycle == 1 если конструкция открывает цикл &lt;br /&gt;&amp;nbsp;&amp;nbsp;// cycle == 2 если конструкция закрывает цикл &lt;br /&gt;&amp;nbsp;&amp;nbsp;object&amp;#91;] replaces ={new string&amp;#91;]{&quot;+&quot;,&quot;changeElement(+1&amp;#41;;&quot;,&quot;0&quot;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;new string&amp;#91;]{&quot;-&quot;,&quot;changeElement(-1&amp;#41;;&quot;,&quot;0&quot;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;new string&amp;#91;]{&quot;&gt;&quot;,&quot;memoryIndex++;&quot;,&quot;0&quot;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;new string&amp;#91;]{&quot;&lt;&quot;,&quot;memoryIndex--;&quot;,&quot;0&quot;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;new string&amp;#91;]{&quot;.&quot;,&quot;outputElement(&amp;#41;;&quot;,&quot;0&quot;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;new string&amp;#91;]{&quot;,&quot;,&quot;inputElement(&amp;#41;;&quot;,&quot;0&quot;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;new string&amp;#91;]{&quot;&amp;#91;&quot;,&quot;while(getElement(&amp;#41;!=0&amp;#41;{&quot;,&quot;1&quot;}, &lt;br /&gt;&amp;nbsp;&amp;nbsp;new string&amp;#91;]{&quot;]&quot;,&quot;}&quot;,&quot;2&quot;}}; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Количество отступов &lt;br /&gt;&amp;nbsp;&amp;nbsp;int tabcount = 3; &lt;br /&gt;&amp;nbsp;&amp;nbsp;foreach (char chr in bf_code&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;int i = 0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string&amp;#91;] obj; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Поиск соответствующей символу замены &lt;br /&gt;&amp;nbsp;&amp;nbsp;int replaceNum = -1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;while(replaceNum==-1&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;obj=(string&amp;#91;]&amp;#41;replaces&amp;#91;i]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(obj&amp;#91;0]==chr.ToString(&amp;#41;&amp;#41;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;replaceNum=i; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;i++; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if (i &gt; replaces.Length&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteError(&quot;Fatal error: illegal character &apos;&quot; + chr.ToString(&amp;#41; + &quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;obj=(string&amp;#91;]&amp;#41;replaces&amp;#91;replaceNum]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string c_sharp = obj&amp;#91;1]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string cycle = obj&amp;#91;2]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string tabs = &quot;&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;int tabchange = 0; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Изменение отступа &lt;br /&gt;&amp;nbsp;&amp;nbsp;if (cycle == &quot;1&quot;&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;//Для начала цикла отступ поменяем уже после дописывания в код цикла &lt;br /&gt;&amp;nbsp;&amp;nbsp;tabchange = 1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;if (cycle == &quot;2&quot;&amp;#41; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;tabcount--; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Формируем табуляции &lt;br /&gt;&amp;nbsp;&amp;nbsp;for (i = 1; i &lt;= tabcount; i++&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{tabs += &quot;&amp;#92;t&quot;;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;tabcount += tabchange; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;res += tabs + c_sharp+&quot;&amp;#92;n&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;return res; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;static void Main(string&amp;#91;] args&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;if (args&amp;#91;0].IndexOf(&quot;help&quot;&amp;#41; != -1&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteError(&quot;this is translator from brainfuck to c#.&amp;#92;n Written by Pozharckey Alexander in 2011.&amp;#92;n May use Mono for compilation created C# code&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch { } &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Загрузка настроек из конфига &lt;br /&gt;&amp;nbsp;&amp;nbsp;StreamReader config = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + &quot;brainfuck.conf&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string pattern = config.ReadLine(&amp;#41;.Replace(&quot;THIS.&quot;,AppDomain.CurrentDomain.BaseDirectory&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string monoPath = config.ReadLine(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;config.Close(&amp;#41;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;string code = &quot;&quot;;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;string bf_code=&quot;&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string line = &quot;&quot;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;string brainfuckFile = &quot;&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;string outFName = &quot;&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;brainfuckFile = args&amp;#91;0]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;outFName = brainfuckFile.Replace(&quot;.bf&quot;, &quot;.cs&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;Environment.CurrentDirectory = Path.GetDirectoryName(brainfuckFile&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteError(&quot;Error in parameters.&amp;#92;n Use :&amp;#92;n bf.exe &amp;#92;&quot;brainfuckFileName&amp;#92;&quot; -c(if need to compile file&amp;#41;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;StreamReader file; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;Reading BRAINFUCK code file : &apos;&quot; + brainfuckFile + &quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;file = new StreamReader(brainfuckFile&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;bf_code = file.ReadToEnd(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;file.Close(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteError(&quot;Error while reading : &apos;&quot; + brainfuckFile + &quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;File &apos;&quot; + brainfuckFile + &quot;&apos; readed succesfully&quot;&amp;#41;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;Reading template : &apos;&quot;+pattern+&quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;file = new StreamReader(pattern&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;while ((line = file.ReadLine(&amp;#41;&amp;#41; != null&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;if (line.IndexOf(&quot;//body&quot;&amp;#41; == -1&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;code += line + &quot;&amp;#92;n&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;code += translateBrainFuck(bf_code&amp;#41; + &quot;&amp;#92;n&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;file.Close(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteError(&quot;Error while reading template &apos;&quot; + pattern + &quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;File &apos;&quot; + pattern + &quot;&apos; readed sucessfully&quot;&amp;#41;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;Writing C# result to : &apos;&quot; + outFName + &quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;StreamWriter outFile = new StreamWriter(outFName&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;outFile.Write(code&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;outFile.Close(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteError(&quot;Error while writing C# result to : &apos;&quot; + outFName + &quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;C# result succesfully writed to : &apos;&quot; + outFName + &quot;&apos;&quot;&amp;#41;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;if (args&amp;#91;1] == &quot;-c&quot;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Process monoProc = new Process(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.StartInfo.UseShellExecute = false; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.StartInfo.FileName = monoPath; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.StartInfo.Arguments = &quot;&amp;#92;&quot;&quot; + outFName + &quot;&amp;#92;&quot;&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.StartInfo.WorkingDirectory = Path.GetDirectoryName(outFName&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.StartInfo.RedirectStandardOutput = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.StartInfo.RedirectStandardError = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.Start(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;monoProc.WaitForExit(&amp;#41;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;Mono standart output : &amp;#92;n&quot;+monoProc.StandardOutput.ReadToEnd(&amp;#41;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;WriteLine(&quot;Mono error output : &amp;#92;n&quot; + monoProc.StandardError.ReadToEnd(&amp;#41;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch { } &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt; } &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; [/spiler] &lt;br /&gt; Код шаблона &lt;br /&gt; [spoiler] &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt;&lt;br /&gt; using System; &lt;br /&gt; using System.Collections.Generic; &lt;br /&gt; using System.Linq; &lt;br /&gt; using System.Text; &lt;br /&gt; using System.Collections; &lt;br /&gt;&lt;br /&gt; namespace CnsoleApp &lt;br /&gt; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;class Program &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;static ArrayList memory = new ArrayList(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;static int memoryIndex = 0; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;static void changeElement(int value&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;memory&amp;#91;memoryIndex] = (int&amp;#41;memory&amp;#91;memoryIndex] + value; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;memory.Add(value&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;static int getElement(&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;return (int&amp;#41;memory&amp;#91;memoryIndex]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;return 0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;static void inputElement(&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;ConsoleKeyInfo k = Console.ReadKey(&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;int code=(int&amp;#41;(Encoding.ASCII.GetBytes(new char&amp;#91;]{k.KeyChar}&amp;#41;&amp;#91;0]&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;memory&amp;#91;memoryIndex]=code; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;memory.Add(code&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;static void outputElement(&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;int iEL=(int&amp;#41;memory&amp;#91;memoryIndex]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;byte&amp;#91;] el = { (byte&amp;#41;iEL }; &lt;br /&gt;&amp;nbsp;&amp;nbsp;char chr = Encoding.ASCII.GetChars(el&amp;#41;&amp;#91;0]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;Console.Write(chr&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;static void Main(string&amp;#91;] args&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;int memoryIndex=0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//body &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Console.Write(&quot;&amp;#92;n&quot;&amp;#41;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt; } &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; В одной папке с исполняемым файлом должен быть конфиг (brainfuck.conf) такого вида : &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt; &lt;br /&gt; &lt;путь к файлу шаблона&gt; &lt;br /&gt; &lt;путь к компилятору Mono&gt; &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; При этом если шаблон находится в директрии, заданной относительно директории транслятора, то мы можем заменить ее на &lt;b&gt;THIS.&lt;/b&gt; &lt;br /&gt;&lt;br /&gt; Запуск : &lt;br /&gt; bf.exe &lt;полный путь к bf-файлу&gt; -c &lt;br /&gt; Ключ -с нужен только, если вы хотите скомпилировать полученный C# код в Mono. &lt;br /&gt;&lt;br /&gt; P.S. Сам транслятор собирается и работает как с Visual Studio C# так и в Mono &lt;br /&gt;&lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://alexcoder.ucoz.ru/load/0-0-0-4-20&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;VisualStudio - проект транслятора&lt;/a&gt;</content:encoded>
			<link>https://alexcoder.ucoz.ru/news/transljator_brainfuck_v_c/2012-01-03-19</link>
			<dc:creator>alexKniaz</dc:creator>
			<guid>https://alexcoder.ucoz.ru/news/transljator_brainfuck_v_c/2012-01-03-19</guid>
			<pubDate>Mon, 02 Jan 2012 23:42:58 GMT</pubDate>
		</item>
	</channel>
</rss>