<?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://beta.delta-z.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://beta.delta-z.com</link>
	<description>или кризис разного возраста</description>
	<lastBuildDate>Tue, 31 Jan 2012 08:05:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Эзотерические языки программирования</title>
		<link>http://beta.delta-z.com/esoteric-lang/</link>
		<comments>http://beta.delta-z.com/esoteric-lang/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 07:01:05 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Забавное]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/?p=750</guid>
		<description><![CDATA[<img src="http://www.dangermouse.net/esoteric/piet/Piet_hello_big.png" width="200px" align="right"/>Иногда сложную задачу мы пытаемся решить с помощью &#171;бубнов&#187;, &#171;шаманства&#187;, &#171;раскуривания&#187; и всего такого прочего. А что если сразу обратиться к духам и применить какой-нибудь изотерический язык программирования? Есть такие. И, надо сказать, они потребуют кардинально другой подход к решению проблемы. В прямом смысле слова — другой взгляд. Изнутри. Или из какого-то другого измерения. Самое главное, что эти штуки работают!!! Взгляните на иллюстрацию к данному посту (&#171;цветная одеялка&#187; справа от текста). Это пример программы &#171;Hello World&#187;. Не менее красиво выглядят факториалы, вычисление числа Пи и другие алгоритмы. Язык называется <a href="http://www.dangermouse.net/esoteric/piet.html" target=blank_>Piet</a>. Вот <a href="http://www.dangermouse.net/esoteric/piet/samples.html" target=blank_>здесь</a> можно посмотреть красиыве примеры программ на нём (&#171;галерея&#187; программ). А на <a href="http://www.dangermouse.net/esoteric/" target=blank_>этой страничке</a> можно познакомиться со списком необычных языков программирования. Кто знает, может оно вам в чём-то поможет?<br />
 <img src='http://beta.delta-z.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' />  Удачи в работе!]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.dangermouse.net/esoteric/piet/Piet_hello_big.png" width="200px" align="right"/>Иногда сложную задачу мы пытаемся решить с помощью &laquo;бубнов&raquo;, &laquo;шаманства&raquo;, &laquo;раскуривания&raquo; и всего такого прочего. А что если сразу обратиться к духам и применить какой-нибудь изотерический язык программирования? Есть такие. И, надо сказать, они потребуют кардинально другой подход к решению проблемы. В прямом смысле слова — другой взгляд. Изнутри. Или из какого-то другого измерения. Самое главное, что эти штуки работают!!! Взгляните на иллюстрацию к данному посту (&laquo;цветная одеялка&raquo; справа от текста). Это пример программы &laquo;Hello World&raquo;. Не менее красиво выглядят факториалы, вычисление числа Пи и другие алгоритмы. Язык называется <a href="http://www.dangermouse.net/esoteric/piet.html" target=blank_>Piet</a>. Вот <a href="http://www.dangermouse.net/esoteric/piet/samples.html" target=blank_>здесь</a> можно посмотреть красиыве примеры программ на нём (&laquo;галерея&raquo; программ). А на <a href="http://www.dangermouse.net/esoteric/" target=blank_>этой страничке</a> можно познакомиться со списком необычных языков программирования. Кто знает, может оно вам в чём-то поможет?<br />
 <img src='http://beta.delta-z.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' />  Удачи в работе!</p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/esoteric-lang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поиск исходников</title>
		<link>http://beta.delta-z.com/code-search/</link>
		<comments>http://beta.delta-z.com/code-search/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 12:10:38 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/?p=739</guid>
		<description><![CDATA[<img src="http://blog.ezyang.com/img/hoopl-base-system/source.png" width="200px" align="right"/>Периодически возникает проблема — нужно найти пример какого-нибудь алгоритма (желательно — на каком-нибудь конкретном языке). Гугл помогает, да. Но есть средства специально для этого предназначенные. Они дают более релевантные ответы, поэтому поиск и выбор осуществляются гораздо быстрее. Прежде всего советую заглянуть на <a href="http://www.koders.com/" target=blank_>Koders.com</a>. Ресурс с историей, существует не первый день. Позволяет искать исходный код в зависимости от языка программирования или типа лицензии. Ну а <a href="http://code.google.com/" target=blank_>Google code</a> все и так знают. Ищет только по своей базе, которая хоть и огромна, но не так хороша как весь Интернет.

Давайте сравним. Поиск алгоритма быстрого преобразования Фурье (FFT) у меня дал такие результаты: <a href="http://www.koders.com/default.aspx?s=fft&#038;submit=Search&#038;la=*&#038;li=*" target=blank_>Koders.com</a> - 23.5 тыс. результатов, а <a href="http://code.google.com/intl/en/query/#q=fft" target=blank_>Google code</a> - "примерно 3 результата" (я так и не понял, почему "примерно").

Удачного вам поиска по исходникам!]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.ezyang.com/img/hoopl-base-system/source.png" width="200px" align="right"/>Периодически возникает проблема — нужно найти пример какого-нибудь алгоритма (желательно — на каком-нибудь конкретном языке). Гугл помогает, да. Но есть средства специально для этого предназначенные. Они дают более релевантные ответы, поэтому поиск и выбор осуществляются гораздо быстрее. Прежде всего советую заглянуть на <a href="http://www.koders.com/" target=blank_>Koders.com</a>. Ресурс с историей, существует не первый день. Позволяет искать исходный код в зависимости от языка программирования или типа лицензии. Ну а <a href="http://code.google.com/" target=blank_>Google code</a> все и так знают. Ищет только по своей базе, которая хоть и огромна, но не так хороша как весь Интернет.</p>
<p>Давайте сравним. Поиск алгоритма быстрого преобразования Фурье (FFT) у меня дал такие результаты: <a href="http://www.koders.com/default.aspx?s=fft&#038;submit=Search&#038;la=*&#038;li=*" target=blank_>Koders.com</a> &#8211; 23.5 тыс. результатов, а <a href="http://code.google.com/intl/en/query/#q=fft" target=blank_>Google code</a> &#8211; &laquo;примерно 3 результата&raquo; (я так и не понял, почему &laquo;примерно&raquo;).</p>
<p>Удачного вам поиска по исходникам!</p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/code-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>А так ли оно нужно — техническое задание?</title>
		<link>http://beta.delta-z.com/a-tak-li-ono-nuzhno-texnicheskoe-zadanie/</link>
		<comments>http://beta.delta-z.com/a-tak-li-ono-nuzhno-texnicheskoe-zadanie/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 14:02:08 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/?p=578</guid>
		<description><![CDATA[Для себя вопрос писать или не писать ТЗ я решил уже давно. Мало того, отказываюсь от разработки, если заказчик не намерен финансировать создание хоть какой-то документации (если изначально сам ничего не даёт). Отсутствие документированности — это способ в 100% случаев определить несерьёзность намерений. А вы знаете самый суровый прокол всех времён и народов, связанный с [...]]]></description>
			<content:encoded><![CDATA[<p>Для себя вопрос писать или не писать ТЗ я решил уже давно. Мало того, отказываюсь от разработки, если заказчик не намерен финансировать создание хоть какой-то документации (если изначально сам ничего не даёт). Отсутствие документированности — это способ в 100% случаев определить несерьёзность намерений.</p>
<p>А вы знаете самый суровый прокол всех времён и народов, связанный с техническим заданием?</p>
<p>Наверное самый-самый-самый острый косяк был у американцев, когда они запускали Аполлон-13. Подумать только! Из-за промашки в ТЗ:</p>
<ul>
<li>не сели на Луну;</li>
<li>угробили модуль стоимостью миллионы долларов;</li>
<li><strong>чуть не угробили троих мужиков!!!</strong></li>
</ul>
<p>И всё из-за неправильной постановки задачи. Неверно вписали одну единственную цифру, а потом не перепроверили (помните, в документации есть графы «Утвердил», «Проверил»&#8230; <img src='http://beta.delta-z.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p><center>***</center></p>
<p>Надеюсь, для многих читателей Берлоги инженера не стоит вопрос <a href="http://beta.delta-z.com/tehnicheskoe-zadanie/">как написать техническое задание</a>?</p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/a-tak-li-ono-nuzhno-texnicheskoe-zadanie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Немного о языках программирования</title>
		<link>http://beta.delta-z.com/nemnogo-o-yazykax-programmirovaniya/</link>
		<comments>http://beta.delta-z.com/nemnogo-o-yazykax-programmirovaniya/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 14:21:37 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/?p=373</guid>
		<description><![CDATA[Как уже сложилось в "Берлоге инженера", в пятницу предлагается "тема для раздумий". Сегодня хочу поделиться с вами некоторыми своими соображениями по поводу языков программирования. Давайте попробуем взглянуть на множество языков как бы сверху, прикинуть направления развития, вспомнить прошлое и немного пофантазировать о будущем…]]></description>
			<content:encoded><![CDATA[<p>Как уже сложилось в &laquo;Берлоге инженера&raquo;, в пятницу предлагается &laquo;тема для раздумий&raquo;. Сегодня хочу поделиться с вами некоторыми своими соображениями по поводу языков программирования. Давайте попробуем взглянуть на множество языков как бы сверху, прикинуть направления развития, вспомнить прошлое и немного пофантазировать о будущем…<span id="more-373"></span></p>
<p>Собственно, к теме меня подтолкнула статья моего молодого (почти) коллеги Криса Касперски. <a href="http://www.itspecial.ru/theme/Jazyki-kotorye-my-poterjali/10114/default.asp" target=blank_>Языки, которые мы потеряли</a>. Давненько я задумываюсь о языках программирования. И периодически &laquo;вопросы познания&raquo; этих языков всплывают у меня с прочтением подобных статей.</p>
<p>Ровно три года назад я написал небольшую статью на эту тему: <a href="http://beta.delta-z.com/rejting-yazykov-programmirovaniya-teoriya-i-praktika/">Рейтинг языков программирования. Теория и практика</a>, где формально, с помощью цифр, тестов, рейтингов и статистики отмечал, что практикующие специалисты-программисты используют в массе своей далеко не самые эффективные языки!</p>
<p>Вот и в приведённой статье Криса отмечается то же самое. Только немного в плоскости анализа семантики языков. Приведу ряд полезных цитат.</p>
<p><em><br />
<blockquote>Абстрагируясь от базовых концепций, мы усиливаем лексическую мощь языка (там где раньше приходилось писать тысячу команд, сейчас достаточно одной), но вместе с нею увеличиваем количество взаимодействий между различными компонентами, которые как-то нужно учитывать… В результате <strong>за кажущуюся легкость программирования приходится расплачиваться многократно возросшей сложностью проектирования</strong>.</p></blockquote>
<p></em></p>
<p><em><br />
<blockquote>Самолеты и космические корабли мирно сосуществуют с велосипедами и автомобилями. Никому ведь и в голову не придет летать за сигаретами на ракете, особенно если сигареты продаются в киоске на соседнем углу.</p>
<p>Но ведь это же неправильно! Появление ракет должно перевернуть наше мышление! Поэтому — строим киоск за орбитой Плутона и каждому даем по ракете, чтобы туда летать, а горючее покупаем за деньги, вырученные от строительства космодромов и продаж ракет. Кто не может строить ракеты — пусть учит других, как на них летать. Сколько создается новых рабочих мест и главное, что все в бизнесе. Вот тут уж действительно, возврата в прошлое нет… Сигареты стоят миллиарды долларов, и деньги в индустрию вращаются просто огромные. Кто же захочет от них отказываться?! Напротив, ракеты будут стремительно &laquo;совершенствоваться&raquo;, чтобы за сигаретами можно было летать даже на Альфу Центавра.</p>
<p>Говорите, что это нелогично и невозможно? Но ведь именно такая ситуация сложилась с Си++. Судите сами — реализация компиляторов языка Си++ очень сложная и дорогостоящая задача, а сам язык настолько обширен и объемен, что его изучение требует невероятных усилий. Чтобы окупить средства, вложенные в разработку компиляторов, фирмы вынуждены &laquo;подсаживать&raquo; на него миллионы программистов, которые, пройдя длительный (и ужасно мучительный) путь обучения Си++, просто не могут признаться себе в том, что напрасно убили десять лет своей жизни (данной человеку лишь однажды!) и что стоящие перед ними задачи с ничуть не меньшей эффективностью реализуются на чистом Си и других процедурных языках, легко осваиваемых на ходу без отрыва от производства. <strong>Вот они и начинают убеждать остальных, что процедурные языки давно мертвы. Сложность ради сложности.</strong> </p></blockquote>
<p></em></p>
<p>Как-то так получилось, что в работе своей я частенько сталкиваюсь с различными языками/диалектами. Когда-то пытался посчитать. Насчитал более десятка. И вроде бы для каждого конкретного случая (например, программирование ПЛИС или контроллера) можно подобрать C/Cpp-подобный язык, я всё равно программировал на языке, более близком к конкретной платформе или задаче. Пытался применять C/C++! Но ничего путёвого это не приносило. Всё равно наработки сложно переносить из проекта в проект (да и бессмысленно порой, такая у меня специфика), а эффективность С/C++ на некоторых платформах бывает &laquo;ниже плинтуса&raquo; по объёму кода, по скорости, и даже по эффективности/скорости разработки!</p>
<p>Нет, я не сбрасываю со щитов достоинств современных популярнейших компиляторов и систем/подходов к программированию! Они себя оправдывают, вполне оправдывают. Но получается так, что по сути <strong>оправдывают больше не себя и не процесс разработки и творчества, а рыночную ситуацию</strong>. Как сказал Крис, <em>&laquo;Сложность ради сложности&raquo;</em>. Жаль, но по сути так и получается.</p>
<p><center>***</center></p>
<p>Появляются новые платформы, усложняются процессоры (становятся многоядерными). И появляются новые клоны &laquo;популярного&raquo; С++ с новыми &laquo;граблями&raquo;, &laquo;заплатками&raquo; и прочей требухой, позволяющей хоть как-то обеспечить требуемую функциональность.</p>
<p>&laquo;Узкие&raquo; профессионалы в своих областях продолжают работать на более эффективных паскале-, ассемблеро-, лиспоподобных языках, а армия &laquo;поклонников&raquo; упорно трудится над сборкой компиляторов и кросскомпиляторов, чтобы оправдать <em>&laquo;убитые годы жизни&raquo;</em>.</p>
<p><em><br />
<blockquote>Таким образом, благополучию Си++ ничего не угрожает. Сколько бы языков ни создавалось и какие бы усилия ни предпринимались для продвижения их на рынок, мы получим либо урезанный вариант Си++, либо страшный тормоз.</p></blockquote>
<p></em></p>
<p>И, к сожалению, новое чаще появляется не путём модификации старого, а путём приписывания/дописывания:</p>
<p><em><br />
<blockquote>Если программу, написанную на процедурном языке, можно переписывать по частям, исправляя ее структуру путем декомпозиции, то с Си++ этот номер так просто не пройдет. Иерархия классов жестко задается на этапе проектирования и закладывается в программу точно железобетонный каркас, <strong>расширяемый только в одном направлении – в направлении наслаивания нового кода</strong>.</p></blockquote>
<p></em></p>
<p>Появление более эффективного &laquo;железа&raquo;, на мой взгляд, осложняется именно сложившейся ситуацией с языками программирования. Ведь ещё лет десять назад производители микроконтроллеров говорили о &laquo;С-совместимости ядер&raquo;. Оно неплохо. Но это не позволяет сделать революцию, принципиальный скачок вперёд!</p>
<p>Задумайтесь к примеру, если забыть о всех &laquo;граблях&raquo; С++ и даже С, то легко ли будет на этих языках реализовать параллельные вычисления на каком-нибудь 4-ядерном &laquo;пне&raquo; последней конструкции? Вот сесть и накидать программку за часик, которая честно использовала бы ресурсы всех четырёх ядер? Нет, не получится. И мы это перекладываем не на программиста (кому как не ему знать о том, как более эффективно раскидать-распараллелить задачу!), а на ОС. Вот и получается, &laquo;как придётся&raquo;… Вот мы и покупаем более дорогие и производительные компьютеры, а работа более эффективной не становится…</p>
<p><center>***</center></p>
<p>Хочу задать вам, уважаемые читатели, вопрос. Как же и куда же нам двигаться в такой ситуации?<br />
Продолжать изучать &laquo;популярные языки&raquo;?<br />
Придумывать что-то своё?<br />
Изучать узкую область и быть в ней ассом, но профаном в других областях?</p>
<p>В раздумьях и размышлениях вам могут помочь:<br />
<a href="http://www.delta-z.com/forum/index.php/topic,21.0.html">Рейтинг языков программирования</a><br />
<a href="http://www.delta-z.com/forum/index.php/topic,20.0.html">Эффективность языков программирования</a><br />
<a href="http://www.delta-z.com/forum/index.php/topic,90.0.html">Перлы программирования и алгоритмизации</a></p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/nemnogo-o-yazykax-programmirovaniya/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comment extender v. 1.1 или поймай спамера сам</title>
		<link>http://beta.delta-z.com/comment-extender-v-11-ili-poymay-spamera-sam/</link>
		<comments>http://beta.delta-z.com/comment-extender-v-11-ili-poymay-spamera-sam/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 20:06:10 +0000</pubDate>
		<dc:creator>Alexey</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/index.php/archives/297</guid>
		<description><![CDATA[Что-то совсем прогнило в Королевстве Датском. Вроде совсем недавно все вели блоги, общались друг с другом в виртуальности, жизнь била ключом, как вдруг из каких-то щелей полезла толпа жадных недалёких детей и стала за тридцать сребреников гадить в комментах. И ведь не подкопаешься! Комменты пишутся живыми людьми, руками, иногда они даже вполне осмысленные &#8211; антиспам-фильтры [...]]]></description>
			<content:encoded><![CDATA[<p>Что-то совсем прогнило в Королевстве Датском. Вроде совсем недавно все вели блоги, общались друг с другом в виртуальности, жизнь била ключом, как вдруг из каких-то щелей полезла толпа жадных недалёких детей и стала за тридцать сребреников гадить в комментах. </p>
<p>И ведь не подкопаешься! Комменты пишутся живыми людьми, руками, иногда они даже вполне осмысленные &#8211; антиспам-фильтры их в упор не видят. Настораживают только адреса сайтов &#8211; то это про отдых в Египте, то про стальной прокат &#8211; ну мало ли о чём люди на досуге пишут.<span id="more-297"></span> </p>
<p>Отключить комментирование нам даже в голову не приходило, ибо каждый инженер знает, что система без обратной связи становится неустойчивой и, как следствие, нежизнеспособной. </p>
<p>Что-то надо было делать, и тут мы вспомнили про наш плагин для WordPress. Вооружившись ломом и напильником, мы расширили его функционал, и теперь комментарии в админке выглядят следующим образом:</p>
<p><center><img src='http://beta.delta-z.com/wp-content/2008/10/ce1.png' alt='Comment extender' /></center></p>
<p>Плагин можно скачать <a href="http://beta.delta-z.com/wp-content/soft/ce.zip">здесь</a>. Установка его подробно описана в <a href="http://beta.delta-z.com/index.php/archives/252">нашей статье</a>, однако если вы до этого пользовались старой версией, плагин при установке необходимо деактивировать и затем активировать вновь, иначе функция отображения <strong>User agent</strong> работать не будет. Следует также отметить, что плагин работает совместно с плагином <strong><a href="http://txfx.net/code/wordpress/subscribe-to-comments/" target=_blank>Subscribe To Comments</a></strong>. Что будет, если последний не установлен, мы не проверяли. В дальнейшем мы сделаем отдельную страничку по плагину, где будет самая актуальная информация по его установке и использованию.</p>
<p>Что же мы получаем при помощи Comment extender? Итак, как вы уже заметили, количество информации о комментаторе увеличилось. Теперь мы можем отследить, каким браузером под какой ОС он пользуется, а также прикинуть, как часто он оставляет свои комментарии. Также можно посмотреть комментарии с одинаковыми параметрами (для этого нужно кликнуть на соответствующие цифры).</p>
<p>Наш небольшой опыт использования плагина показал, что один из самых полезных параметров &#8211; это IP. Нам удалось обезвредить несколько спамных комментов, отличавшихся по URL и email, но имевших одинаковый IP и довольно невнятное содержание. Кроме того, весьма полезен параметр, показывающий наличие/отсутствие подписки на комментарии. У нас на блоге в форме отправки комментария галочка &laquo;подписаться&raquo; стоит по умолчанию. Редко какой обычный пользователь снимает её. Это если смотреть через браузер. При использовании всяких хитрых программ, когда сразу отсылается запрос, наличие этой галочки совершенно не учитывается, что может служить ещё одним косвенным признаком спама.</p>
<p>Что же делать с обнаруженными комментариями? Мы рекомендуем не удалять их, а помечать как спам. При этом они будут оставаться в базе, что позволит статистике нормально работать (в противном случае у вас потеряется вся информация о предыдущих похождениях спамера), а также обучит ваш антиспам-фильтр, что явно убавит у вас работы.</p>
<p>Если функциональность Comment extenderа вас не устраивает &#8211; пишите нам, всё в наших руках, добавим, поправим. Если плагин понравился, поспособствуйте его распространению. Наша задача &#8211; сделать труд спамера нерентабельным, и в нашем случае сделать это вполне реально. Сделаем мир чуточку лучше! <img src='http://beta.delta-z.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/comment-extender-v-11-ili-poymay-spamera-sam/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Виртуальные машины и эмуляторы. Часть 2, про направления и перспективы</title>
		<link>http://beta.delta-z.com/virtualnyie-mashinyi-i-emulyatoryi-chast-2-pro-napravleniya-i-perspektivyi/</link>
		<comments>http://beta.delta-z.com/virtualnyie-mashinyi-i-emulyatoryi-chast-2-pro-napravleniya-i-perspektivyi/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 10:45:17 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Программы]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/index.php/archives/263</guid>
		<description><![CDATA[В <a href="http://beta.delta-z.com/index.php/archives/262">первой части</a> нашего рассказа о виртуальных машинах и эмуляторах мы познакомились с классификацией виртуальных машин, изучили их достоинства и недостатки, познакомились со сравнениями виртуальных машин и обратили внимание на некоторые интересные эмуляторы. Теперь давайте изучим индустрию виртуальных машин, познакомимся с развитием, с перипетиями, ведь всё это довольно занятно и поучительно…]]></description>
			<content:encoded><![CDATA[<p>В <a href="http://beta.delta-z.com/index.php/archives/262">первой части</a> нашего рассказа о виртуальных машинах и эмуляторах мы познакомились с классификацией виртуальных машин, изучили их достоинства и недостатки, познакомились со сравнениями виртуальных машин и обратили внимание на некоторые интересные эмуляторы. Теперь давайте изучим индустрию виртуальных машин, познакомимся с развитием, с перипетиями, ведь всё это довольно занятно и поучительно…<span id="more-263"></span></p>
<p>Что легче — создать компьютер или написать для него программу? С ростом потребностей второе становится всё труднее и труднее. Тенденции таковы, что чаще &laquo;железо&raquo; делают так, чтобы сохранить преемственность от старых моделей. Посудите сами: на всех современных процессорах могут работать программы для Intel 80386 (если не раньше). Прогресс даже в какой-то степени сдерживается тем, что трудно написать операционную систему и программы для нового компьютера/процессора — легче взять то, что было и постепенно наращивать потенциал. Так появились новые наборы команд, так двигались в развитии видеоадаптеры и прочая периферия.</p>
<p>Но какое отношение всё сказанное имеет к виртуальным машинам? Самое непосредственное. У многих исследователей и разработчиков появилась мысль создать ПО, которое бы работало на любых компьютерах с процессорами самых разных архитектур. Это решило бы не только вопросы переносимости, но и проблемы преемственности, <em>оторвало</em> бы программу от аппаратной платформы. А что для этого нужно? Правильно! Нужна прослойка между &laquo;железом&raquo; и ПО, которая, внося свой уровень абстракции, делает недоступными аппаратные ресурсы напрямую, но зато облегчает и упрощает доступ к ним.</p>
<p>Эту идею классически реализовала Sun в своей Java Virtual Machine (JVM — часть любой системы Java Runtime Environment (JRE). Смотрите, например в <a href="http://java.sun.com/javame/index.jsp" target=blank_>Java ME</a>). Виртуальная машина исполняет не машкоды — она интерпретирует байт-код. Байткод не зависит от платформы. Он компактен и быстрее интерпретируется, чем программа &laquo;в исходниках&raquo;.</p>
<p>Получается так, что Sun создала свою виртуальную среду в которой машкод — это байт-код. Эта среда более гибкая и универсальная, чем &laquo;железный&raquo; процессор. Эту среду можно эмулировать. И появление Java как раз пришлось на 90 годы двадцатого столетия, время, когда появились мощные процессоры, способные справиться с задачей эмуляции.</p>
<p>Сейчас на большинстве современных мобильных платформ установлена Java ME, включающая JVM. Любой мало-мальски продвинутый телефон способен запускать Java-игры. Многие серьёзные программы и среды проектирования пишутся на Java, чтобы обеспечить кроссплатформенность, а значит расширить область применения ПО. Пример тому — программа <a href="http://beta.delta-z.com/index.php/archives/231">GanttProject</a> из нашей <a href="http://beta.delta-z.com/index.php/test-page/">коллекции бесплатных программ</a>, раздел <a href="http://beta.delta-z.com/index.php/test-page/office/">Офис</a>. Это Java-программа. Она работает где угодно, — там, где можно установить соответсвующую ей Java VM.</p>
<p>Лавры победителей никогда не давали спокойно спать корпорации Microsoft. И если Sun разрабатывала Java с начала 90-х, а в середине 90-х выпустила в большой свет, то уже в 2000 году Microsoft дала свой ответ &#8211; <strong>.NET</strong>. Но и свободное сообщество тоже не дремлет. Родился проект <a href="http://ru.wikipedia.org/wiki/Mono" target=blank_>Mono</a>. Этот проект призван реализовать <strong>.NET</strong> на базе свободного ПО. Спонсор проекта &#8211; Novell.</p>
<p>Эмуляторы, позволяющие запускать компьютерные программы операционных системах, отличных от той, для которой они создавались, развиваются постоянно. Но самое широкое распространение они получили в среде Linux. Это закономерно: можно потратить силы на написание одного эмулятора, а потом пользоваться множеством программ Windows. Cedega, Wine, CrossOver &#8211; хорошо известные многим названия. Эти эмуляторы дают возможность расширить применяемость ПО в различных операционных системах.</p>
<p>Но людям хочется работать не только в иной операционной системе, но ещё и на другом компьютере, &laquo;компьютере в окне&raquo;, отличном от том, на котором работают. Это позволят сделать виртуальные машины, напрмер Bochs, Parallels, QEMU, VMware. В &laquo;окошке&raquo; виртуальной машины можно установить любую ОС, а в ней уже запустить любую программу. В этом случае стираются границы не только на уровне операционных систем, но и на уровне аппаратных платформ. И если писать и отлаживать программу для Windows в Linux мягко говоря глупо и бессмысленно, то отлаживать драйвера для различных аппаратных систем не вставая со стула &#8211; вещь весьма полезная.</p>
<p><center>***</center></p>
<p>А теперь немного &laquo;крамолы&raquo; с точки зрения программистов.</p>
<p>Хочу продолжить тему виртуальных машин. &laquo;В железе&raquo;. Я бы выделил семейство ARM как семейство ядер, подпадающих под вышеприведённую классификацию. По сути, ARM &#8211; универсальное ядро, универсальная виртуальная машина, которую используют многие производители для создания своих процессоров. Улавливаете смысл? Есть ядра x86, DSP, микроконтроллеров. Но все они привязаны к конкретной архитектуре, к конкретному набору периферии. Компания ARM же сделала великое дело &#8211; унифицировала ядро, создала &laquo;виртуальную машину в железе&raquo;.</p>
<p>Это позволило запускать одни и те же программы на процессорах от различных производителей: Intel, Atmel, Cirrus Logic, NXP (Philips), Texas Instruments&#8230; На процессорах с разной периферией, с абсолютно разными порою аппаратными особенностями.</p>
<p>Разработчики и программисты в последнее время достигли просто вершин виртуализации. На &laquo;виртуальном&raquo; ядре ARM работает виртуальная машина Java. В помощь ей развивают технологии <a href="http://ru.wikipedia.org/wiki/Jazelle" target=blank_>Jazelle</a>, позволяющие ускорять Java на ARM.</p>
<p><center>***</center></p>
<p>Итак, мы увидели, что с развитием аппаратных возможностей расширились возможности создания виртуальных машин и эмуляторов. &laquo;Виртуалы&raquo; служат хорошую службу. Они <strong>расширяют возможности человека, связанные с примняемостью программного обеспечения на разных платформах, и наоборот, с применяемостью различных программ и ОС на одной платформе</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/virtualnyie-mashinyi-i-emulyatoryi-chast-2-pro-napravleniya-i-perspektivyi/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Управление проектом с минимальными затратами</title>
		<link>http://beta.delta-z.com/upravlenie-proektom-s-minimalnyimi-zatratami/</link>
		<comments>http://beta.delta-z.com/upravlenie-proektom-s-minimalnyimi-zatratami/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 08:45:58 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/index.php/archives/281</guid>
		<description><![CDATA[На IBM вышла очень интересная статья по управлению проектами: <a href="http://www.ibm.com/developerworks/ru/library/kroll_ambler/index.html" target=blank_>Передовые методы управления разработкой с минимальными затратами. Часть II: процессы и показатели</a>. Первая часть материала к сожалению не переведена на русский: <a href="http://www.ibm.com/developerworks/rational/library/jun07/kroll/index.html" target=blank_>Best practices for lean development governance. Part 1: Principles and organization</a>. Ждём третью часть статьи!]]></description>
			<content:encoded><![CDATA[<p>На IBM вышла очень интересная статья по управлению проектами: <a href="http://www.ibm.com/developerworks/ru/library/kroll_ambler/index.html" target=blank_>Передовые методы управления разработкой с минимальными затратами. Часть II: процессы и показатели</a>. Первая часть материала к сожалению не переведена на русский: <a href="http://www.ibm.com/developerworks/rational/library/jun07/kroll/index.html" target=blank_>Best practices for lean development governance. Part 1: Principles and organization</a>. Ждём третью часть статьи!</p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/upravlenie-proektom-s-minimalnyimi-zatratami/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Виртуальные машины и эмуляторы. Часть 1</title>
		<link>http://beta.delta-z.com/virtualnyie-mashinyi-i-emulyatoryi-chast-1/</link>
		<comments>http://beta.delta-z.com/virtualnyie-mashinyi-i-emulyatoryi-chast-1/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 10:59:58 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Программы]]></category>

		<guid isPermaLink="false">http://beta.delta-z.com/index.php/archives/262</guid>
		<description><![CDATA[Зачем виртуализировать какое-то "железо" или ОС? Я могу назвать две большие причины. Первая — использование одной аппаратной платформы несколькими ОС (используется у хостеров). Вторая — разработка и отладка. Давайте немного поговорим о виртуальных машинах, познакомимся с их обзорами и сравнениями…]]></description>
			<content:encoded><![CDATA[<p>Зачем виртуализировать какое-то &laquo;железо&raquo; или ОС? Я могу назвать две большие причины. Первая — использование одной аппаратной платформы несколькими ОС (используется у хостеров). Вторая — разработка и отладка. Давайте немного поговорим о виртуальных машинах, познакомимся с их обзорами и сравнениями…<span id="more-262"></span></p>
<p>Можно выделить целый ряд &laquo;полезностей&raquo; применения виртуальных машин:</p>
<ul>
<li>Виртуальные машины позволяют быстро (не прибегая к реальной аппаратуре)  менять конфигурацию аппаратных средств и выполнять на ней требуемый код. Я бы назвал это <strong>универсальностью и многовариантностью</strong>.</li>
<li>Вы можете на одном реальном компьютере запустить сразу несколько ОС в различных виртуальных пространствах. Эти ОС не будут (иногда) даже знать о том, что работают не на &laquo;железе&raquo;, а в программе, которая этот процессор и всё его окружающее &laquo;железо&raquo; эмулирует. Таким образом, виртуальная машина обеспечивает <strong>независимость и изолированность</strong>.</li>
<li>Зависла программа, &laquo;упала&raquo; ОС, работающая в одном из виртуальных пространств — не беда. Другие-то продолжают работать! В целом ряде случаев виртуальная машина обеспечивает <strong>устойчивость</strong>.</li>
<li>Виртуальная машина бывает гораздо дешевле реальной. Вы можете разрабатывать какую-то аппаратно-программную платформу. И пока создаётся аппаратная честь, можно уже начать писать программы, запускать ОС в эмуляторе, оценивать производительность, пытаться даже подбирать конфигурацию. Таким образом, виртуальные машины повышают <strong>рентабельность</strong> процесса разработки, увеличивают его <strong>скорость</strong>.</li>
<li>Даже загрузка программы или ОС в эмулятор чаще происходит быстрее, чем в реальное &laquo;железо&raquo;, что очень удобно при написании ПО, при отладке. Кстати, о последнем. Некоторые виртуальные средства позволяют отлаживать код, тогда как отладка на реальных системах иногда невозможна или может потребовать дополнений в схему (JTAG, например), что удорожит разработку и будет совершенно не нужно в серийном образце, и/или приобретения отладочного ПО и оборудования. Таким образом, виртуальная машина увеличивает <strong>эффективность</strong> разработки.</li>
</ul>
<p>Чтобы получше разобраться в типах виртуальных машин, советую прочесть статью Тима Джонса <a href="http://www.ibm.com/developerworks/ru/library/l-linuxvirt/" target=blank_>Виртуальный Linux</a>. Тим Джонс разделяет виртуальные машины на несколько классов. Выделю три из них:</p>
<ol>
<li>С <strong>эмуляцией оборудования</strong>. Это когда эмулятор выполняет код как интерпретатор. Это самая медленная эмуляция. Но она имеет одно важное преимущество — выполнение кода любой платформы под любой платформой (как программной так и аппаратной). То есть вы можете эмулировать ARM под x86, или DOS на x86 под Windiws® CE на ARM, или uLinux на Blackfin под Windows® на x86 и так далее. Да, медленно, но зато таким и только таким образом (эмуляцией оборудования) можно эмулировать любую платформу на любой платформе (иногда совершенно концептуально различные).</li>
<li><strong>Полная виртуализация</strong>. В этом случае на одной машине могут работать несколько ОС, работой которых управляет гипервизор. ОС совершенно &laquo;не чувствуют&raquo; присутствия на машине других ОС. Это достигается аппаратными средствами (современные процессоры x86 имеют в своём составе команды и средства, предназначенные для виртуализации; без них полная виртуализация была бы невозможной).<br />
Плюс полной виртуализации в том, что ОС работают быстро, так как (практически) не происходит интерпретации кода — код выполняется непосредственно процессором (практически) без модификации. Способом полной виртуализации можно запустить на машине любую (любые) ОС, которые поддерживают данную платформу. Но минус этой концепции в том, что невозможно таким образом (в принципе невозможно) запустить на машине эмуляцию аппаратной платформы, отличной от родительской (напрмер, запустить Windows® CE на ARM под x86).</li>
<li><strong>Паравиртуализация</strong>. В этом случае гостевую ОС модифицируют под конкретный гипервизор. То есть гостевая ОС &laquo;знает&raquo;, что виртуализирована и что на машине может работать ещё несколько таких ОС. Всё это делается для того, чтобы избежать модификации кода на лету, ускорить вызовы и переключения.<br />
Основным достоинством такой концепции является скорость работы гостевых ОС и приложений в них. Она максимальна. Гипервизор тратит на себя не так много ресурсов, как в случае с полной виртуализацией. Основной минус — потеря гибкости (&laquo;незаточенную&raquo; гостевую ОС в такой системе уже не запустишь).</li>
</ol>
<p>Вообще, разница между описанными классами виртуальных машин условна. Всегда есть свои &laquo;но&raquo;. Каждая система виртуализации имеет свою концепцию в той или иной мере располагающую её на шкале от полной эмуляции оборудования до паравиртуализации. Также можно выделить и другие классификации, но приведённая выше мне лично кажется вполне удобной и соответствующей положению дел на сегодняшний момент.</p>
<p>Как пример можно привести известные виртуальные машины и эмуляторы, перечисленные в <a href="http://en.wikipedia.org/wiki/Comparison_of_virtual_machines" target=blank_>Сравнении виртуальных машин</a>. Обратите внимание на то, что есть и русский вариант этой статьи, но он пока менее информативен. В колонке &laquo;Принцип действия&raquo; нет &laquo;чистых записей&raquo; &laquo;эмуляция оборудования&raquo; или &laquo;паравиртуализация&raquo;. Всё с какими-то оговорками… В этом и есть прелесть всей картины — каждый её элемент чем-то отличается от остальных и имеет свои преимущества.</p>
<p>В заключение приведу несколько ссылок на интересные ресурсы/продукты.</p>
<p><a href="http://www.ibm.com/developerworks/ru/library/l-virtualization-colinux/index.html" target=blank_>Виртуализация при помощи coLinux</a>. По сути coLinux — способ запускать приложения Linux под Windows. coLinux — порт ядра Linux, делающий его одновременно паравиртуализированной системой и гипервизором, который отправляет запросы не оборудованию, а родительской системе — Windows®.</p>
<p><a href="http://www.ipflow.utc.fr/index.php/Cisco_7200_Simulator" target=blank_>Cisco 7200 Simulator</a>. Это эмулятор Циско на ПК. Позволяет, фактически, превратить ваш компьютер в маршрутизатор известного производителя. Однако для работы нужны загрузочные образы Cisco IOS. Также поддерживаются <em>&laquo;Cisco 3600 series (3620, 3640 and 3660), 3700 series (3725, 3745) and 2600 series (2610 to 2650XM, 2691)&raquo;</em>. <a href="http://www.certification.ru/cgi-bin/forum.cgi?action=thread&#038;id=18466" target=blank_>Здесь</a> ветка форума, посвящённая этому эмулятору.</p>
<p>Кое-что можно почерпнуть (или поделиться своими впечатлениями и переживаниями) на <strong>Нашем форуме</strong>. В его отдельной ветке <a href="http://beta.delta-z.com/cgi-bin/yabb2/YaBB.pl?num=1190014768" target=blank_>Эмуляторы, симуляторы и прочее…</a></p>
]]></content:encoded>
			<wfw:commentRss>http://beta.delta-z.com/virtualnyie-mashinyi-i-emulyatoryi-chast-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

