<?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; программирование</title>
	<atom:link href="http://shura.luberetsky.ru/tag/programmirovanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://shura.luberetsky.ru</link>
	<description></description>
	<lastBuildDate>Sun, 05 Sep 2010 17:06:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Чудо китайской инженерной мысли</title>
		<link>http://shura.luberetsky.ru/2010/08/30/chudo-kitajjskojj-inzhenernojj-mysli/</link>
		<comments>http://shura.luberetsky.ru/2010/08/30/chudo-kitajjskojj-inzhenernojj-mysli/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 18:31:34 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[паяльный бред]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2885</guid>
		<description><![CDATA[Ковыряю сейчас метеостанцию RST Meteoscan Pro с целью вытащить самописной программкой по USB данные наблюдений. Удивительно, но в Дойчланде такой же девайс стоит 100 евро и продается в обычных супермаркетах Маркткауф. Единственная разница &#8211; нашлепка на морде, в Германии она называется Mebus TE923 (а в Штатах &#8211; Honeywell TE923 или Irox USB Pro, продающиеся по [...]]]></description>
			<content:encoded><![CDATA[<p>Ковыряю сейчас метеостанцию <a href="http://market.yandex.ru/search.xml?text=RST+Meteoscan+Pro+923&#038;hid=477439&#038;srnum=2">RST Meteoscan Pro</a> с целью вытащить самописной программкой по USB данные наблюдений. Удивительно, но в Дойчланде такой же девайс стоит 100 евро и продается в обычных супермаркетах Маркткауф. Единственная разница &#8211; нашлепка на морде, в Германии она называется Mebus TE923 (а в Штатах &#8211; Honeywell TE923 или Irox USB Pro, продающиеся по 200 баксов). Реально же на платах внутри написано Hideki TE923.</p>
<p>В общем, китайцы удивляют по полной с самого начала. Вместо того, чтобы &#8220;вписать&#8221; метеоданные в дескриптор HID-устройства (это не ругательство, а класс USB-устройств, очень полезных по жизни), они развернули &#8220;поверх&#8221; HID целый протокол обмена данными, способный &#8220;вписать&#8221; 32 байта &#8220;реальных&#8221; данных в 56 байт &#8211; это 7 восьмибайтовых пакетов, максимально допустимых для HID-устройства. Как мне кажется, это &#8211; вариация на тему какого-то древнего протокола обмена по RS-232, отсюда вылезли и обязательные даже в восьмибайтовом пакете контрольные суммы, и переменная длина &#8220;значащих&#8221; байт в пакете &#8211; например, в одном пакете имеется 7 &#8220;значащих&#8221; байт и 1 байт длины, в другом &#8211; значащий байт только один.</p>
<p>Информацию о протоколе обмена удалось найти на одном немецком форуме, снимаю шляпу перед нашим немецко-фашистским товарищем, зареверсинжинирившим это чудо. А о себе могу сказать лишь то, что мне удалось сделать то же самое с немецким языком (да, понять немецкий язык проще, чем бегающие туда-сюда по USB пакеты) и пообещать выложить на своем сайте описание формата данных метеостанции.</p>
<p>Кроме того, в процессе поиска информации об этой метеостанции в Интернете, нашлись очень интересные материалы о качестве девайса. Например, в датчике скорости ветра (ветряк и оптопара из мышки) китайцы сэкономили на конденсаторе, поэтому при штиле, когда датчик не крутится с бешеной скоростью, оптопара колеблется в &#8220;промежуточных&#8221; положениях, а индикатор показывает, что на улице бушует страшный ураган. Говорить о &#8220;высококачественном&#8221; радиоприемном модуле &#8211; сверхрегенераторе на двух транзисторах без кварца &#8211; я даже не буду.</p>
<p>Кстати, никак не доходят руки до окончания обещанной для <a href="http://www.easyelectronics.ru">EasyElectronics</a> статьи про USB. Ни у кого нет идей, какой можно сделать интересный демонстрационный девайс, который стоило бы &#8220;научить&#8221; двусторонему обмену данными с компьютером? Очередной ЖК-индикатор с выводом текущей песни в Винампе делать не хочется, да и Винампом я не пользуюсь.</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/08/30/chudo-kitajjskojj-inzhenernojj-mysli/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Восстание машин</title>
		<link>http://shura.luberetsky.ru/2010/08/29/vosstanie-mashin/</link>
		<comments>http://shura.luberetsky.ru/2010/08/29/vosstanie-mashin/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 19:42:28 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[запретите им]]></category>
		<category><![CDATA[паяльный бред]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2880</guid>
		<description><![CDATA[infowatch порадовал сегодня крайне интересным постом про защищенность современного общества от компьютерных сбоев. Конечно, эти &#8220;компьютерные сбои&#8221; будут выглядеть несколько иначе, чем показывают в голивудском кино &#8211; например, вряд ли нам в ближайшем будущем придется увидеть массово взрывающиеся с &#8220;синим экраном&#8221; писишки или &#8220;обвал букв&#8221; на экране. Конечно, писишка или какой-нибудь яблофон нам знакомы, а [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://users.livejournal.com/infowatch/profile"><img src="http://stat.livejournal.com/img/userinfo.gif" alt="[info]" width="17" height="17" border="0" align="absmiddle"/></a><a href="http://users.livejournal.com/infowatch/"><b>infowatch</b></a> порадовал сегодня крайне интересным <a href="http://infowatch.livejournal.com/149439.html">постом</a> про защищенность современного общества от компьютерных сбоев. Конечно, эти &#8220;компьютерные сбои&#8221; будут выглядеть несколько иначе, чем показывают в голивудском кино &#8211; например, вряд ли нам в ближайшем будущем придется увидеть массово взрывающиеся с &#8220;синим экраном&#8221; писишки или &#8220;<a href="http://en.wikipedia.org/wiki/Cascade_virus">обвал букв</a>&#8221; на экране. Конечно, писишка или какой-нибудь яблофон нам знакомы, а то и непонятны, и именно от них обыватель больше всего ожидает какой-то &#8220;подлянки&#8221;. Но выкидываемые таким оборудованием фокусы &#8211; ничто по сравнению с тем, что может вызвать отказ более незаметных компьютеров.</p>
<p>Речь идет про окружающие нас микроконтролеры. По многим подсчетам, у &#8220;современного цивилизованного человека&#8221; в квартире и машине имеется около <a href="http://shura.luberetsky.ru/2010/02/09/pro-mikrokontrolery/">50 микроконтролеров</a>. Каждый такой микроконтролер &#8211; это небольшой компьютер, снабженный собственным программным обеспечением, которое, к сожалению, подвержено ошибкам. Чтобы не быть голословным, приведу небольшой пример. </p>
<p>Думаю, многие видели на дорогах чудо отечественного автопрома под названием <a href="http://uaz.ru/models/uaz_patriot/">УАЗ Патриот</a> (а кто не видел, может мельком ознакомиться с ТТХ по ссылке). В общем, по массогабаритным характеристикам это типичный представитель класса БЧД (большой черный джип), а по потрясающей маневренности и отличной управляемости &#8211; ближайший родственник ЗиЛ-130. А вот &#8211; шокирующая правда (из газеты <a href="http://www.autoreview.ru/archive/2007/24/uaz_abs/">Авторевю</a>):</p>
<p><em>Дмитровский полигон, тест Авторевю, внедорожник УАЗ Патриот ходом штурмует заснеженный подъем. Половина уже пройдена, осталось еще немного, еще чуть-чуть… И вдруг — хр-р-р! — у УАЗа выбивает передачу в «раздатке», и машина остается без тяги. Ногу на тормоз, чтобы не скатиться вниз! Педаль встает колом, а Патриот лавиной катится вниз, неумолимо набирая ход. Поберегись! Почуяв неладное, фотограф отскакивает в сторону, а УАЗ, откатившись на десять метров от подножия склона, наконец-то «включает» тормоза и останавливается.</em></p>
<p>Оттуда же, из <a href="http://www.autoreview.ru/archive/2008/10/uaz/">другой статьи</a>:</p>
<p><em>Как показали дополнительные заводские тесты, которые ульяновцы провели после публикации АР, время отключения тормозной системы после длительной пробуксовки может достигать 10 секунд. Очень опасно! В чем причина? Заводчане отмалчиваются, но нам стало известно, что доводку программы управления АБС для Патриота компания Bosch поручила… студенту-практиканту. В принципе это обычная практика для крупных компаний, которым фирмы «третьего мира» заказывают какие-нибудь малобюджетные работы. Но странно, что ни тесты самой фирмы Bosch, ни заводские испытания УАЗа этой прорехи в программном обеспечении не выявили.</em></p>
<p>Решайте сами, а мне не хотелось бы оказаться на тормозном пути двухтонного внедорожника с &#8220;зависшей&#8221; АБС. К чести УАЗовских конструкторов, хочется добавить, что проблемы с раздаточной коробкой и АБС на более новых машинах уже решены, и вообще по количеству внедренных с начала производства доработок &#8220;Патриот&#8221; мог бы дать фору многим другим отечественным автомобилям (которые ездят с хорошо известными &#8220;косяками&#8221; уже десятки лет). К сожалению, далеко не все владельцы УАЗов 2007 года выпуска знают о дефекте АБС &#8211; многие &#8220;забивают&#8221; на дилерское техобслуживание сразу после покупки.</p>
<p>Наверное, от глюков прошивки УАЗа можно спастись, не выходя на улицу (а жратву покупать в &#8220;Утконосе&#8221;, хе-хе). Но кто гарантирует, что такой же студент-практикант не заложил подобную &#8220;мину замедленного действия&#8221; в микроволновку или гидромассажную ванну с десятком программ? Кто может поручиться, что стиральная машина не зальет соседей внизу, а музыкальный центр не врубит марш &#8220;Гори, еврей!&#8221;, когда рядом будут проходить озлобленные антифашисты? А как вы будете себя чувствовать, когда курьер из &#8220;Утконоса&#8221; на ваших глазах провалится в шахту лифта? И что вы будете делать, когда кондиционер с термостатом, сговорившись, решат вас немножко заморозить?</p>
<p>Многие, наверное, никогда не задумывались над этим, но современные методы разработки и тестирования программного обеспечения не гарантируют того, что это программное обеспечение будет работать безошибочно. Более того, сейчас &#8220;безошибочность&#8221; софта уже не является таким конкурентным преимуществом, как дешевизна и актуальность &#8211; соответственно, усилия разработчиков направлены на быстрый и недорогой выпуск ПО &#8211; как минимум, в самом широком сегменте рынка &#8211; приложениях для персональных компьютеров. В конце концов, всегда можно выпустить &#8220;патч&#8221;.</p>
<p>Эти методики проникают и в более &#8220;ответственные&#8221; приложения. Как заметил <a href="http://users.livejournal.com/infowatch/profile"><img src="http://stat.livejournal.com/img/userinfo.gif" alt="[info]" width="17" height="17" border="0" align="absmiddle"/></a><a href="http://users.livejournal.com/infowatch/"><b>infowatch</b></a>, в следующий раз прошивку для АБС будет делать аутсорсинговая фирма, &#8220;у которой в штате тот же один практикант плюс три юриста&#8221;. А затем &#8211; и индусы подключатся. Возможно, критикуемый в тамошних комментах &#8220;несовременный&#8221; метод, когда программу пишет собирающийся на пенсию дядечка, менее подвержен ошибкам, чем перекладывание ответственности, называемое модным словом &#8220;аутсорсинг&#8221;.</p>
<p>Но на мой взгляд, это не столь страшно, сколько постоянно растущая сложность встроенных систем. Если на УАЗе еще можно вытащить предохранитель и послать Bosch с ее практикантами в известном направлении (у нас нет дорог &#8211; одни направления), то в любой современной импортной машине компьютер еще и проверит уровень алкоголя в выдыхаемом воздухе, напомнит о необходимости пристегнуться, скажет &#8220;до сервиса осталось 100 километров&#8221;, а если водитель заснет за рулем, несмотря на алкотестер &#8211; еще и подложит подушечку. Надо ли говорить, что без этого компьютера вы просто не запустите двигатель?</p>
<p>Помните закон Брукса про количество связей в коллективе? То же самое верно и для числа связей между модулями программы. Предположим, программист пишет программу из 7 как-то взаимосвязанных частей (большее количество трудно держать в голове) &#8211; например, работающую с 7 какими-нибудь датчиками. Тогда между ними имеется 7*6/2=21 различная &#8220;связь&#8221; (например, &#8220;если опросить датчик А, то следующее показание датчика Б будет на 1 завышено&#8221;) &#8211; а это количество уже удержать в голове нельзя и можно допустить ошибку, просто забыв учесть какое-либо из них. Современные языки программирования и &#8220;соглашения о кодировании&#8221; позволяют свести количество связей между модулями к минимуму (предположим, к 6 вместо 21) &#8211; но о каких &#8220;паттернах проектирования&#8221; речь может идти в случае микроконтролера с парой килобайт ОЗУ? Если же уйти от &#8220;мелких&#8221; PIC и AVR к младшим ARM &#8211; то тут мы столкнемся со сложностью самой аппаратной платформы, не уступающей неплохому компьютеру 70-х годов. К тому же, если захочется использовать на этом ARM какую-нибудь адаптированную ОС &#8211; нет никаких гарантий, что в ней самой нет ошибок.</p>
<p>Не знаю, как будет называться OS/360 применительно к встроенному ПО (а скорее всего, каждый эмбеддер создаст &#8220;свою&#8221;, с которой и натрахается вволю), а обращу внимание еще на один прискорбный факт &#8211; сейчас практически нет эффективных способов проверки программного обеспечения на безошибочность. Как говорил Дейкстра, тестирование может лишь выявить ошибки, но не доказать их отсутствие. С другой стороны, столь любимое Дейкстрой формальное доказательство правильности программ совершенно непригодно для использования.</p>
<p>В мире hardware этот этап прошли в середине 90-х, после обнаружения ошибки FPU в первых Pentium. Тогда из обширного багажа знаний уехавших на Запад советских ученых были извлечены математические методы проверки работы электронных схем, не требовавшие перебора всех вариантов входных данных &#8211; и благодаря им удалось внедрить такое тестирование для всех новых разработок. Думаю, что и для программ существуют аналогичные методики &#8211; в конце концов, любая программа для компьютера представляет собой лишь конечный автомат, разве что с невероятным количеством состояний.</p>
<p>Интересно, каким будет программный сбой, который заставит внедрить &#8220;контроль качества&#8221; в разработке программ? Думаю, что даже если Берлускони улетит в Везувий на презентованном ему в свое время Путиным &#8220;Патриоте&#8221;, никто и не почешется. А вот упавший в Большой Каньон Обама &#8211; это уже поинтереснее. Подарит ли Медведев Обаме замечательный российский джЫп (с негротюнингом, разумеется)?</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/08/29/vosstanie-mashin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Да здравствует препроцессор C!</title>
		<link>http://shura.luberetsky.ru/2010/08/05/da-zdravstvuet-preprocessor-c/</link>
		<comments>http://shura.luberetsky.ru/2010/08/05/da-zdravstvuet-preprocessor-c/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 18:01:45 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2812</guid>
		<description><![CDATA[В журнале &#8220;Наука и жизнь&#8221; в конце 80-х печатали статьи по программированию. Как-то было опубликовано замечательное предложение определить в C такие вот макросы:

#define BEGIN {
#define END }

и после этого писать, как на богомерзком Паскале. А вот сегодня нашел логичное продолжение этого подхода:

// Находим среднее арифметическое
срака посередине стало шняга кагбэ ХУЙ да;
туды_сюды в_общем какая_то козёл стал [...]]]></description>
			<content:encoded><![CDATA[<p>В журнале &#8220;Наука и жизнь&#8221; в конце 80-х печатали статьи по программированию. Как-то было опубликовано замечательное предложение определить в C такие вот макросы:</p>
<p><code><br />
#define BEGIN {<br />
#define END }<br />
</code></p>
<p>и после этого писать, как на богомерзком Паскале. А вот сегодня нашел логичное <a href="http://lurkmore.ru/Копипаста:Быдлокод-ГСР">продолжение</a> этого подхода:</p>
<p><code><br />
// Находим среднее арифметическое<br />
срака посередине стало шняга кагбэ ХУЙ да;<br />
туды_сюды в_общем какая_то козёл стал норма; козёл почти фигня; козёл и_ещё_больше ну<br />
начал<br />
    посередине присобачить шнягу кагбэ козёл да;<br />
    Подрыхнуть в_общем чуть_чуть ну;<br />
кончил<br />
посередине стало посередине хуякс фигня;<br />
Слышь_это "\n\nСреднее арифметическое элементов массива: " эээ посередине эээ бля;<br />
</code></p>
<p>Надо применить такой подходец на практике, надо.</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/08/05/da-zdravstvuet-preprocessor-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>В защиту аналитической геометрии</title>
		<link>http://shura.luberetsky.ru/2010/08/04/v-zashhitu-analiticheskojj-geometrii/</link>
		<comments>http://shura.luberetsky.ru/2010/08/04/v-zashhitu-analiticheskojj-geometrii/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 16:41:42 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2803</guid>
		<description><![CDATA[Подкинули ссылку на статью Андрея Панова в &#8220;Ведомостях&#8221; по поводу того, что в наших ВУЗах называется &#8220;высшей математикой&#8221;.
http://www.vedomosti.ru/newspaper/article/2010/07/22/241292
Автор утверждает, что: 
Студенты, учившие математику в вузах, должны уметь читать и рисовать графики, не путаться в процентах, разбираться в азах теории вероятности и статистики, возможно, понимать, что такое производная. Они обязательно должны уметь решать математические задачи не [...]]]></description>
			<content:encoded><![CDATA[<p>Подкинули ссылку на статью Андрея Панова в &#8220;Ведомостях&#8221; по поводу того, что в наших ВУЗах называется &#8220;высшей математикой&#8221;.</p>
<p><a href="http://www.vedomosti.ru/newspaper/article/2010/07/22/241292">http://www.vedomosti.ru/newspaper/article/2010/07/22/241292</a></p>
<p>Автор утверждает, что: </p>
<p><em>Студенты, учившие математику в вузах, должны уметь читать и рисовать графики, не путаться в процентах, разбираться в азах теории вероятности и статистики, возможно, понимать, что такое производная. Они обязательно должны уметь решать математические задачи не только на листе бумаги, но и с помощью компьютера. Только и всего.</em></p>
<p>Вообще говоря, все это входит в школьную программу, и то, что это предлагается изучать в ВУЗах &#8211; свидетельствует только о том, что можно прекрасно закончить школу и поступить на какой-нибудь псих- или экономфак, не зная, что такое проценты и логарифмы. Но меня немного покоробило другое утверждение, о том, что </p>
<p><em>аналитическая геометрия &#8230; даже в курсе мехмата выглядит как трогательный рудимент</em></p>
<p>Вот насчет этого трогательного рудимента я и хочу высказаться. Что такое &#8220;ангем&#8221; на мехмате (на первом курсе, кстати говоря)? Это декартовы координаты на плоскости и в пространстве, скалярное и векторное произведения, уравнения прямой и плоскости, аффинные преобразования, немного &#8211; о проективных координатах и проективных преобразованиях, наконец, классификация кривых и поверхностей второго порядка.</p>
<p>А вот теперь, вооружившись этими знаниями, сравним программу по ангему с вот этой шпаргалочкой:</p>
<p><a href="http://pshenichny.livejournal.com/26954.html">http://pshenichny.livejournal.com/26954.html</a></p>
<p>Или вот с этой (секция &#8220;матемачиха и линейное щастье&#8221;):</p>
<p><a href="http://blog.gamedeff.com/?p=64">http://blog.gamedeff.com/?p=64</a></p>
<p>О чем речь? О том, что кажущийся рудиментом ангем оказывается необходим, к примеру, программисту (и не только &#8220;игровому&#8221; &#8211; в любой области, где речь идет о каких-то координатах и какой-то графике). Хотя что может знать об этом человек, занимающийся экономикой и &#8220;чистой&#8221; математикой (точнее, дифференциальными уравнениями)?</p>
<p>Мне лично интересно: если начать обучение на мехмате сразу с линейных и гильбертовых пространств произвольной размерности (и не упоминать даже про R^n), кто после этого всего сможет сказать, откуда &#8220;растут ноги&#8221; у скалярного произведения (которое в произвольном гильбертовом пространстве считается &#8220;данным свыше&#8221; и никак не связано с длиной отрезка в обычном понимании)? Конечно, это красиво с математической точки зрения, но все-таки необходимы и простейшие примеры, возникающие из того же ангема, тем более, что они имеют практическое применение (с которым выпускник мехмата вполне может столкнуться).</p>
<p>PS Кстати, пользуясь случаем, хочу пнуть Javascript (точнее, ECMAscript) за отсутствие там возможности определить нормальные классы с нормальным operator+. Приходится либо писать такие извращения:</p>
<p><code>a = new SFVec3f(a1, a2, a3);<br />
b = new SFVec3f(b1, b2, b3);</p>
<p>c = a.divide(2).add(b.divide(4)).multiply(3);</code></p>
<p>Кстати, как называется такая запись? Есть &#8220;инфиксная&#8221;: с = 3*(a/2 + b/4), есть &#8220;польская&#8221; или &#8220;постфиксная&#8221;, знакомая многим по программируемым калькуляторам: 3 a 2 / b 4 / + *, есть префиксная: * 3 + / a 2 / b 4, такое чудо я боюсь сравнивать с чем-то осмысленным.</p>
<p>&#8230;либо под каждый временный объект заводить переменную и писать так:</p>
<p><code>t1 = a.divide(2);<br />
t2 = b.divide(4);<br />
t3 = t1.add(t2);<br />
c = t3.multiply(3);</code></p>
<p>Оба способа мне не нравятся, но ничего приличного сделать не получается :(</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/08/04/v-zashhitu-analiticheskojj-geometrii/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Про диалектический материализм и ПО для Android</title>
		<link>http://shura.luberetsky.ru/2010/07/29/pro-dialekticheskijj-materializm-i-po-dlya-android/</link>
		<comments>http://shura.luberetsky.ru/2010/07/29/pro-dialekticheskijj-materializm-i-po-dlya-android/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 16:09:03 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[паяльный бред]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2742</guid>
		<description><![CDATA[Есть такая фраза, являющаяся непреложной истиной для каждого сторонника диалектического материализма &#8211; &#8220;Бытие определяет сознание&#8221;. Естественно, всякие идеалисты используют противоположные вариант &#8211; &#8220;Сознание определяет бытие&#8221;, после чего жестоко ругаются с материалистами.
А вот в разработке ПО, видимо, можно сформулировать аналогичную вещь: &#8220;Возможности железа определяют методику разработки ПО&#8221;. Я об этом писал на примере Arduino, а вот [...]]]></description>
			<content:encoded><![CDATA[<p>Есть такая фраза, являющаяся непреложной истиной для каждого сторонника диалектического материализма &#8211; &#8220;Бытие определяет сознание&#8221;. Естественно, всякие идеалисты используют противоположные вариант &#8211; &#8220;Сознание определяет бытие&#8221;, после чего жестоко ругаются с материалистами.</p>
<p>А вот в разработке ПО, видимо, можно сформулировать аналогичную вещь: &#8220;Возможности железа определяют методику разработки ПО&#8221;. Я об этом писал на примере Arduino, а вот еще пример, не менее поучительный. Недавно видел у <a href="http://users.livejournal.com/belnetmon/profile"><img src="http://stat.livejournal.com/img/userinfo.gif" alt="[info]" width="17" height="17" border="0" align="absmiddle"/></a><a href="http://users.livejournal.com/belnetmon/"><b>belnetmon</b></a> ссылку на статью о <a href="http://habrahabr.ru/blogs/android/99323/">разработке ПО для мобильной операционки Android</a>. Что же нам в ней советуют?</p>
<p><em>Ресурсы нужно экономить.<br />
Нужно мгновенно выдавать реакцию на действия и поддерживать обратную связь с пользователем.<br />
Производительность приложения главная цель. Нужно постоянно в процессе разработки оптимизировать производительность, не оставляя эту работу на потом.<br />
Нужно измерять время выполнения, протоколировать и анализировать ход выполнения приложения, узкие участки кода, возникновения событий, выделение памяти, время жизни объектов. Что не измеряется, то нельзя оптимизировать.<br />
Избегайте создания лишних объектов.<br />
По возможности делайте методы статичными.<br />
Используйте прямой доступ к полям вместо методов посредников.<br />
Используйте static final для констант.<br />
Не используйте enum там, где достаточно обычной переменной целого типа.</em></p>
<p>Все это вытекает из возможностей &#8220;железа&#8221;. Современные мобильники и КПК сравнимы по производительности с &#8220;персоналками&#8221; где-то десятилетней давности (причем очень &#8220;грубо&#8221; &#8211; например, над 24 доступными для процесса мегабайтами ОЗУ в 2000-м году посмеялись бы). Вспомним, что происходило в программировании в те далекие времена.</p>
<p>Бывшие паскалисты (спасибо дядьке Фаронову!) успешно освоили &#8220;программирование мышкой&#8221; в Delphi. Сишники разделились на два лагеря &#8211; первые вслед за паскалистами поклялись в вечной любви к фирме Borland и пользовались CBuilder, вторые забыли TurboC, как страшный сон, и переметнулись в стан любителей Microsoft Visual Studio 6.0. С++ использовался в варианте &#8220;C on steroids&#8221; &#8211; слова &#8220;инкапсуляция&#8221;, &#8220;наследование&#8221; и &#8220;полиморфизм&#8221; до многих доходили слабо, зато &#8220;заклинания&#8221; типа TForm1.OnClick() весьма понравились. Надо ли говорить, что полноценного стандарта C++ не было реализовано нигде, библиотека STL зачастую отличалась непредсказуемым поведением (например, в книжке Б. Кернигана и Р. Пайка &#8220;Практика программирования&#8221;, вышедшей в 1998 году, приводится пример, когда один из Windows-компиляторов С++ был снабжен ужасно медленной версией входящего в STL дека), да и поведение компиляторов иногда оставляло желать лучшего (кто помнит, почему не стоит писать &#8220;for(int i=0; i < N; i++)" в VC++ 6.0?). Языки программирования, отличные от C и Pascal, в нашем Отечестве не котировались (по причине неведомо кем культивируемой веры в крутость русских программистов), а в Буржундии к тому времени уже по достоинству оценили хоть и более медленные, зато более "безопасные" Java и Visual Basic. Кстати, там же, в Буржундии, как раз к 2000-му году вылезли из своих нор мамонты и динозавры - знатоки FORTRAN, поправили где надо год и отправились на заслуженный отдых, пока им в аду прогулы считают.</p>
<p>Замечу, что "интерпретируемые" языки, с "безопасными" типами, где программисту полностью закрыт доступ к опасным возможностям, появились лишь по той причине, что буржуины всегда умели считать деньги и прекрасно понимали, что дешевле нанять десяток индусов, чем двух сишников - больше шансов получить на выходе программу, не заваливающую систему два раза в час, да и следствие из закона Мура - если ваша программа тормозит, отложите выпуск - уже было взято на вооружение.</p>
<p>С другой стороны, "Практика программирования" Кернигана и Пайка тоже написана не на пустом месте и не потеряла актуальность в начале 2000-х (а то и сейчас, во всяком случае, многие похапешники после нее будут плакать кровавыми слезами). Несмотря на все замечательные возможности языков, очень большое внимание уделялось и производительности - часто даже в ущерб языковым возможностям (например, самописный hashmap часто оказывался существенно быстрее STL-ного, в результате чего мог считаться предпочтительнее).</p>
<p>В общем, советы по программированию для Android лишний раз напоминают, что удобные возможности языка и среды выполнения зачастую сильно влияют на производительность программы - причем зачастую отрицательно.</p>
<p>PS А вот более развернуто мое мнение про Arduino:</p>
<p><a href="http://community.livejournal.com/ru_radio_electr/759218.html?thread=12768946">http://community.livejournal.com/ru_radio_electr/759218.html?thread=12768946</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/07/29/pro-dialekticheskijj-materializm-i-po-dlya-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Еще за VRML</title>
		<link>http://shura.luberetsky.ru/2010/07/25/eshhe-za-vrml/</link>
		<comments>http://shura.luberetsky.ru/2010/07/25/eshhe-za-vrml/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 14:49:32 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[игры]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2754</guid>
		<description><![CDATA[Надежда отечественного геймдева golergka как-то спрашивал в комментах, зачем нужны VRML-ные извращения. А я сейчас на наглядном примере покажу, зачем.
На данный момент &#8220;мейнстримом&#8221; в плане динамического контента в вебе является Adobe Flash, правда, с начала 2000-х сильно сдавший позиции в пользу более универсального Ajax. Во всяком случае, извращения тех лет, вроде &#8220;сайтов целиком на Flash&#8221;, [...]]]></description>
			<content:encoded><![CDATA[<p>Надежда отечественного геймдева <a href="http://users.livejournal.com/golergka/profile"><img src="http://stat.livejournal.com/img/userinfo.gif" alt="[info]" width="17" height="17" border="0" align="absmiddle"/></a><a href="http://users.livejournal.com/golergka/"><b>golergka</b></a> как-то спрашивал в <a href="http://shura.luberetsky.ru/2010/07/07/pro-odno-malenkoe-izvrashhenie/#comment-394471">комментах</a>, зачем нужны VRML-ные извращения. А я сейчас на наглядном примере покажу, зачем.</p>
<p>На данный момент &#8220;мейнстримом&#8221; в плане динамического контента в вебе является Adobe Flash, правда, с начала 2000-х сильно сдавший позиции в пользу более универсального Ajax. Во всяком случае, извращения тех лет, вроде &#8220;сайтов целиком на Flash&#8221;, встречаются реже и реже &#8211; &#8220;изобразительные&#8221; и &#8220;технические&#8221; возможности Flash теперь реализуют с использованием HTML, CSS и Javascript.</p>
<p>Единственная область, где позиции Flash до сих пор сильны &#8211; это динамическая графика. Если, к примеру, текстовую &#8220;мочиловку&#8221; такого типа:</p>
<p><em> И плодть его содрыгнулыся от боли, и страшные черные птицы обклювали иго со всех сторон&#8230;<br />
А злой волшебник Хухур достал иликрическую пилу и стал, весело хохоча, отпиливать ему ногу и отпилил ее три раза! Воистину!..<br />
И он, хохоча, откусил ему глаз&#8230;<br />
Злая колдунья острым ножом разрезывала плоть жертвы&#8230;<br />
 Его жилы, хохоча, хрустнули под ударом стальной дубины, и кровь толстым потоком затопила Долину Смерти&#8230;<br />
Воистину прольется кровь, ибо да будет так!!!</em></p>
<p>&#8230;думаю, этого достаточно &#8211; все же видели игрушки типа &#8220;Бойцовского клуба&#8221;, где &#8220;мочилово&#8221; представляет собой длинный лог того, кто откусил кому яйца, в общем, если такую мочиловку попытаться снабдить графикой, то придется использовать Flash &#8211; нормальное рисование в Javascript+HTML совершенно недоступно (а когда все дойдут до поддержки HTML5 и элемента Canvas &#8211; я не скажу, да и никто не скажет).</p>
<p>В принципе, ничего против Flash я не имею &#8211; это довольно удобное средство отображения динамически меняющихся двумерных картинок. Но вот когда речь заходит о трехмерности&#8230;</p>
<p>Конечно, трехмерная графика с &#8220;оперативным&#8221; рендерингом на ПК применяется уже лет 20, вспомним тот же Wolfenstein 3D или Doom. Математическая основа 3D-графики прекрасно известна, и реализация &#8220;софтверного&#8221; рендерера не должна вызывать больших проблем при использовании любого языка высокого уровня (хоть того же ECMAScript). Недостаточная производительность скриптовых языков уже лет пять как не является проблемой, в чем нас пытаются убедить &#8220;веб-программисты&#8221;. Но это теория. А что мы имеем на практике? Для Flash существует десяток софтверных 3D-&#8221;движков&#8221;. Как говорит про них Википедия,</p>
<p><em>Скорость работы перечисленных движков зависит от используемой версии Flash Player, но в целом пока не достаточно высока.</em></p>
<p>Естественно, верить википедии на слово не стоит, а лучше убедиться лично, что я и проделал. Думаю, <a href="http://users.livejournal.com/golergka/profile"><img src="http://stat.livejournal.com/img/userinfo.gif" alt="[info]" width="17" height="17" border="0" align="absmiddle"/></a><a href="http://users.livejournal.com/golergka/"><b>golergka</b></a> прекрасно известна многопользовательская игра &#8220;<a href="http://tankionline.com/ru/">Танки онлайн</a>&#8220;, в 2009 году ставшая &#8220;прорывом года&#8221; в использовании Flash.</p>
<p><a href="http://shura.luberetsky.ru/wp-content/uploads/2010/07/tanki.jpg"><img src="http://shura.luberetsky.ru/wp-content/uploads/2010/07/tanki-640x375.jpg" alt="tanki" title="tanki" width="640" height="375" class="alignnone size-medium wp-image-2755" /></a></p>
<p>Немного поиграл в эту &#8220;техническую заслугу&#8221; отечественных флешеров. Как игра &#8211; вполне приятно, ничего против не имею. Но насчет поразительной 3D-графики &#8211; не соглашусь. Графика довольно примитивна и каким-то прорывом является лишь для браузерных игр. А достигается это просто невероятной ценой &#8211; на моей не особо &#8220;дохлой&#8221; машине загрузка процессора достигала, держитесь за стул, 60-70%. Неудивительно &#8211; уже лет 10-15 для обсчета сложных 3D-сцен применяют либо очень низкоуровневые языки (вплоть до &#8220;оптимизации&#8221; на уровне ассемблерных кодов), либо специализированные графические процессоры. Flash не имеет доступа ни к тому, ни к другому.</p>
<p>В общем, по уровню графики все это напомнило мне виденную еще в начале 2000-х &#8220;игрушку&#8221; с паровозиком, сделанную фирмой Parallel Graphics для демонстрации возможностей своего VRML-браузера.</p>
<p><a href="http://shura.luberetsky.ru/wp-content/uploads/2010/07/parovoz.jpg"><img src="http://shura.luberetsky.ru/wp-content/uploads/2010/07/parovoz.jpg" alt="parovoz" title="parovoz" width="724" height="350" class="alignnone size-full wp-image-2756" /></a></p>
<p>К сожалению, на новом сайте Parallel Graphics эту демку уже не так легко найти, да и онлайн-версия почему-то не работает. Зато сохранилась версия в виде архива, которую я и выложил у себя <a href="http://shura.luberetsky.ru/parovoz/">на сайте</a> для всех железнодорожных симмеров и прочих извращенцев.</p>
<p>Для работы потребуется VRML-плагин, причем желательно &#8211; Cortona 3D Viewer. Скачать его можно <a href="http://www.cortona3d.com/Products/Cortona-3D-Viewer.aspx">на сайте производителя</a>.</p>
<p>PS Не надо понимать эту запись, как &#8220;Flash говно, VRML форева&#8221;. Просто мне хочется показать, что в разработке 3D-контента для веба существует не только современный мейнстрим (в виде Flash и софтверного рендера) и не только перспективные разработки (Silverlight, JavaFX), но и &#8220;хорошо забытое старое&#8221;. Кстати, поддержка асинхронных запросов к серверу в VRML тоже была прописана в стандарте 1997 года (в виде функции CreateVRMLfromURL()), просто применений ей тогда не нашлось.</p>
<p>UPD Почему-то Parallel Graphics не любит браузеры, отличные от IE, хотя их плагин в них прекрасно работает. Видимо, срабатывают ограничения из начала 2000-х.</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/07/25/eshhe-za-vrml/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ктулху фхтагн!</title>
		<link>http://shura.luberetsky.ru/2010/07/20/ktulkhu-ftagn/</link>
		<comments>http://shura.luberetsky.ru/2010/07/20/ktulkhu-ftagn/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 18:24:52 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2750</guid>
		<description><![CDATA[void Rlyeh
(int mene[], int wgah, int nagl) {
int Ia, fhtagn;
if (wgah&#62;=nagl) return;
swap (mene,wgah,(wgah+nagl)/2);
fhtagn = wgah;
for (Ia=wgah+1; Ia&#60;=nagl; Ia++)
if (mene[Ia]&#60;mene[wgah])
swap (mene,++fhtagn,Ia);
swap (mene,wgah,fhtagn);
Rlyeh (mene,wgah,fhtagn-1);
Rlyeh (mene,fhtagn+1,nagl);
} // PH'NGLUI MGLW'NAFH CTHULHU!

Отсюда: http://www.bobhobbs.com/files/kr_lovecraft.html.
]]></description>
			<content:encoded><![CDATA[<p><code>void Rlyeh<br />
(int mene[], int wgah, int nagl) {<br />
int Ia, fhtagn;<br />
if (wgah&gt;=nagl) return;<br />
swap (mene,wgah,(wgah+nagl)/2);<br />
fhtagn = wgah;<br />
for (Ia=wgah+1; Ia&lt;=nagl; Ia++)<br />
if (mene[Ia]&lt;mene[wgah])<br />
swap (mene,++fhtagn,Ia);<br />
swap (mene,wgah,fhtagn);<br />
Rlyeh (mene,wgah,fhtagn-1);<br />
Rlyeh (mene,fhtagn+1,nagl);<br />
} // PH'NGLUI MGLW'NAFH CTHULHU!<br />
</code></p>
<p>Отсюда: <a href="http://www.bobhobbs.com/files/kr_lovecraft.html">http://www.bobhobbs.com/files/kr_lovecraft.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/07/20/ktulkhu-ftagn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make me unsee it</title>
		<link>http://shura.luberetsky.ru/2010/07/20/make-me-unsee-it/</link>
		<comments>http://shura.luberetsky.ru/2010/07/20/make-me-unsee-it/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 17:27:13 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[сайтоводство]]></category>
		<category><![CDATA[технологии высокаго пошибу]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2748</guid>
		<description><![CDATA[Приходится иногда сталкиваться в программировании с такими &#8220;костылями&#8221;, что даже не знаешь, стоять или падать.
Вот, например, извращенная задачка в веб-программировании. Есть два сайта &#8211; один на ASP.NET под IIS, другой на PHP под Apache. Первый крутится по адресу, к примеру, http://webserver:80/, другой &#8211; http://webserver:8080/. Задача &#8211; на первом сайте есть ссылка, открывающая окошко со страничкой [...]]]></description>
			<content:encoded><![CDATA[<p>Приходится иногда сталкиваться в программировании с такими &#8220;костылями&#8221;, что даже не знаешь, стоять или падать.</p>
<p>Вот, например, извращенная задачка в веб-программировании. Есть два сайта &#8211; один на ASP.NET под IIS, другой на PHP под Apache. Первый крутится по адресу, к примеру, http://webserver:80/, другой &#8211; http://webserver:8080/. Задача &#8211; на первом сайте есть ссылка, открывающая окошко со страничкой второго сайта, оттуда надо передать JavaScript-ом какие-то данные в родительское окно. Думаю, все видели <a href="http://www.free-color-picker.com/color-pop-combo.php">вот такие</a> &#8220;палитры&#8221;, так что представить в состоянии.</p>
<p>Разница в том, что &#8220;палитра&#8221; расположена немного по другому адресу и может подпадать под блокировку &#8220;кроссдоменной&#8221; передачи данных. Причем самое интересное &#8211; это то, что каждый из трех популярных браузеров понимает &#8220;кроссдоменность&#8221; по-разному.</p>
<p>Internet Explorer всех версий вообще не делает различий между domain.com:80 и domain.com:8080. Соответственно, все работает правильно.</p>
<p>Firefox считает такие &#8220;домены&#8221; разными и по умолчанию блокирует передачу. Правда, спасает вот такое заклинание, произнесенное перед открытием &#8220;палитры&#8221; в родительском окне и в дочернем &#8211; до передачи данных:</p>
<p><code>document.domain = document.domain;</code> </p>
<p>Смысл заклинания совершенно необъясним, поэтому &#8220;это нельзя понять, это надо запомнить&#8221;.</p>
<p>Opera на такие дешевые трюки не ведется и блокирует передачу данных между этими окнами в любом случае. Самый безопасный браузер, хуле.</p>
<p>Вопрос фанатам &#8220;альтернативных браузеров&#8221;: и чего же вы добились, обвиняя Microsoft и Internet Explorer во всех смертных грехах, начиная от монополизма? Похоже, только того, что в каждом из браузеров надо применять <em>свои</em> &#8220;костыли и подпорки&#8221;, а любая программа на JavaScript начинается с разбора трех случаев.</p>
<p>PS К сожалению, ни прикрутить ASP.NET к Apache, ни PHP к IIS нереально &#8211; апачевский модуль для ASP.NET совершенно не хочет работать, а PHP-шная часть сайта существенно использует апачевские возможности по работе с .htaccess.</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/07/20/make-me-unsee-it/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Про форматы файлов</title>
		<link>http://shura.luberetsky.ru/2010/07/15/pro-formaty-fajjlov/</link>
		<comments>http://shura.luberetsky.ru/2010/07/15/pro-formaty-fajjlov/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 18:07:31 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[запретите им]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2740</guid>
		<description><![CDATA[Только наши отечественные разработчики в ответ на предложение переделать доисторический бинарный формат файла в что-то более современное на основе XML могут заявить, что потеря одного байта в XML приведет к ВСЕЛЕНСКОЙ КОТОКЛИЗЬМЕ (предположим, что враги сперли вот такую скобочку: &#60; &#8211; и тогда мы все умрем, адин-адин-адин), а уж их-то бинарный формат от такой неприятности [...]]]></description>
			<content:encoded><![CDATA[<p>Только наши отечественные разработчики в ответ на предложение переделать доисторический бинарный формат файла в что-то более современное на основе XML могут заявить, что потеря одного байта в XML приведет к ВСЕЛЕНСКОЙ КОТОКЛИЗЬМЕ (предположим, что враги сперли вот такую скобочку: &lt; &#8211; и тогда мы все умрем, адин-адин-адин), а уж их-то бинарный формат от такой неприятности защищен. Ага, от потери байта медным тазом накроются все таблицы смещений в файле, и мы даже не заметим этого, потому как ихнее глючное поделие регулярно вылетает с такими ошибками.</p>
<p>А может, этим деятелям хочется привязать народ к своей софтине &#8211; ведь XML в определенном смысле самодокументирующийся, в отличие от. Главное &#8211; не раскрывать (всех) секретов своего глючного формата, хе-хе. Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won&#8217;t usually need your flowcharts; they&#8217;ll be obvious.</p>
<p>PS Все надежды жадных до денег разрабов (да-да, документация &#8220;без гарантий совместимости с последующими версиями&#8221; за бабло) перечеркивает WinHEX. А кроме того, умение с умным видом смотреть на файл в шестнадцатеричном виде вызывает неподдельное уважение у всяческих PHP-программистов, особенно если сопровождать сей процесс высказываниями: &#8220;ага, это у нас 16-битное целое&#8221; :)</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/07/15/pro-formaty-fajjlov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Про одно маленькое извращение</title>
		<link>http://shura.luberetsky.ru/2010/07/07/pro-odno-malenkoe-izvrashhenie/</link>
		<comments>http://shura.luberetsky.ru/2010/07/07/pro-odno-malenkoe-izvrashhenie/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 16:48:42 +0000</pubDate>
		<dc:creator>Шура Люберецкий</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[игры]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[технологии высокаго пошибу]]></category>

		<guid isPermaLink="false">http://shura.luberetsky.ru/?p=2724</guid>
		<description><![CDATA[Посетители интернетов &#8220;со стажем&#8221;, наверное, помнят про язык VRML, появившийся еще в 1997 году и позволявший описывать трехмерные пространства в &#8220;читаемом&#8221; виде. Практически для каждого браузера существовали плагины, позволявшие встраивать окошко с 3D-контентом на HTML-страницы. Даже я в далеком 2002 году не остался в стороне от использования VRML на домашней страничке и нарисовал в нем [...]]]></description>
			<content:encoded><![CDATA[<p>Посетители интернетов &#8220;со стажем&#8221;, наверное, помнят про язык VRML, появившийся еще в 1997 году и позволявший описывать трехмерные пространства в &#8220;читаемом&#8221; виде. Практически для каждого браузера существовали плагины, позволявшие встраивать окошко с 3D-контентом на HTML-страницы. Даже я в далеком 2002 году не остался в стороне от использования VRML на домашней страничке и нарисовал в нем какое-то подобие сортира или станции метро &#8220;Кузьминки&#8221; &#8211; почему-то мне очень понравилась текстура кафельной плитки в каком-то VRML-редакторе.</p>
<p>Почему-то совершенно незамеченной в то время осталась возможность VRML-плагинов взаимодействовать со страничкой, в которой они находятся. Web 1.0 тихо исчез, уступив место для динамических сайтов с JavaScript, DHTML и AJAX (все эти три слова означают примерно одно и то же, разница в гламурности). VRML вообще не отличался особыми красотами, анимация там была в зачаточном состоянии (ЕМНИП, делалась она средствами реализованного там же JavaScript, но писать всякие &#8220;эффекты&#8221; приходилось практически вручную), а о возможности изменения 3D-сцены по полученным откуда-то &#8220;снаружи&#8221; командам никто не задумывался.</p>
<p>Теперь &#8211; о своем опыте прикручивания модного AJAX к немодному VRML. Конечно, можно было бы выбрать в качестве 3D-среды более современный X3D &#8211; дальнейшее развитие VRML, но для него попросту нет приличных плагинов для браузера. Для VRML я использовал <a href="http://www.cortona3d.com/Products/Cortona-3D-Viewer.aspx">Cortona 3D</a>.</p>
<p>В общем, задача состояла в следующем. Есть трехмерная сцена с &#8220;лампочками&#8221;, которые могут гореть, например, красным, желтым и зеленым &#8211; например, представим себе модель перекрестка со светофорами и база данных, даже проще &#8211; регулярно обновляющийся XML-файл, в котором записано, каким цветом горит какая &#8220;лампочка&#8221;. Надо, чтобы трехмерная сцена динамически изменялась, отслеживая изменения в XML-файле, и при этом не требовала никаких действий от пользователя.</p>
<p>Естественно, задача очень легко решается, если отказаться от использования всяких VRML-ных хитростей, а сделать все с использованием обычного HTML и AJAX. С другой стороны, можно управлять VRML-сценой через JavaScript в браузере. Почему-то эта возможность VRML используется настолько редко, что о ее существовании в рунете не упоминают, а в буржуйских интернетах удалось найти лишь перепевы <a href="http://www.soc.napier.ac.uk/~cs66/turtle/">курсовой работы</a> по программированию в университе Нэпира, что находится в доброй старой Англии. Надо ли говорить о том, что про объединие AJAX и VRML не написано вообще ничего? Решается же вышеописанная задача буквально парой десятков строк кода.</p>
<p>Конечно, можно решить ту же задачу тысячей разных способов. Например, можно отображать трехмерные объекты с использованием Flash. Можно использовать не VRML и не V3D, а какой-нибудь гугловский O3D или даже COLLADA. Пожалуй, всерьез использовать это могут только разработчики браузерных говноигр. Кстати, графика в современных VRML-плагинах вполне &#8220;на уровне&#8221; и не уступает многим более серьезным играм. Ну что, как насчет Lineage прямо в браузере?</p>
<p>PS Кстати, Cortona3D не работает с примером Turtle Graphics. Там требуется совсем небольшая доработка, но раскрывать этот маленький секрет я пока не буду.</p>
]]></content:encoded>
			<wfw:commentRss>http://shura.luberetsky.ru/2010/07/07/pro-odno-malenkoe-izvrashhenie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
