<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>0x7BE : Alkid`s journal</title>
  <link>http://0x7be.livejournal.com/</link>
  <description>0x7BE : Alkid`s journal - LiveJournal.com</description>
  <lastBuildDate>Mon, 02 Nov 2009 19:04:04 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>0x7be</lj:journal>
  <lj:journalid>10160222</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/60227239/10160222</url>
    <title>0x7BE : Alkid`s journal</title>
    <link>http://0x7be.livejournal.com/</link>
    <width>90</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/47658.html</guid>
  <pubDate>Mon, 02 Nov 2009 19:04:04 GMT</pubDate>
  <title>Базовые функции ИИ: Анализ</title>
  <link>http://0x7be.livejournal.com/47658.html</link>
  <description>&amp;nbsp;В предыдущей заметке о гештальте я немного затронул тему анализа, как одной из основных функций ИИ. Пока я ограничился лишь описанием абстрагированных функции анализа - повышения уровня абстракции информации до того уровня, на котором принимаются решения, опустив подробности. Эту заметку я хочу посвятить более подробному осмыслению аналитического процесса. В перспективе я хочу рассмотреть и его антипод - процесс синтеза.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;Как уже было сказано, между информацией, поступающей с первичных входов (сенсоров) и той картиной мира, в контексте которой имеет смысл принимать решения, существует семантический разрыв. Первичная информация слишком детальна и массивна, её необходимо обработать, выделив существенное и скрыв несущественные детали. Например, когда человек читает текст с экрана, первичными элементами восприятия являются световые пятна, ощущаемые сечаткой глаз. При этом, если человек хорошо умеет читать, минимальными осознаваемыми единицами информации являются отдельные слова и словосочетания. Смысл же текста складывается из предложений. При этом на смысл текста не влияет шрифт и цвет букв - они в данном случае являются той самой &amp;quot;незначащей&amp;quot; составляющий, которая должна быть опущена.&lt;br /&gt;&lt;br /&gt;Переход от первичной, конкретной формы информации к абстракции - смыслу - и составляет суть аналитического процесса (или же процесса интерпретации). Как это происходит? Для начала пару слов об истории идей, которые легли в основу заметки.&lt;br /&gt;&lt;br /&gt; В 1957-ом году в своей книге &amp;quot;Синтаксические стуктуры&amp;quot; лингвист Ноам Хомски ввёл понятия поверхностных и глубинных структур и трансформационной грамматики. В его концепции поверхностные структуры представляют собой конкретные синтаксические формы (предложения, словосочетания) которые мы говорим или читаем, а глубинные структуры - внутренне представление смысла, выраженного в этих синтаксических формах. Для формального описания процессов перехода от поверхностных структур к глубинным и обратно он предложил трансформационные грамматики, описывающие процесс интерпретации поверхностных синтаксических форм в виде последовательных трансформаций от отдельных слов в синтаксические конструкции, из них в боле сложные конструкции и в итоге в единую структуру, описывающую целиком всё предложение.&amp;nbsp;Эту идею позже подхватили основоположники НЛП - Джон Гриндер и Ричард Бендлер. Они распространили идею о поверхностных и глубинных структурах с исключительно лингвистической области на всё восприятие и действие человека, в том числе и невербальное. По их версии в процессе перехода от поверхностных структур в глубинным на информацию действуют процессы обобщения, искажения и разрушения информации, чем и обусловлены определённые особенности человеческого восприятия и поведения.&amp;nbsp; Другом важным источником идей является модель &amp;quot;память-предсказание&amp;quot;, изложенная Джеффом Хокинзом в своей книге &amp;quot;Об интеллекте&amp;quot;. В этой модели Хокинз делает очень важное замечание - он вводит понятие времени, т.е. восприятие в его модели оказывается привязанным ко времени. При этом, по его версии, восприятие так же носит характер иерархического абстрагирования, при котором &amp;quot;низшие&amp;quot; отделы мозга поставляют в &amp;quot;высшие&amp;quot; всё более абстрагированную инормацию.&lt;br /&gt;&lt;br /&gt;При всей разнице в подходах, описанные теории имеют одну общую черту - они описывают переработку поступающей информации как рекурсивный поиск неких паттернов во входной информации. Упрощённо говоря, первичная информация абстрагируется до паттернов первого уровня, среди них, в свою очередь, отыскиваются паттерны второго уровня и т.д. Другой чертой, объединяющей эти модели, является понятие о том, что одна и та же глубинная структура могут иметь различное выражение в поверхностных структурах. В теории Хокинза эта идея выражена в виде наблюдения о том, что стабильность представления информации по отношению к изменяющемуся окружению повышается по мере движения к &amp;quot;высшим&amp;quot; отделам мозга. Эта идея имеет прямое отношение к сокрытию несущественных деталей, о котором упоминалось ранее.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Опыт лингвистики и гештальт-психологии даёт ещё одно важное замечание - отдельные элементы поверхностной структуры приобретают своё значение исключительно в контексте всей поверхностной структуры. Например, одна и та же фраза, произнесённая в разных ситуациях, может иметь разный смысл. Или же одна и та же фигура может приобретать разную визуальную интерпретацию в зависимости от ожидания, диктуемого контекстом.&lt;br /&gt;&lt;br /&gt;Итак, суммируя вышеизложенное, можно сформулировать следующие тезисы:&lt;br /&gt;1. Суть анализа - повышение уровня абстракции информации.&lt;br /&gt;2. Абстрагируемая единица информации - паттерн, &amp;quot;схватывающий&amp;quot; отношения между элементами и заменяющих их на абстрактный элемент.&lt;br /&gt;3. Паттерны образуют иерархию. Выходы паттернов уровня n могут образовывать паттерны уровня n+1. Общее количество уровней зависит от сложности обрабатываемой информации.&lt;br /&gt;4. Процесс применения паттернов в общем случае недетерминистичен, т.е. может порождать множественные результаты (интерпретации). Однако по мере повышения уровня абстракции *обычно* наблюдается схождение к одному решению. Исключение - некоторые достаточно редкие ситуации, когда есть более одного решения (например, &amp;quot;странные картинки&amp;quot;, часто иллюстрирующие идеи гештальт-психологии).&lt;br /&gt;&lt;br /&gt;Формализовать эти идеи можно по-разному. Лично мне больше нравится идея обобщить принципы, положенные в основу формальных грамматик, на невербальную область, описываемую символически. Хокинз предлагает коннективистский подход, который ближе к нейросетям и &amp;quot;слабому ИИ&amp;quot; (см. модель Hierarchical Transactional Memory). &lt;br /&gt;&lt;br /&gt;Обобщение формальной грамматики происходит путём абстрагирования природы паттерна и выражения от последовательности синтаксических элементов до множества элементов некоего алфавита, которые могут находиться в произвольных отношениях, а не только в отношениях следования. Определяются алфавиты &lt;em&gt;А[0...n]&lt;/em&gt;, где &lt;em&gt;A[0]&lt;/em&gt; - это конкретный (входной) алфавит, а &lt;em&gt;A[x]&lt;/em&gt;, где &lt;em&gt;х &amp;gt; 0&lt;/em&gt; - абстрактные алфавиты,&amp;nbsp;дающие имена паттернам. Эти алфавиты образую общий алфавит &lt;em&gt;А&lt;/em&gt;, на базе которого могут быть определены выражения &lt;em&gt;E&lt;/em&gt;.&amp;nbsp; Далее определяются правила трансформации вида &lt;em&gt;R = P -&amp;gt; N&lt;/em&gt;, где &lt;em&gt;P &lt;/em&gt;- паттерн, а &lt;em&gt;N&lt;/em&gt; - имя паттерна, принадлежащее одному из абстрактных алфавитов. Природа паттерна &lt;em&gt;P&lt;/em&gt; абстрактна, т.е. я не формулирую его устройство. Правило может быть применено к выражению, породив множество решений, т.е.&amp;nbsp; &lt;em&gt;R(E) = {E}&lt;/em&gt;. Правила должны обеспечивать неубываемость уровня абстракции, т.е. N не может быть из &amp;quot;менее абстрактного алфавита&amp;quot;, чем распознаваемые паттерном &lt;em&gt;P&lt;/em&gt;. Набор правил трансформации определяет интерпретацию входной информации. Процесс интерпретации происходит до тех пор, пока не получается выражение, к которому не применимы правила.&lt;br /&gt;</description>
  <comments>http://0x7be.livejournal.com/47658.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/47424.html</guid>
  <pubDate>Wed, 09 Sep 2009 16:40:52 GMT</pubDate>
  <title>Гештальт как концепция AI</title>
  <link>http://0x7be.livejournal.com/47424.html</link>
  <description>В своих размышлениях на тему ИИ я обращаюсь к различным источникам, среди которых есть и &amp;quot;профильные&amp;quot; и не очень. Некоторое время назад я общался с одним френдом на тему психологии и он (точнее она) рассказала мне про гештальт-психологию, которая строится вокруг понятия гештальта (см &lt;a href=&quot;http://en.wikipedia.org/wiki/Gestalt_psychology&quot;&gt;en.wikipedia.org/wiki/Gestalt_psychology&lt;/a&gt;). Эта концепция натолкнула меня на интерсное направление в размышлении.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Речь пойдёт об анализе, как об одной из функций ИИ, действующего в динамической среде, т.е. имеющего понятие о времени. Вообще, тема анализа и синтеза, как функций ИИ - это отдельная интересная тема, которую надо будет осветить отдельно. На вход в ИИ поступают данные самого низкого уровня абстракции, т.е. предельно конкретные. Например, если речь идёт об ИИ, играющем в стратегическую игру - записи, описывающие свои юниты и юниты противника. Однако для алгоритмов, принимающих решения, эти данные являются слишком &amp;quot;сырыми&amp;quot;, необходима их переработка в более удобоваримый вид. Этой переработкой является анализ входной информации, задачей которого является повышение уровня абстракции информации до того уровня, который необходим для принятия решения. Если вернуться к рассматриваемому примеру, то часть ИИ, принимающая решения, не оперирует в терминах отдельных юнитов. Тактические решения удобнее записывать используя такие понятия, как &amp;quot;ударная группа&amp;quot;, &amp;quot;линия обороны&amp;quot;, &amp;quot;опорный пункт&amp;quot;, &amp;quot;разведгруппа&amp;quot;,&amp;nbsp;&amp;quot;фронт&amp;quot;, &amp;quot;тыл&amp;quot; и т.п. Эти понятия содержат в себе значимую для тактического уровня информацию, скрывая излишние детали. Иными словами отдельные фишки на карте как-то кластеризутся аналитическим модулем ИИ (как именно - отдельная тема) и получившиеся кластеры (группы) нагружаются дополнительной семантикой (например, тип кластера) и аггрегированной информацией (количество юнитов, суммарная мощь, усреднённое расположение, направление и скорость движения и т.п.). &amp;nbsp;При необходимости получившиеся кластеры так же могут подвергнуться подобному процессу, что даст ещё большее повышение уровня абстракции и выстраивание иерархии кластеров.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Теперь вспомним, что мы имеем дело с динамическим окружением, т.е. в следующий дискретный момент времени (напрмер, следующий ход) мы будем иметь другую картину входных данных. Скорее всего, эта картина не будет радикально отличаться от предыдущей, ибо окружение обычно имеет свойство непрерывности (спорное утвержение!). Соответственно, эти входные данные так же будут проанализированы и над ними будет построена абстрактная структура их описывающая. &amp;nbsp;Возникает вопрос, как соотносятся абстракции, полученные на шаге N и на шаге N+1? Вот тут как раз может быть применена идея гештальта. Суть этой идеи заключается в следующем - в мозгу человека (или в ИИ)&amp;nbsp;поступающие данные формируют некоторый устойчивый процесс (гештальт), который является отражением окружения. При этом, один раз возникнув (свойство эмерджентности гештальта), этот процесс начинает влиять на интерпретацию следующих порций информации (свойство устойчивости гештальта). Типичный пример подобного поведения у человека - интерпретация картинки с собакой из статьи по ссылке. Сначала она кажется мешаниной пятен, но когда приходит понимание (или просто кто-то скажет) того, что там изображена собака под деревом, эти пятна начинают далее восприниматься как детали известной структуры.&amp;nbsp;Более того, если эту сцену начать вращать в пространстве, то человек без труда будет угадывать в новых наборах пятен ту же самую собаку и дерево. Другими словами, как только гештальт формируется, он начинает &amp;quot;вписывать&amp;quot; новые данные в свою структуру, а не анализировать их с &amp;quot;чистого листа&amp;quot;.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Как эта идея может проявиться в примере с ИИ? Например, предположим, что наш кластеризатор имеет следующее встроенное правило:&amp;nbsp;&amp;quot;группировать близкорасположенные юниты, которые движутся в одном направлении с одинаковой скоростью&amp;quot;. &amp;nbsp;Рассмотрим пример:&amp;nbsp;группа юнитов движется в определённой формации до момента T1, после чего юниты меняют формацию, причём новая формация стабилизируется только после момента T2 (T2 &amp;gt;&amp;nbsp;T1). &amp;nbsp;Между T1 и T2 скорости и курсы юнитов, образующих группу, могут сильно менятся, но до Т1 и после Т2 они продолжат движение в строю в одном направлении с одинаковой скоростью.&amp;nbsp;&lt;/p&gt;Если интерпретация на каждом шаге будет независимой, то в момент Т1 кластеризатор &amp;quot;потеряет&amp;quot; группу и снова &amp;quot;найдёт&amp;quot; её после Т2. Но это поведение кластеризатора будет ошибочным, ибо по условию примера, юниты находятся в одной группе, они лишь перестраиваются. &amp;nbsp;Если же реализовать &amp;quot;преемственность&amp;quot; абстракций между шагами, то даже после Т1 кластер будет существовать в у ИИ в &amp;quot;уме&amp;quot;, а кластеризатор будет иметь &amp;quot;подсказку&amp;quot;, что в этом месте ему следует искать группу с определёнными параметрами. С этой подсказкой кластеризатор может существенно ослабить правило группировки юнитов, поскольку ему надо вслего лишь подтвердить ожидание. В таком случае, даже между Т1 и Т2 группа не пропадёт из области видимости ИИ. С другой стороны, если группа на самом деле распадётся на независимые юниты, то до ИИ это &amp;quot;дойдёт не сразу&amp;quot;, ибо он будет пытаться увидеть группу ещё некоторое время из-за встроенной инерциальности мышления.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;В целом идея &amp;quot;гештальта&amp;quot; позволяет реализовать в ИИ восприятия времени не как набора разорванных состояний, а как единого процесса, обладающего свойством непрерывности, т.е. ИИ будет &amp;quot;понимать&amp;quot;, что группа, наблюдаемая им на шаге N+1, это некая конкретна группа, наблюдавшаяся на шаге N.&lt;br /&gt;&lt;br /&gt;P.S. В процессе размышления мне пришла в голову мысль, что подобная идея в неявном виде следуюет из модели &amp;quot;память-предсказание&amp;quot;, которую Джефф Хокинз сформулировал в книге &amp;quot;Об интеллекте&amp;quot;.&lt;br type=&quot;_moz&quot; /&gt;</description>
  <comments>http://0x7be.livejournal.com/47424.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/47245.html</guid>
  <pubDate>Sat, 29 Aug 2009 19:33:56 GMT</pubDate>
  <title>Встроенный язык для скриптования ИИ.</title>
  <link>http://0x7be.livejournal.com/47245.html</link>
  <description>Давно меня занимает следующая идея: встроенный язык для скриптования ИИ-ориентированных задач. &amp;quot;Простых&amp;quot; скриптовых движков, пригодных для встраивания в приложения сейчас пруд пруди, но все (из известных мне) - это императивные языки. Они не очень хорошо подходят для задач скриптованяи ИИ. Основные особенности таких задач заключаются в следующем:&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;1. Высокая степень недетерминизма.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;2. Весьма произвольное качество входных данных.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;3. Необходимость анализировать входные данные, повышать их уровень абстракции.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;4. Необходимость синтезировать выходные данные с понижением их уровня абстракции.&lt;br /&gt;&amp;nbsp;&amp;nbsp;5.&amp;nbsp;Зачастую необходимость опираться на эвристики и приближённые рассчёты и модели.&lt;br /&gt;&amp;nbsp;&amp;nbsp;6. Необходимость представлять знания.&lt;br /&gt;&amp;nbsp;&amp;nbsp;(Примечание:&amp;nbsp;Обратите внимание, что пункты 3 и 4 являются зеркальным отражением друг друга. Это наводит на мысль, что желательным свойством языка была бы обратимость программ a-la Prolog, т.е. формулирование программ не как отображений (функций), а как отношений (уравнений)).&lt;br /&gt;&lt;br /&gt;Опыт программирования подобного рода задач на императивных (Pascal- и C-подобных) языках наводит на мысль, что это весьма противоестественное занятие. &amp;nbsp;Необходим другой язык, более высокого уровня и такой идеологической базой, которая бы делала простым и естественным обращение с задачами описанного типа.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Пока попытки смоделировать такой язык, черпая вдохновение из известных мне языков, &amp;nbsp;привели меня к следующим идеям:&lt;br /&gt;1. Основа языка - недетерминистическая система преобразования термов при помощи определяемых правил с унификацией и логическими переменными. Т.е. основная единица языка - трансформационное правило, &amp;quot;голова&amp;quot; которой унифицируется с исходным выражением, порождая связи переменным со значениями, а тело подставляется вместо унифицированного терма. Один и тот же терм может быть одновременно преобразован несколькими правилами, что породждает возможность нескольких результатов трансформации, т.е. недетерминистическую прогармму.&amp;nbsp;&lt;br /&gt;1.1. Частичная подстановка. Даже если после унификации головы правила у неё остаются свободные переменные, вычисление может быть продолжено. Если же дело дошло до встроенных правил, которые для вывода решения не могут принмать свободных переменных (например - встроенная арифметика), соответсвующая трансформация может быть отложена или переведена в разряд ленивых вычислений.&lt;br /&gt;2. Ограничения. С переменными могут быть ассоциированы предикаты, ограничивающие область возможных значений, которую переменные смогут принимать в при унификации.&lt;br /&gt;3. Динамическая типизация с ограничениями. Как следствие п.2. пользователь может определять ограничения типа значений, которые могут связываться с переменными. Поскольку язык ограничений и язык программирования - один и тот же, система типов является Тьюринг-полной, т.е. програмист может описать тип произвольным образом ограничивающий область своих значений. Записи, алгебраический типы и т.п. могут быть выражены через эту базовую идею и быть оформлены как синтаксический сахар.&lt;br /&gt;4. Единое представление программы и данных. Как следствие - возможность метапрограммирования.&lt;br /&gt;5. Явные средства по контролю детерминизма (преобразование недетерминированных вычислений в ленивые списки результатов и списков в недетерминизм).&lt;br /&gt;6. Развитые встроенные средства для обработки множеств.&lt;br /&gt;&lt;br /&gt;За сим мысль обрывается. Из уже сделанного по этой теме - прототип движка переписывающего термы (без пряников, в виде ограничений) и обрывочные примеры программ на этом гипотетическом языке. На самом деле сделано пока мало. Мучает вопрос - а не делаю ли я велосипед?&amp;nbsp;М.б. подобного рода вещи уже реализованы в виде библиотек/плагинов/компонентов. В гугле пока ничего не нашёл.&lt;br /&gt;&lt;br type=&quot;_moz&quot; /&gt;&lt;br /&gt;</description>
  <comments>http://0x7be.livejournal.com/47245.html</comments>
  <category>jantar</category>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/47095.html</guid>
  <pubDate>Fri, 21 Aug 2009 02:14:23 GMT</pubDate>
  <title>Я стал папой.</title>
  <link>http://0x7be.livejournal.com/47095.html</link>
  <description>Собственно, сабж! &lt;br /&gt;Сегодня утром у меня родился сын. &lt;br /&gt;Началась новая жизнь. :)</description>
  <comments>http://0x7be.livejournal.com/47095.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/46639.html</guid>
  <pubDate>Thu, 09 Jul 2009 17:41:23 GMT</pubDate>
  <title>О вырождении программистов из-за новых технологий :)</title>
  <link>http://0x7be.livejournal.com/46639.html</link>
  <description>В некоторых... гм... кругах очень модным считается высказывание мнения о том, что &amp;quot;все эти ваши&amp;quot; .NET-ы и Джавы привели к тому что в индустрию пришло много новичков, позорящих честь профессии. Мол, новые языки и технологии делают программирование &amp;quot;слишком простым&amp;quot; и доступным для широких слоёв населения, подрывая тем самым престиж и таинственность образа программиста. Лично я считаю это ни чем иным, как цеховым обсурантизмом, желанием сохранить свою ценность и запах элитарности (если он есть вообще). Более того, я считаю, что утверждающие мнение об упрощении программирования ошибаются. &lt;br /&gt;&lt;br /&gt;Из чего складывается сложность работы программиста?&amp;nbsp;Она складывается из двух вещей. Одна из них - это фундаментальная сложность программирования, заключающейся в том,&amp;nbsp;что программирование - это суть перевод с человеческого языка на формальный со всеми вытекающими последствиями (необходимость разрешать неопределённости). Причём перевод не вольный, а поставленный в рамки ограничений, как и любая другая инженерная работа. Это, кстати, ОСНОВНАЯ сложность. Другая сложность - это инструментальная сложность. По сути, столь яростно остаиваимая &amp;quot;элитарность&amp;quot; олдфажных программитстов на С/С++ и т.д. сводилась к тому, что они успешно боролись недостатками и ограничениями машин и самих инстурментов. Новые языки намного лучше скрывают эти подводные камни, чем вызывают зависть и агрессию олдфагов, поскольку делают ненужным целый пласт знаний и навыков, в которые были вложены многие силы, и которые являются предметом гордости. Это МЕНЬШАЯ&amp;nbsp;сложность. Так что считать, что именно упрощение инструментальных средств делает программирование проще, означает допускать ошибку. Это делает проще КОДИРОВАНИЕ.&lt;br /&gt;&lt;br /&gt;Но даже тут не всё так просто. Сейчас в мейнстрим инструментов разработки начинает постепенно входить весь тот багаж наработок, который давно вызревал в &amp;quot;академических&amp;quot; средах и языках. По сути программирование сейчас становится всё более и более декларативным, я даже не побось этого слова - &amp;quot;математикообразным&amp;quot;. Не математическим ещё, но уже ближе к этому. И вот тут кроются новые &amp;quot;инстурментальные сложности&amp;quot;. Если раньше программист работал в достаточно простой для понимания императивной парадигме, только хорошенько &amp;quot;заминированной&amp;quot; кучей подводных камней технического характера, то теперь программист всё больше должен разбираться в вещах фундаментальных, которым в универсистете учат и от которых студенты усиленно нос воротят. На горизонте маячит новый облик программиста - не знающего кучу трюков,туловок и особенностей реализации ремесленника,&amp;nbsp;а имеющего хороший фундаментальный бэкграунд специалиста, более похожего на прикладного математика (собствено говоря, на &amp;quot;эксклюзивных&amp;quot; задачах мы можем наблюдать это уже в полный рост ).&lt;br /&gt;&lt;br /&gt;А тут IQ&amp;nbsp;и желание учиться надо даже поболее, чем для того, что бы на досуге выучить С++ и поковырять операционку и пару технологий.&lt;br /&gt;&lt;br /&gt;P.S. Недавно видел в одном форуме,&amp;nbsp;как один из &amp;quot;программистов&amp;quot;&amp;nbsp;авторитетно заявлял:&amp;nbsp;&amp;quot;графы? программисту это не надо!&amp;quot; :)</description>
  <comments>http://0x7be.livejournal.com/46639.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/46402.html</guid>
  <pubDate>Thu, 25 Jun 2009 09:30:27 GMT</pubDate>
  <title>...</title>
  <link>http://0x7be.livejournal.com/46402.html</link>
  <description>&amp;nbsp;Увы, чуда не случилось - вчера после операции, давшей некоторую надежду, Марсик отошёл в мир иной.</description>
  <comments>http://0x7be.livejournal.com/46402.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/46184.html</guid>
  <pubDate>Tue, 23 Jun 2009 08:02:04 GMT</pubDate>
  <title>Не было печали...</title>
  <link>http://0x7be.livejournal.com/46184.html</link>
  <description>Наверное это рано или поздно должно было случиться - наш питомец сильно заболел. Возили недавно его к одному ветеринару - он ничего не нашёл, потом к другому. Оказалось, что у Марсика очень сильно раздут желудок и не работает кишечник :( Он не пьёт и не ест уже несколько дней. Приходится колоть ему физраствор с глюкозой, что бы хоть как-то поддержать его силы. Сегодня в первый раз в жизни ставил уколы живому существу. Если к завтра ситуация не улучшится, то выход один - операция. Но прогнозы мрачные, доктор не обещал ничего конкретного. &amp;nbsp;Ломаю голову, что же с ним призошло?</description>
  <comments>http://0x7be.livejournal.com/46184.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/45864.html</guid>
  <pubDate>Mon, 25 May 2009 20:05:17 GMT</pubDate>
  <title>&quot;Обитаемый остров&quot; Бондарчука или о том, когда вымышленные миры выглядят как настоящие (или нет).</title>
  <link>http://0x7be.livejournal.com/45864.html</link>
  <description>Посмотрел сегодня экранизацию &amp;quot;Обитаемого острова&amp;quot;. Фильм, скажем прямо, не оправдал лучших ожиданий. Впрочем, худших ожиданий он тоже не оправдал, что уже неплохо :) О том, что Бондарчук извратил книгу во многих местах (чего только стоит финальная драка со Странником!), да и вообще снял сомнительное кино, было сказано уже очень много, я хочу сказать о другом.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Фильм &amp;quot;Обитаемый остров&amp;quot;, несомненно, продолжил тенденцию &amp;quot;переплюнуть Голливуд&amp;quot; по части спецэффектов и сделал это весьма достойно. Взрывы, стрельба и прочая драчка выглядела весьма убедительно, костюмы были красивы,&amp;nbsp;компьютерная графика тоже на высоте. При всём при этом графически мир Саракша выглядел очень слабо, как-то картонно. Т.е. получилось, что по отдельности все элементы визуального ряда (декорации, костюмы, техника, интерьеры) выглядели вполне достойно, а весь фильм в целом - сплошная бутафория. Например, первые эпизоды&amp;nbsp; &amp;quot;Звёздных войн&amp;quot; выглядят намного убедительнее, хотя с чисто технической точки зрения до &amp;quot;ОО&amp;quot; им далеко - времена уже другие, Лукасу и не снилось нынешних технологий. Тем не менее...&amp;nbsp; Или же &amp;quot;Терминатор&amp;quot; - сама идея пришла Кэмерону в горячечном бреду с температурой за 40, но ему удалось создать весьма интересный, захватывающий воображение образ мрачного будущего, порабощённого машинами. Даже классика советского кино - Кин-Дза-Дза - к которой само понятие &amp;quot;спецэффект&amp;quot;&amp;nbsp;применимо с натяжкой, дает более &amp;quot;достоверную&amp;quot; картину. &lt;br /&gt;&lt;br /&gt;Все эти фильмы объединяет то, что графический стиль тамошних миров выглядит ЦЕЛОСТНО. В нём угадываются какие то закономерности, какие-то правила. Что-то, что заставляет верить, что всё должно выглядеть именно так, а не иначе. Что всё так не случайно,&amp;nbsp;а в силу жизненной необходимости, а, значит, достоверно. На их фоне &amp;quot;ОО&amp;quot; выглядит как дешёвая лавка сувениров - всё блестит, всё по отдельности красивое, но всё вместе - пёстрая куча бирюлек,&amp;nbsp;которая и запоминается как что-то сумбурное. Он не захватывает воображение,&amp;nbsp;в этот мир не хочется вернуться в своих мыслях,&amp;nbsp;попытаться его &amp;quot;додумать&amp;quot; за рамкой фильма,&amp;nbsp;как это бывает с действительно хорошими картинами. Этот мир настолько нереален,&amp;nbsp;что вылетает из головы сразу после начала титров. Создаётся впечатление, что господин Бондарчук не пытался представить себе тот мир,&amp;nbsp;который он нам нарисовал. Он не пытался в нём &amp;quot;жить&amp;quot;, он не был одержим им,&amp;nbsp;как был одержим Лукас своей космической сагой. Он сделал товар, подходящий под формальные требования - что бы было нужное количество спецэффектов, драк, стрельбы... Смешать, но не взбалтывать.&lt;br /&gt;&lt;br /&gt;Обидно то, что он взялся за экранизацию Стругацких,&amp;nbsp;явно не будучи ещё к этому готовым. Ему бы потренироваться &amp;quot;на кошках&amp;quot; ещё какое-то время,&amp;nbsp;а потом браться за экранизацию классики. А теперь что уж... не переснимать же&amp;nbsp;&amp;quot;Остров&amp;quot; заново.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;</description>
  <comments>http://0x7be.livejournal.com/45864.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/45728.html</guid>
  <pubDate>Tue, 19 May 2009 20:13:11 GMT</pubDate>
  <title>Встреча с прошлым :)</title>
  <link>http://0x7be.livejournal.com/45728.html</link>
  <description>Сейчас откопал какие-то свои исходники аж семилетней давности, каким-то чудом пережившие много переездов, потерянные винты и сломанные компютеры :) Это еще мои &amp;quot;самопальные&amp;quot; программульки, которые я писал до того, как начал программировать &amp;quot;на работу&amp;quot;. Собственно, там даже есть та программа, которая была тестовым заданием, после которого меня взяли на работу (товарищ Александр Евгеньевич&amp;nbsp;С., для тех кто в курсе :)&amp;nbsp;). Такой наивный код, такие безграмотные комментарии, &lt;br /&gt;&lt;br /&gt;Но самое ужасное состоит в том, что на фоне того кода,&amp;nbsp;с которым мне сейчас приходится иногда сталкиваться на работе (я уж МОЛЧУ&amp;nbsp;про предыдущую работу) эти мои наивные поделки НЕПЛОХО смотрятся :)</description>
  <comments>http://0x7be.livejournal.com/45728.html</comments>
  <lj:music>Hannes Wader - Schon ist die Jugend</lj:music>
  <media:title type="plain">Hannes Wader - Schon ist die Jugend</media:title>
  <lj:mood>nostalgic</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/45416.html</guid>
  <pubDate>Sun, 17 May 2009 20:22:07 GMT</pubDate>
  <title>Халява и говнодел как ментальность российского труда</title>
  <link>http://0x7be.livejournal.com/45416.html</link>
  <description>Помню,&amp;nbsp;когда я работал на своей первой работе, у меня был весьма интересный случай. Это было одно гос.предприятие, производившее некоторую информационную систему для некоторых государственных заказчиков. Я тогда был ещё студент, восторженно глядящий снизу вверх на старших коллег и впитывающий как губка их мудрость и опыт. С самого начала я испытывал чувство гордости от того, что теперь делаю НАСТОЯЩЕЕ&amp;nbsp;дело,&amp;nbsp;а не просто программирую &amp;quot;для себя&amp;quot; в плане хобби. Однако по мере получения опыта и общения с нашими заказчиками я стал понимать, что то, что мы производили - это говно, которое впаривается заказчику нерыночными способами (госзаказ!) и которое не вызывает у пользователей такого чувства восторга, которое испытывал я поначалу.&amp;nbsp; Говно со всех сторон. Задумка - говно, исполнение - гавно (код одной из программ до сих пор занимает первое место в моем персональном рейтинге говнокода. А повидал я с тех пор немало!), потребительские качества - тоже говно (глючит, падает... мрак).&lt;br /&gt;&lt;br /&gt;Осознание этого факта повергло меня в уныние. Своими сомнениями я поделился со своим непосредственным начальником. Его реакция меня удивила. Я, признаться, думал, что он пожурит меня за нелояльность и &amp;quot;невосторженный образ мысли&amp;quot;, а он сказал всего лишь:&amp;nbsp;&amp;quot;Да забей. Деньги платят - и ладно&amp;quot;. Вот так вот. Люди делают говно, они это понимают,&amp;nbsp;но их это не колышет. Деньги платят - и ладно. С тех пор каждый раз, когда я общался с заказчиками, я испытывал смутное чувство стыда за то, что мы вываливаем на них свое говно, да еще деньги за это получаем.&amp;nbsp; Я уволился из той компании спустя пару лет по нескольким причинам, но одна из этих причин состояла в том, что я не хотел больше делать говно.&lt;br /&gt;&lt;br /&gt;С тех пор я общался со многими людьми и не переставал удивляться тому факту, что многие из них откровенно презрительно отзывались о том, чем они занимались. Они заведомо держали своих клиентов за лохов, которым они впаривали неликвид и даже гордились тем, что они делают говно и умудряются сбывать его за деньги. Или же с гордостью рассказывали о том, как они обдуривают своего работодателя, получая деньги за некачественную или просто не сделанную работу.&amp;nbsp; Я читал о целых компаниях, основной вектор усилий был направлен на то, что бы обмануть партнеров или клиентов, а не сделать качественно свою работу. У нас вообще люди массово не верят в то, что они делают.&lt;br /&gt;&lt;br /&gt;У Пола Грэхэма в книге &amp;quot;Hackers and Painters&amp;quot; есть хорошая глава о богатстве и деньгах,&amp;nbsp;в которой он поясняет,&amp;nbsp;что это не одно и то же. Богатство - это&amp;nbsp; материальные вещи, которыми мы пользуемся,&amp;nbsp;а деньги - это некоторая абстракция, которая лишь делает удобным обмен одного богатства и другое. Богатство относится к реальному сектору, деньги - к финансовому. Залог успеха - делать то богатство, которое нужно другим людям, что бы они с удовольствием меняли его на свои деньги. (Тут,&amp;nbsp;кстати, можно сильно отвлечься в обсуждение кризиса, вызванного излишним раздуванием фин.сектора, но это отдельная тема). У нас же, к сожалению, залогом успеха считается именно умение эти деньги из клиента изъять, пусть даже обманув его,&amp;nbsp;и произведя на свет гавно вместо богатства.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Когда говноделов один&amp;nbsp; на сто честных работников или бизнесменов - это ничего. Говнодел хапнет своих денег, потом потеряет позицию на рынке и освободит место под слонцем. В особо запущенном случае его посадят, если не с теми свяжется - шлёпнут. Но в целом экономика пострадает несильно. Значительно хуже, когда подобная стратегия ведения бизнеса является широко распространенной. В таком случае в стране реального богатства почти никто не производит - все хотят только впаривать и получать деньги,&amp;nbsp;развивая не возможности по улучшения качества товара или услуг (технологии, организацию), а по по впариванию (пиар, связи).&lt;br /&gt;&lt;br /&gt; Страна получает &amp;quot;неконкурентноспособную экономику&amp;quot;, народ презрительно морщит носики на отечественные товары (хотя сам делает такие же дерьмовые товары и не краснеет), требует повышения пошлин на товары иностранных конкурентов (что бы впаривать) и снижения пошлин на все остальное (ну не хочется же гавном пользоваться! дайте качественный импорт, сволочи),&amp;nbsp;рассуждает о том, что бизнесу ставится много бюрократических препонов (а что еще, если вдуматься, с этой сворой обманщиков делать?), злится на свои зарплаты... Конечно,&amp;nbsp;если сам не понимаешь ценности своего труда, то сложно понять его реальную стоимость. И, наверное, очень не хочется признавать, что твоя работа и тех денег не стоит. Хотя в глубине души сам прекрасно понимаешь, что...&lt;br /&gt;&lt;br /&gt;Я не знаю,&amp;nbsp;как это лечить. Может быть надо, что бы сменилось два-три поколения. Может быть надо, что бы нефть кончилась или упала в цене. Или гипноизлучатели на орбите подвесить какие-нибудь. Но пока халява не перестанет быть одной из важнейших ценностей российского менталитета,&amp;nbsp;а русский бизнес быть нае-бизнесом,&amp;nbsp;жить лучше мы не станем.&lt;br /&gt;&lt;br /&gt;Такие дела.</description>
  <comments>http://0x7be.livejournal.com/45416.html</comments>
  <category>о жизни</category>
  <lj:security>public</lj:security>
  <lj:reply-count>24</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/45236.html</guid>
  <pubDate>Mon, 02 Mar 2009 09:43:11 GMT</pubDate>
  <title>Yield Prolog</title>
  <link>http://0x7be.livejournal.com/45236.html</link>
  <description>Покопавшись на просторах &amp;quot;Lamdba the Ultimate&amp;quot;&amp;nbsp;обнаружил совершенно замечательную и остроумную реализацию языка Prolog,&amp;nbsp;как встраиваемого языка. Называется Yield&amp;nbsp;Prolog в честь конктрукции &amp;quot;yield&amp;quot;, т.е. итераторов на продолжениях, которые поддерживаются в C#.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Страничка проекта: &lt;a href=&quot;http://yieldprolog.sourceforge.net/&quot;&gt;yieldprolog.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://0x7be.livejournal.com/45236.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>9</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/44974.html</guid>
  <pubDate>Thu, 12 Feb 2009 08:23:27 GMT</pubDate>
  <title>Звериный оскал Google</title>
  <link>http://0x7be.livejournal.com/44974.html</link>
  <description>Когда-то старик Лем в плане шутки и юмора писал про будущее, в котором накоплено будет столько много знаний,&amp;nbsp;что поиск в них будет отдельной и трудной задачей.&amp;nbsp; По аналоги с научными экспедициями будут научные инспедиции за знаниями в библиотеки и хранилища :) Шута шуткой, а мужик знал, что говорил :) &lt;br /&gt;&lt;br /&gt;Собственно, предметный случай - стал замечать, что информация в гугле находится, как правило, уже ПОСЛЕ того,&amp;nbsp;как ты решишь задачу, поскольку только после её решения находятся правильные формулировки запросов :) Получается, что уже сейчас иногда проще &amp;quot;переоткрыть открытие&amp;quot;, чем найти его среди гор доступной информации.</description>
  <comments>http://0x7be.livejournal.com/44974.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>17</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/44672.html</guid>
  <pubDate>Wed, 11 Feb 2009 15:42:36 GMT</pubDate>
  <title>Программа как сообщение или о высоте языка программирования</title>
  <link>http://0x7be.livejournal.com/44672.html</link>
  <description>Некоторые не очень связные и оформленные мысли посетили недавно мою голову во время размышлений, чего бы такого приладить к Prolog&apos;у, что бы всем хорошо стало :) Мысли эти касаются языков программирования и программирования вообще. &lt;br /&gt;&lt;br /&gt;Во-первых, что такое программирование и чем оно отличается, скажем, от инструктирования человека?&amp;nbsp;Очень близкий к этому вопрос - чем естественные языки отличаются от языков программирования?&lt;br /&gt;&lt;br /&gt;Во-вторых, в чём суть &amp;quot;высокоуровневости&amp;quot; языка программирования&amp;nbsp; и что именно мы имеем в виду когда говорим &amp;quot;язык X более высокоуровневый, чем язык Y&amp;quot;?&lt;br /&gt;&lt;br /&gt;По первому вопросу:&amp;nbsp;Программа - это целостная формальная система, отличительными особенностями которой являются полнота, однозначность и непротиворечивость. Программу можно интерпретировать только одним способом, причём этот способ явно описан в стандарте языка, на котором написана программа. В отличие от этого, инструкция на естественном языке имеет некоторую степень неоднозначности, которая, кстати, может варьироваться. Например, существуют детальные пошаговые инструкции для выполнения операций. Как пример очень нечёткой инструкции можно привести пример, когда жена мне говорит: &amp;quot;дорогой, сделай мне что-нибудь вкусненькое&amp;quot;. В данном примере вы видим неоднозначность - что сделать?, как именно?, сколько? и т.п. &lt;br /&gt;&lt;br /&gt;В отличие от человека, который имеет свой жизненный опыт и субъективное мнение, компьютер не имеет ни того, ни другого. По-этому он неспособен разрешать неоднозначности (восполнять на основе опыта неполноту информации и устранять противоречия, выбирая субъективно наиболее хороший вариант). Работа программиста заключается как раз в выполнение этих функций - из неполной, неоднозначной, противоречивой постановки задачи родить полную, непротиворечивую, однозначную программу, которую тупой компьютер способен воспринять и исполнить. Именно на этом сели в лужу те, кто считал, что SQL будет поняет &amp;quot;простым людям&amp;quot; только потому, что в нём слова английские. Не синтаксис главная проблема, а именно необходимость производить целостные формальные системы.&lt;br /&gt;&lt;br /&gt;Кстати, характерной особенностью ИИ должно быть именно умение устранять неоднозначность, полагаясь на субъективное мнение. Так что если какая-то программа научится это делать, можно будет сказать, что большой шаг к ИИ сделан.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Во второму вопросу: родилась тут у меня в голове некоторая моделька, трактующая программу как сообщение, которое программист посылает компьютеру. Основная (и весьма спорная!) идея этого умопостроения заключается в том, что информация (в широком смысле), сообщаемая компьютеру для решения некоторой конкретной задачи, инвариантна относительно языка программирования. Т.е. программируешь ты на Lisp&apos;е или на ассемблере, ты сообщаешь компьютеру некоторый объём информации, которые он способен, пользуясь компилятором/интерпретатором, свести к встроенным в него операциям.&lt;br /&gt;&lt;br /&gt;Как я помню из курса университетского дискретки, количество информации, передаваемой в сообщений,&amp;nbsp;зависит от тезауруса принимающей стороны. Тезаурусом в данном случае является язык программирования, т.е. в зависимости от выбранного языка само сообщение сильно меняется. Оно будет короче или длинее и будет сформулировано в разных понятиях, но при этом инофрмация, несомая им, остаётся неизменной для одной и той же задачи. &lt;br /&gt;&lt;br /&gt;&amp;quot;Высота&amp;quot; языка программирования может быть измерена в длинне сообщения. Чем короче получается программа, тем выше уровень языка программирования. Природа тех свойств языка, которые &amp;quot;повышают&amp;quot; его уровень, позволяя короче формулировать программу - тема очень интересная и отдельная. Например очевидно, что добавление в язык предметно-специфичных свойств упрощает программы (пример - SQL), но есть свойства языков, которые нельзя назвать domain-specifiс, но при этом они определённо повышают уровнь. Можно ли считать, что логическое программирование &amp;quot;более высокое&amp;quot;, чем функциональное?&amp;nbsp;Попутно возникает другой интересный вопрос - существует ли верхний предел для &amp;quot;высоты&amp;quot; языка программирования?&lt;br /&gt;&lt;br /&gt;Кстати, ещё одно знамечание - повышение уровня языка программирования не делает его &amp;quot;умнее&amp;quot; в смысле приближения к ИИ (или ЕИ - естественному интеллекту) или к естественному языку. Пролог или лисп ничуть не сильне в разрешении неоднозначностей, чем ассемблер и сила их равна 0 (прописью - нулю).</description>
  <comments>http://0x7be.livejournal.com/44672.html</comments>
  <category>Философия программирования</category>
  <lj:security>public</lj:security>
  <lj:reply-count>14</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/44097.html</guid>
  <pubDate>Thu, 29 Jan 2009 15:02:52 GMT</pubDate>
  <title>О жж-иистерии</title>
  <link>http://0x7be.livejournal.com/44097.html</link>
  <description>Недавно в жэжэшечке случилось очередное бурление страстей. Если кто не в курсе, по ссылке подробности:&amp;nbsp;&lt;a href=&quot;http://community.livejournal.com/doktor_killer/417385.html&quot;&gt;community.livejournal.com/doktor_killer/417385.html&lt;/a&gt;. В этой истории меня сильно заинтересовало даже не то, было ли всё так, как описано девочкой или на самом деле прав опровержитель. В этой истории меня заинтересовала реакция&amp;nbsp; жж-сообщества, которое тут же бросилось аквтино участвовать в обсуждении. Большинство обывателей разделилось на два лагеря, яростно спорящих друг с другом - защитников и обвинителей авторши исходной записи. Типичный представитель каждого из лагерей обладал двумя яркими свойствами:&lt;br /&gt;1. Абсолютная уверенность в своей правоте и готовность спорить.&lt;br /&gt;2. Отсутствие каких-либо сведений, способных подтвердить его точку зрения.&lt;br /&gt;&lt;br /&gt;Иными словами, основным фактором на основании которого незаинтересованные люди выбирали свою позицию было их мироощщущение, в которое укладывалась либо версия девушки, либо версия опровержителя. Именно защита этого своего мироощщущения являлась, как мне кажется,&amp;nbsp;побудительным мотивом всей это перепалки, ибо у одних изначальная версия вызывала когнитивный диссонанс, а у других его вызывало опровержение. Простейшим же путём разрешения от тяжкого бремени когнитивного диссонанса является критика источников &amp;quot;тревожной&amp;quot;&amp;nbsp;информации,&amp;nbsp;а не попытка эту информацию осмыслить и скорректировать своё мировоззрение. &lt;br /&gt;&lt;br /&gt;Другими словами весь этот флейм можно перефразировать просто:&amp;nbsp;&amp;quot;Не пишите такого, пожалуйста, вы разрушаете мои комфортные иллюзии!&amp;quot;&lt;br /&gt;</description>
  <comments>http://0x7be.livejournal.com/44097.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/43714.html</guid>
  <pubDate>Thu, 01 Jan 2009 22:53:04 GMT</pubDate>
  <title>О декларативном и императивном</title>
  <link>http://0x7be.livejournal.com/43714.html</link>
  <description>Данная запись посвящена размышлениям о том, как императивное и декларативное программирование соотносятся между собой и с реальной жизнью.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;В последнее время в IT-сообществе наблюдается стойкий рост интереса к декларативным языкам общего назначения. Декларативные языки специального назначения существуют уже давно и не у кого не вызывают удивления. Яркий пример такого языка - SQL. Так же уже давно существуют &amp;quot;нечистые&amp;quot; декларативные языки, которые позволяют писать императивные программы. Пример - Lisp и Prolog. Каждый из этих языков можно назвать пионером в своей области (ФП и ЛП, соответственно), но они не являются строгими языками. &amp;quot;Последователи&amp;quot; этих языков - &amp;quot;чистые&amp;quot; Haskell и Mercury являются строго декларативными языками и вокруг них наблюдаются дискуссии по вопросу их применимости в реальных задачах, которые решает IT-индустрия (которую часто противопоставляют &amp;quot;академической&amp;quot; разработке). Накал этих дискуссий иногда бывает велик :)&amp;nbsp;Я слышал от одного человека характеристику &amp;quot;хаскеллистов&amp;quot; как &amp;quot;странных людей&amp;quot;,&amp;nbsp;а один из этих &amp;quot;хаскеллистов&amp;quot; жаловался в камментах, то их троллят на форумах :) Меня лично декларативное программирование (особенно логическое) сильно привлекает своей красотой и выразительной силой,&amp;nbsp;но до сих пор я вижу серьёзный разрыв между теми задачами, которые я решаю на работе и теми задачами,&amp;nbsp;для которых был бы оптимален,&amp;nbsp;например,&amp;nbsp;Prolog. Нет ли серьезных оснований под аргументами тех людей, которые говорят, что в целом нам императивного подхода хватает,&amp;nbsp;а ФП, ЛП и прочий &amp;quot;матан&amp;quot; нужны лишь для &amp;quot;2% задач&amp;quot; ((с) Пол Грхэм), где можно обойтись DSL&amp;nbsp;и не вводить этот &amp;quot;матан&amp;quot; в мэйнстрим?&lt;br /&gt;&lt;br /&gt;В чём суть этого разрыва между светлым декларативным будущим, неизбежным,&amp;nbsp;как крах капитализма, и суровым императивным настоящим? Суть этого разрыва составляет то, что сама наша реальность носит пространственно-временной характер и любая работа в ней заключается в изменении состояния в течение какого-то времени. Именно от этих вещей - состояния и времени - декларативное программирование пытается абстрагироваться. Цель этого абстрагирования весьма благородна - декларативные программы в явном для компилятора/интерператора виде указывают на все взаимозависимости разных частей программы, что сильно &amp;quot;развязывает руки&amp;quot; среде выполнения в плане определения порядка выполнения. Другим полезным эффектом декларативности является то, что программист перестает думать о последовательности выполнения действий в программе. Ленивые вычисления, бэктрэкинг, возможность изменять порядок выполнения тех или иных частей программы - всё это абстрагирует программиста от того,&amp;nbsp;в каком порядке и как будет исполняться работа. &lt;br /&gt;&lt;br /&gt;Однако не стоит забывать, что реальность наша все же носит скорее императивный характер. Любая работа внутри компьютера так же имеет характер изменяющегося во времени состояния и с этим ничего не поделать.&amp;nbsp; Можно скокьно угодно абстрагироваться от состояния, но в конечном итоге надо получить результат работы на экран, в файл или в виде сообщения - т.е. получить на выходе некоторое состояние. Любая попытка абстрагировать эти вещи будет работать лишь в какой-то определённой области действия (не забываем о законе дырявых абстракций). Например, сейчас хорошо научились абстрагироваться от &amp;quot;состояния-времени&amp;quot; в чисто байтодробительных задачах, не требующих ввода-вывода. Однако при совершении ввода-вывода состояние снова бъет нам в глаз - как ни крути, а файл надо сначала открыть, потом совершить операции, потом закрыть. И никак иначе. Собственно, любое общение с внешним миром насквозь пронизано понятиями состояния и времени,&amp;nbsp;с которыми надо работать очень аккуратно.&lt;br /&gt;&lt;br /&gt;Получается, что не всякое абстрагирование от времени и состояния одинаковов полезно. Когда мы говорим о пользе абстрагирования от состояния, мы имеем ввиду не любое состояние,&amp;nbsp;а лишь то, которое нас не интересует и от спецификации которого мы хотели бы уйти, переложив этот труд на могучие плечи среды исполнения. При этом надо иметь ввиду, что есть такие состояния, которые нас очень даже интересуют и над которыми мы хотим иметь полный контроль. В частности это те состояния, которые связаны с вводом-выводом и соответствующими протоколами. Попытка слишком радикально всё заабстрагировать может привести к тому, что программист будет вынужден бороться с теми свойствами языка, которые по замыслу создателей должны защитить его от ненужных деталей процесса выполнения. Например, в языке Prolog использование бэктрэкинга в совокупности с предикатами, имеющими побочный эффект, может быть весьма разрушительно. Это приводит к необходимости тщательно подавлять возможные нежелательные откаты при помощи cut&apos;ов.&lt;br /&gt;&lt;br /&gt;Естественно, что создатели &amp;quot;чистых&amp;quot; языков общего назначения тоже были вынуждены обеспечивать возможности работы с временем и состоянием. Например, в Haskell для этого применяются монады, а в Mercury - линейные типы. Это примеры того, как теоретические фреймворки декларативного описания работы с временем-состоянием используются для того, что бы дать возможность программисту выполнять действия с состояниями, не нарушив при этом чистоту языка и максимально сократив возможности &amp;quot;прострелить себе ногу&amp;quot;. В качестве контраста можно привести Lisp и Prolog, где разделение на &amp;quot;чистые&amp;quot; и &amp;quot;грязные&amp;quot; части программы (функции/предикаты) поддерживалось исключительно в голове программиста и он сам нес всю ответственность за то, что бы императивность не &amp;quot;прокралась&amp;quot; туда, где ей не место. Цена этой защиты - сложность в понимании тех теоретический моделей, которые лежат в основе языков, и снижение &amp;quot;хакабельности&amp;quot;&amp;nbsp;языка&amp;nbsp;(ценность последнего свойства, вообще говоря, сомнительна, но её проповедник - Пол Грэхэм). Иными словами, что бы делать некоторые вещи, которые на традиционных императивных языках делаются просто и естественно, на чистых декларативных языках делается сложно и с трудом.&lt;br /&gt;&lt;br /&gt;В чем зключается эта сложность и чем декларативная работа с временем-состоянием отличается от императивного программирования? Составляя императивную программу мы явно указываем какие действия и в каком порядке совершить, неявно подразумевая граф зависимостей между действиями и состояниями:&amp;nbsp;каждый шаг в программе зависит от некоторых состояний, которые должны быть обеспечены предыдущими шагами либо исходными условиями, и обеспечивает какие-то другие состояния, которые могут быть либо результатом работы программы, либо пререквизитом для следующих шагов. В декларативной программе все с точностью до наоборот - мы должны явно указать зависимости между операциями, а среда выполнения сама должна разобраться, в каком порядке выполнить действия. Когда мы имеем дело с &amp;quot;чистыми&amp;quot; операциями, мы имеем лишь зависимости по входам/выходам функций (это в ФП, в ЛП ситуация несколько сложнее, ибо там программы имеют свойство обратимости) и спецификация зависимостей достаточно проста. Если мы пишем f(g()), то ясно, что вызов f() зависит от результата вычисления g(). Спецификация зависимостей по состоянию сложнее, особенно если принимать в расчет внешнее состояние (файловая система, ОС, и т.п.). Для этого, во-первых, требуется разработать (разработчику языка) и потом понять понять (программисту)&amp;nbsp;модель описания зависимостей. Во-вторых, описание зависимостей требует большего объема &amp;quot;писанины&amp;quot;&amp;nbsp;просто в силу того, что модель зависимостей содержит в себе больше информации о намерениях программиста, чем конкретная последовательность действий. В-третьих, всегда остается опасность, что разработанная модель описания окажется слишком ограниченной для потребностей некоторых задач, что приведет к необходимости &amp;quot;грязных хаков&amp;quot; со стороны программиста. К плюсам идеи декларативного описания зависимостей можно отнести то,&amp;nbsp;что она предоставляет программисту больше возможностей описать свои *намерения* и донести их до среды выполнения, которая сможет оптимизировать программу, распараллелив, например, те участки кода &amp;quot;с состояниями&amp;quot;, которые на самом деле друг от друга не зависят. &amp;nbsp;К слову, оптимизаторы императивных языков вынуждены пытаться выводить эту высокоуровневую информацию из императивной программы, в то время как их &amp;quot;декларативные собраться&amp;quot; живут на всем готовеньком.&lt;br /&gt;&lt;br /&gt;Итак, немного обобщу уже сказанное:&lt;br /&gt;1. Любая работа,&amp;nbsp;совершаемая в компьютере, имеет характер изменения состояния во времени.&lt;br /&gt;2. Есть состояния, которые нас не интересуют, а есть те, которые нас интересуют. От первых мы хотим абстрагироваться, над вторыми мы хотим иметь контроль.&lt;br /&gt;3. Целиком мы можем абстрагироваться от внутренних состояний программы, но не забывая о дырявости любых абстракций. От состояния,&amp;nbsp;связанного с взаимодействием с внешней средой абстрагироваться нельзя.&lt;br /&gt;4. Управлять состоянием, связанным с внешней средой можно императивно и декларативно. Оба варианта имеют свои плюсы и минусы, соотношение которых - вопрос открытый для обсуждения. Как минимум разные плюсы и минусы перевешивают друг друга в разной степени в разных задачах.&lt;br /&gt;&amp;nbsp;</description>
  <comments>http://0x7be.livejournal.com/43714.html</comments>
  <category>Философия программирования</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/42997.html</guid>
  <pubDate>Wed, 26 Nov 2008 14:45:41 GMT</pubDate>
  <title>On Intelligence: How a New Understanding of the Brain will Lead to the Creation of Truly Intelligent</title>
  <link>http://0x7be.livejournal.com/42997.html</link>
  <description>Сейчас читаю сабжёвую книгу. Вышла она ещё в 2004-м году, но мне на глаза попалась только недавно. Если вы её не видели и интересуетесь природой интеллекта (искусственного или естественного), то крайне рекомендую. Автор - Джеф Хокинс (Jeff Hawkins). Кстати, основатель Palm Computers и лично папа модели Palm Pilot. &lt;br /&gt;&lt;br /&gt;Книга содержит изложение его теории, обясняющей то, как мы думаем. Лично мне она показалась весьма интересной, хоть и не безупречной. Его теория уже - не совсем теория. На её базе он разработал модель Hierarchical Temporal Memory&amp;nbsp; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Hierarchical_Temporal_Memory&quot;&gt;en.wikipedia.org/wiki/Hierarchical_Temporal_Memory&lt;/a&gt;), которая уже имеет своё софтверное воплощение. &lt;br /&gt;&lt;br /&gt;&lt;strike&gt;Из недостатков книги (и теории) могу выделить то, что он концентрируется исключительно на функциях одной части мозга - неокортексе, игнорируя другие области. Так же в его теорию не укладывается сущствование такого важного механизма обучения, как импринтинг. При этом импринтинг и проинорированные им части ЦНС (наприер, гиппокампус) определённо имеют отношение к тем высшим нервным функциям, которые он пытается моделировать.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;UPD: Вот что бывает, когда пишешь отзыв, не прочитав целиком книгу :) Зачёркнутому не верить!&amp;nbsp;:)&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://0x7be.livejournal.com/42997.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/42556.html</guid>
  <pubDate>Tue, 11 Nov 2008 21:07:51 GMT</pubDate>
  <title>Ограничения в языках программирования. Продолжение.</title>
  <link>http://0x7be.livejournal.com/42556.html</link>
  <description>Продолжение предыдущего поста:&amp;nbsp;&lt;a href=&quot;http://0x7be.livejournal.com/42318.html&quot;&gt;0x7be.livejournal.com/42318.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;В предыдущей статье я рассматривал одну из форм проявления тренда внедрения средств контроля за сложностью языка, а именно - создание монопарадигменных, идеологически чистых языков. Это ессе хочу посвятить другому напралвению в борьбе со сложностью - внедрению в языки ограничений. Эти ограничения отличаются по своей сути от невозможности пересылать командой &amp;quot;mov&amp;quot; данные из памяти в память и прочих подобных тем, что они проистекают не из технической невозможности сделать что-то, а из намеренного желания ограничить какие-то действия, которые реализуемы в рамках тех механизмов, которые предоставляет язык. Основная цель внедрения подобных ограничений - помощь программисту в написании корректных программ путём запрета возможных, но заведомо ошибочных действий. Сразу оговорюсь, что некоторые механизмы/свойства языков сложно однозначно классифицировать как такие ограничения. Например, статическая типизация является одновременно мощным средством контроля за сложностью программ и, одновременно с этим - средством повышения эффективности программ. &lt;br /&gt;&lt;br /&gt;Если проследить историю развития языков программрования, то можно увидеть тенденцию к внедрению таких ограничений. Например, при переходе от иперативного С к С++ (даже тому, что называют &amp;quot;better C&amp;quot;, т.е. процедурному подмножеству)&amp;nbsp;мы видим целую совокупность улучшений системы типов. При переходе от функционального LISP к более строгим языка типа ML или Haskell мы видим внедрение статической системы типов. При переходе от логического Prolog к Mercury мы так же видим внедрение системы типов и систему декларирования детерминизма предикатов (причём порежимно). Кстати, параллельно этой тенденции наблюдается и попытка &amp;quot;очистить&amp;quot; парадигмы языков. Например, при переходах LISP-&amp;gt;Haskell, Prolog-&amp;gt;Mercury прослеживается &amp;quot;потеря&amp;quot;&amp;nbsp;императивных возможностей, которые существовали в LISP/Prolog на правах &amp;quot;запасных&amp;quot;&amp;nbsp;возможностей для особых ситуаций. Другой пример из Java - checked exceptions. Основная суть - метод декларирует,&amp;nbsp;какие исключения из него могут вылететь и не позволяет бросать из себя ничего иного. Если же хочешь вызвать что-то, что бросает какие-то &amp;quot;левые&amp;quot; исключения - сам виноват. Будь добр обложить место вызова тонной try/catch`ев. &lt;br /&gt;&lt;br /&gt;Если попытаться обобщить эти идеи, то из можно свести к следующей, более общей:&amp;nbsp;программист должен явно специфицировать определённые аспекты контракта единицы организации программы (процедуры, функции, предиката) и становится ограничен этой спецификацией. Аспекты задаются самим языком, его теоретической моделью. Самый распространённый - типы параметров и возвращаемого значения (С/С++, Java, C#, Mercury, Haskell и прочие статически типизированные языки). Другие примеры - детерминизм предиката (Mercury), спецификация исключений (C++, Java), константность метода (С++), инварианты/пред-, постусловия (языки с поддержкой design by contract). Используя эту информацию компилятор может обнаружить, где программист пытается использовать примитивы и абстракции способом, нарушающим их контракты. Так же компилятор может опираться на эти ограничения для генерации более эффективного кода.&lt;br /&gt;&lt;br /&gt;У подобного подхода есть и недостатки. Во-первых, спецификации контракта требуется описывать, хотя они и не создают новый функционал программы. Т.е. снабжённая такая спецификациями программа становится более многословной при таких же возможностях. Системы вывода ограничений могут тут помочь. В частности, системы вывода типов (type inference: ML, C#, Nemerle) позволяют сильно сократить количество кода и сделать его синтаксически более гибким.&lt;br /&gt;&lt;br /&gt; Во-вторых, механизмы ограничений иногда бывают слишком ограничивающими. Очень яркий пример - checked exceptions в Java. В дискуссиях об оправданности этого механизма было сломано очень много копий и существует немало людей, считающих этот механизм ошибкой разработчиков языка. Другой пример - необходимость написания обобщённых функций,&amp;nbsp;которые должны обрабатывать совершенно не связанные друг с другом типы сходным образом. В языках со статической типизацией для этого приходится вводить специальные механизмы для обобщённог опрограммирования - шаблоны в C++ и generics в Java и C#. Ближе к идеалу,&amp;nbsp;наверное, шаблоны С++, поскольку они обеспечивают compile-time duck typing, чего дженерики всё же делать не могут. Но та гибкость, которую дают шаблоны и дженерики, имеет свою цену. Для шаблонов это - раздувание кода при инстанциировании и строгое ограничение возможностей шаблоном временем компиляции. Дженерики (я говорю о .NET-реализации) более экономичны и их можно использовать в run-time для динамического инстанциирования, но их возможности более ограничены, по сравнению с шаблонами. Языки с динамической типизацией (Lisp, Prolog, Pure)&amp;nbsp; не знают таких проблем вообще.&lt;br /&gt;&lt;br /&gt;В-третьих, подобные системы поддержки корректности программ не всегда полностью соответствуют требованиям конкретной задачи, решаемой в рамках проекта. В одном месте проекта они могут быть избыточны, в другом - недостаточны и в целом не точно отражать потребности программистов. В итоге снижается продуктивность разработчиков и проект в целом страдает. Это, кстати, привело к тому, что появился серьёзный интерес к динамическим языкам и попытки перенести заботу о корректности программы из области самого языка в область методологии (знаменитое &amp;quot;strong testing, not strong typing&amp;quot; Брюса Экеля). Я не хочу здесь и сейчас рассматривать методологические возможности для решения описываемой проблемы и хочу сконцентрирвоаться на технических, по-этому идею об отказе от любых ограничений в языке в пользу максимальной выразительности разрабатывать не буду.&lt;br /&gt;&lt;br /&gt;Итак, я хочу иметь язык, полностью устраивающий меня с точки зрения механизмов ограничений. Если проводить аналогию с программным обеспечением, то мы либо используем те программы, которые можем достать, либо пишем свои. Т.е. мы можем либо использовать имеющиеся языки и мириться с их недостатками, либо можем разработать и реализовать свой. Однако есть и третий вариант - программы часто бывают с открытой архитектурой, плагинами и прочим, что позволяет сильно их изменять по своему усмотрению. То же самое может быть и с языками. Типичный пример - Lisp с его возможностями метапрограммирования, позволяющие серьёзно расширить выразительность путём введения новых примитивов. Ту же самую логику можно примнить и к механизмам ограничений - их можно описывать самим.По сути эта идея есть расширение понятия метапрограммирования с традиционной генерации программы на верификацию:&amp;nbsp; мы имеем базовый язык, мы имеем метапрограммы, генерирующие программы и мы имеем метапрограммы, проверяющие программы. Если язык метапрограммирования совпадает с языком программирования (Lisp, Prolog), то метапрограммы могут проверять и сами себя.&lt;br /&gt;&lt;br /&gt;В итоге перед моим внутренним взором вырисовывается примерно следующая идея для языка: динамический язык, дающий программисту как можно больше свободы, поддерживающий метапрограммирование для генерации и верификации кода. В зависимости от потребностей проекта (или части проекта) программист волен самостоятельно определять правила, накладываемые на язык. Данная схема содержит свои подводны камни и непростые вопросы, на которые надо дать ответ. В частности:&lt;br /&gt;1. Должна ли система верификации оперироать только с базовыми примитивами или должна иметь возможность охватывать пользовательские примитивы?&lt;br /&gt;2. Не приведёт ли свобода определения системы верификации к появлению целого зоопарка несовместимых с собой систем верификации и, как следствие, модулей, написанных в рамках этих систем?&lt;br /&gt;3. Возможно ли дать программисту полную свободу в определении системы верификации и в то же время эффективно использовать те гарантии, которые она даёт, для автоматический оптимизации программы?&lt;br /&gt;&lt;br /&gt;Хотя с теоретической точки зрения такие возможности выглядят весьма заманчиво, практическая применимость остаётся под большим вопросом. В настоящий момент я размышляю над тем, как можно было бы реализовать подобную концепцию на базе языка Prolog.</description>
  <comments>http://0x7be.livejournal.com/42556.html</comments>
  <category>философия программирования</category>
  <category>jantar</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/42318.html</guid>
  <pubDate>Mon, 10 Nov 2008 20:54:15 GMT</pubDate>
  <title>Ограничения в языках программирования.</title>
  <link>http://0x7be.livejournal.com/42318.html</link>
  <description>&lt;span style=&quot;font-size: xx-small;&quot;&gt;Продолжение мыслительного процесса, начатого тут: &lt;/span&gt;&lt;a href=&quot;http://0x7be.livejournal.com/37690.html&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;0x7be.livejournal.com/37690.html&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt; и продолженного тут:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://0x7be.livejournal.com/38538.html&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;0x7be.livejournal.com/38538.html&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;Как я уже говорил раньше, любой язык программирования что-то программисту позволяет делать, а что-то не позволяет. То, что он позволяет - это выразительная сила языка,&amp;nbsp;а то, что он не позволяет - это ограничения, которые язык накладывает на программы. Например, язык С++ позволяет нам описывать классы и создавать объекты. При этом он запрещает присвоение объектов (или указателей на них) несвязанных между собой типов. Или, например, так же он запрещает осуществлять вызов метода объекта, если тип ссылки на объект метод с такой сигнатурой не описывает. Или другой пример - ассемблеры. Как правило, они тоже накладывают много своих ограничений.&amp;nbsp;Например, в обычном 8086-совместимом ассемблере команда mov, осуществляющая пересылку данных, не может пересылать их из памяти в память - будьте добры использовать регистр в качестве промежуточной остановки. С&amp;nbsp;другой стороны - верти байтиками и битиками как хочешь, только всё ручками пиши :)&lt;br /&gt;&lt;br /&gt;Ограничения, которые я тут привёл в качестве примера,&amp;nbsp;кое в чём неоднородны. Часть из них происходит из ограниченности возможностей языка, а часть - из желания помочь программисту в борьбе со сложностью программ путём их частичной формальной верификации. Например,&amp;nbsp;запрет на вызов метода, чья сигнатура не описана в типе ссылки на объект происходит из &amp;quot;неумения&amp;quot; С++ это делать. Механизмы вызова метода в С++ так устроены,&amp;nbsp;что они неспособны осуществить динамический вызов метода, даже если конкретный класс экземпляра такой метод поддерживает. С другой стороны - запрет присваивать указатели на объекты несовместимых классов является именно средством поддержки корректности программы, так как физически никто не мешает скопировать данные из одного указателя в другой (и,&amp;nbsp;кстати, С это умеет делать прекрасно). Таким же средством является принуждение к const-корректности. Примечательно, что в С++ все эти ограничения можно обойти через систему приведения типов или же специальные лазейки (например, mutable-члены классов). Это целиком укладывается в философию Страуструпа - дать программисту небезопасные возможности, но требовать их явного применения, что бы избежать ненамеренных опасных действий.&lt;br /&gt;&lt;br /&gt;Если проследить направление развития языков программирования, то можно увидеть несколько тенденций. Первая тенденция - повышение возможностей языка через повышения уровня его абстракций. Основная цель этого направления развития - устранить ограничения, накладываемые реализацией и повысить производительность программиста. Например,&amp;nbsp;все высокоуровневые императивные языки поддерживают операцию присваивания, т.е. копирования данных из памяти в память, чего не поддерживают некоторые процессоры (см. выше про ассемблер). Другая цель подобного развития - борьба со сложностью программ. Пряча тонкости реализации &amp;quot;под капот&amp;quot; высокоуровневых примитивов языки освобождали внимание программиста от ненужных деталей, таких как жонглирование регистрами, диспетчеризация вызовов, управление памятью и т.п. Это сокращает количество сущностей в поле зрения программиста, что, в свою очередь, освобождает его от &amp;quot;микроменеджмента&amp;quot; и устраняет множество потенциальных мест, где программист может совершить ошибку. Естественным ограничителем для этого являются вычислительные ресурсы компьютеров. Их ограниченность требует оптимизации механизмов языка, а это накладывает свои ограничения (например, механизм позднего связывания на таблицах вирутальных функций, который применяется для реализации полиморфизма в таких языках, как С++, Java, C#).&lt;br /&gt;&lt;br /&gt;Другой тренд стал проявляться несколько позже, когда размеры и сложность программ стали представлять собой проблему для разработчиков. Суть этого тренда заключается во введении в язык специальных средств для управления сложностью. Необходимость этого продиктована тем, что, несмотря на растущий уровень абстракций языков, количество сущностей из которых состоят программы постоянно увеличивается. Иными словами, даже в терминах высокоуровневых примитивов новых яызков программы становятся больше и сложнее. Рост уровней языков &amp;quot;не успевает&amp;quot; за повышением сложности задач, решаемых программами. В итоге даже с такими продвинутыми и высокоуровневыми вязыками, как LISP, программист сталкивается с тем, что его сил по контролю за взаимоотношением элементов программы просто не хватает. Программист забывает свои собственные правила и соглашения, пишет код, не совместимый с тем, что он писал ранее, вносит ошибки. Если растянуть эту ситуацию на работу целой команды, то становится ещё хуже - привносится элемент организационного хаоса, искажений при обмене информацией между коллегами и т.п. В итоге в языки стали внедрять средства, помогающие программисту в борьбе со сложностью программ.&lt;br /&gt;&lt;br /&gt;Одна из форм проявления этого тренда - это ограничиение выразительной мощи языка путём удаления из языка &amp;quot;вредных&amp;quot; или плохо поддающихся анализу и контролю возможностей и концентрация на какой-нибудь хорошо проработанной идеологии. Иными словами, имеет место попытка привести многобразие возможностей языков в некий порядок, путём наложения на них некоторой выбранной парадигмы, теоретической модели. Всё, что в неё не укладывается - выбрасывается, то, что остаётся - описывается и регулируется набором правил запретительного свойства. Весьма интересен пример подобного тренда на примере языка Java. Как известно, одним из &amp;quot;вдохновителей&amp;quot; Java был С++. Но этот язык, по мнению создателей, был слишком монструозным и &amp;quot;неизящным&amp;quot;. В итоге мы получили новый язык с весьма элегантной моделью, лозунгом которой был &amp;quot;Everything is object&amp;quot;. Это как раз пример укладывания языка в прокруствов ложе некоторой идеологии. Здесь это - традиционное ООП в стиле Smalltalk. Авторы языка гневно отвергали разные возможности, которые, по их мнению, не укладывались в эту красивую модель. Делегаты, например. Даже засудили Microsoft, когда те своей реализации Java их реализовали. (Злые языки говорят, что после этого Microsoft плюнуло на Java и выпустило свои заготовки под брендом .NET). И что мы видим сейчас? Мы видим сейчас как в этот &amp;quot;чистый&amp;quot;&amp;nbsp;язык внедряются многие из этих &amp;quot;гневно отвергнутых&amp;quot;&amp;nbsp;фитч. Перечисления, например. Или функции с переменным количеством аргументов. Или дженерики. Так скоро и&amp;nbsp; ненавистные делегаты включат. (Microsoft со своим C#, кстати, идёт гораздо дальше и развивает язык гораздо быстрее.) &lt;br /&gt;&lt;br /&gt;В качестве другого примера хочу рассмотреть &amp;quot;конкуренцию&amp;quot;&amp;nbsp;языков Pascal, Modula, Oberon и С/С++. Профессор Никлаус Вирт создавал свои языки исходя из очень твёрдых теоретических позиций, его языки просты и элегантны. Он гордится тем, что спецификации его языков очень лаконичны. Особенно если сравнивать со Стандартом C++. Однако его языки не получили очень большого распространения. В мэйнстрим вошёл только Pascal, да и то с кучей нововведений, которые он не благословлял (да,&amp;nbsp;к фирме Борланд и их фантазиям на тему его языка он не имел никакого отношения). Зато страшный и ужасный С и, потом, С++ стали в своё время хитами и даже сейчас активно используются. Ужасный С++ создавался Страуструпом с совершенно иными философскими установками - он не хотел ради идеологической чистоты жертвовать практической применимостью. Отсюда и &amp;quot;тяжкое наследие С&amp;quot; и общая мультипарадигменность языка. Я бы даже сказал некоторая эклектичность.&lt;br /&gt;&lt;br /&gt;Третий пример - языки Scheme и Common Lisp. Scheme - очень красивый и интересный язык (диалект LISP) интересный многими интересными свойствами (чего только стоят первоклассые продолжения!) и отсутствием &amp;quot;тяжкого наследия&amp;quot; некоторых фитч &amp;quot;оригинального&amp;quot;&amp;nbsp;LISP. Увы, язык академический. Common Lisp, хоть и не сильно заметен на фоне мэйнстрима, всё же используется. Язык монструозен. Вековые наслоения фитч и атавизмы первых инкарнаций Lisp в нём сохранились до сих пор. Его спецификация, кстати, по объёму может конкурировать со Стандартом. &lt;br /&gt;&lt;br /&gt;Эти примеры приводят к следющему заключению - попытки сделать язык на основе очень простой, элегантной, целостной и строгой модели организации программ оказываються неудачными. Основной метод создани таких языков - концентрация на какой-то хорошо проработанной парадигме (часто в её частном случае) и объявление всего остального ересью или &amp;quot;вредными возможностями&amp;quot;, которые будут &amp;quot;провоцировать программистов на написание плохих программ&amp;quot;. В итоге язык выходит красивым с теоретической точки зрения, но он слишком выхолощен и неудобен для использоваиня в реальных задачах, которые решаются в индустрии. Такие языки либо не выходят из ранга академических или экспериментальных со своим маленьким коммьюнити (Scheme, Modula, Oberon), либо постепенно обрастают свойствами, придающими им полнофункциональность, но размывающие изначальную чистоту и аскетичность их дизайна (Java, Pascal -&amp;gt; Delphi). &lt;br /&gt;&lt;br /&gt;Собственно говоря, поиск &amp;quot;единственного верного&amp;quot; пути с отсечением всего остального - тупиковая ветвь в дизайне языков программирования. Человечество &amp;quot;открывает&amp;quot; разные полезные парадигмы и приёмы программирования, причём ни один из них не является универсальным ответом на все вопросы программирования (&amp;quot;серебрянной пулей&amp;quot;). Каждая из этих идей - это эффективный инструмент решения задач в некоторой области. Объявлять те или иные парадигмы &amp;quot;вредными&amp;quot; означает сужать поле своих возможностей. Любое средство имеет свою нишу и может быть применено там с пользой (да, даже еретический оператор goto!). И наоборот - самые разумные и добрые парадигмы могут быть использованы не по назначению и их неумелое применение может привести к хаосу в проекте. Из этого я делаю вывод, что будущее за полнофункциональными и многопарадигменными языками программирования.&lt;br /&gt;&lt;br /&gt;Продолжение следует.&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://0x7be.livejournal.com/42318.html</comments>
  <category>философия программирования</category>
  <category>jantar</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/42135.html</guid>
  <pubDate>Thu, 30 Oct 2008 19:04:58 GMT</pubDate>
  <title>Публицистика - она как еда...</title>
  <link>http://0x7be.livejournal.com/42135.html</link>
  <description>... в смысле, что приедается. Я не люблю всякие новости читать, телевизор смотреть и газеты переводить. Но как-то узнавать, что важного (ну, в смысле, могущего меня затронуть)&amp;nbsp;творится в мире надо. И я читаю всякие серьёзные (как мне кажется) сайты на которых выложена всякая Аналитика. Всякая Аналитика отличается от обычных новостей тем, что она не просто рассказывается нам, что где-то случился, простите, пиздец. Она ещё рассказывает, почему он произошёл, какова его предыстория и как он дальше будет развиваться (ну это понятно - от плохого к худшему). Как вариант, Серьёзная Аналитика рассказывает нам, что в ближайшем/среднесрочном/отдалённом (нужное подчеркнуть) и объясняет, почему именно, исходя из нынешних реалий.&lt;br /&gt;&lt;br /&gt;Серьёзная Аналитика имеет одну особенность - в зависимости от автора, фазы луны, количества осадков и солнечной активности для одних и тех же ситуаций прогнозировать совершенно разные ситуации. Ну оно и понятно - это же Серьёзая Аналитика, а не попса! Тут думать надо, панимаш! Однако несмотря на всю свою неоднозначность, она стала приедаться. Сейчас так много стало публикующихся &amp;quot;аналитиков&amp;quot;, что на всех перестало хватать оригинальных мыслей и идей. Как-то так само получается,&amp;nbsp;что теперь я с первого абзаца классифицирую статью и говорю себе:&amp;nbsp;&amp;quot;ага, это очередная экологическая страшилка, можно не читать&amp;quot;. Вместо экологической страшилки может быть и что-то другое:&lt;br /&gt;1. Ядерный армаггедон, как неизбежное следствие кризиса.&lt;br /&gt;2. Серьёзный западный анализ внутриполитической ситуации в Росии с медведями, балалайками и кровавой гэбнёй.&lt;br /&gt;3. Серьёзный русско-патриотический анализ ситуации в США с тупыми американцами, зарвавшимся империализмом, неизбежным коллапсом США.&lt;br /&gt;4. Рассуждения о том, что Европа таки уже должна объединиться.&lt;br /&gt;5. Фундаментальное обоснование того, что необходимо &amp;quot;сдерживать Россию&amp;quot;.&lt;br /&gt;&lt;br /&gt;Ну и так далее. Сюр какой-то. Такое впечатление, что взяли публикации из нескольких параллельных реальностей и смешали в кучу. Хотя, в каком-то смысле так оно и есть...&lt;br /&gt;Жить, мля, стало лучше! Жить стало веселее...&lt;br /&gt;&lt;br /&gt;P.S. Не, есть и серьёзная аналитика. Огромное спасибо тем людям, которые её пишут и публикуют. Просто количество идиотов, публикующих свои &amp;quot;серьёзные исследования&amp;quot; уже зашкаливает :)</description>
  <comments>http://0x7be.livejournal.com/42135.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/41847.html</guid>
  <pubDate>Mon, 22 Sep 2008 18:01:19 GMT</pubDate>
  <title>О зомбоящике и ещё немного размышлений.</title>
  <link>http://0x7be.livejournal.com/41847.html</link>
  <description>С апреля, как мы въехали в новую квартиру, я живу без телевизора. В принципе,&amp;nbsp;я никогда не был поклонником этого устройства (телевизора) и явления (телевидения) вообще. До этого я смотрел его мало, уделяя внимание лишь новостям, некоторым аналитическим передачам и фильмам. Как показала практика, даже такие небольшие дозы телеяда способны оказывать тлетворное влияние.&lt;br /&gt;&lt;br /&gt;Вы читали &amp;quot;Обитаемый остров&amp;quot;&amp;nbsp; братьев Стругацких? Именно тот&amp;nbsp;&amp;quot;остров&amp;quot;, который сейчас отчаянно перевирает в своём киноопусе Бондарчук-младший. Помните, там были башни &amp;quot;ПБЗ&amp;quot;, которые были нифига не ПБЗ, а излучатели специального излучения, зомбирующего население? Так вот, сейчас такие ящики &amp;quot;ПБЗ&amp;quot;&amp;nbsp;торчат почти в каждой квартире и успешно зомбируют людей. Зомбоящики, одним словом.&lt;br /&gt;&lt;br /&gt;Что я могу сказать о своих ощущениях после отказа от телевидения? Ощущение свежести и чистоты в голове. Правда-правда. Реклама, новости, всякие дурные передачи, которые я даже и не смотрел почти - всё это наваливало мне в голову тонны ненужной, избыточной информации. Наводнения, пожары, маньяки и т.п. Какого чёрта мне надо знать о том, что происходит с теми людьи, которых я никогда не узнаю, в тех местах, где я никогда не буду? Человек слаб. Его внимание, способность охватить вещи своим сознанием и осмыслить их ограничены. Зачем тратить их на такие ненужные вещи? Лучше я потрачу их на своих близких, на себя,&amp;nbsp;в конце концов.&amp;nbsp; Подумаю о жизни, о своём месте в ней. Попытаюсь понять истинную цену всем тем громким словам и красивым картинкам, которыми меня потчуют с экрана.&lt;br /&gt;&lt;br /&gt;Однако именно это и пытается предотвратить существующая система масс-медиа. Она делает всё, что бы распылить наше внимание, впарить нам как можно больше информации, заставить нас эту информацию некритически воспринять, записать на подкорку как магнитофон и воспроизвести когда надо в виде нужных дейсвий. Политические установки, реклама, пропаганда. Всё это обёрнуто в красивую обёртку и в удобоваримом виде подаётся нам с экранов, из газет, с рекламных щитов... Раскрой рот, развесь уши и воспринимай. Отключи мозг, сделай как сказано и будет тебе щастье! Куча бабла, девушек, слава...&amp;nbsp; Техники воздействия давно разработаны, приём очень неглупыми людьми. Эти техники корнями уходят в НЛП и призваны обойти барьеры сознания человека, отключить его трезвую оценку поступающей информациию. Самое страшное для этой системы, это когда человек говорт:&amp;nbsp; &amp;quot;эй, стоп! давайте разберёмся&amp;quot;. Этот человек неугоден системе, лучше бы его не было.&lt;br /&gt;&lt;br /&gt;Является ли это всё мировым заговором против человечества?&amp;nbsp;Нет, не является. Я вообще не сторонник таких теорий. &amp;quot;Не ищите злого умысла там, где можно всё объснить глупостью&amp;quot;. Просто сейчас именно так живёт наше государство, для которого нет людей - есть электорат. Так живёт бизнес,&amp;nbsp;дя которого нет людей - есть целевые аудитории и рынки сбыта. Это их modus vivendi. Не стоит бороться с этой системой,&amp;nbsp;она слишком велика и всеобъемлюща. Надо лишь сказать:&amp;nbsp;&amp;quot;эй, стоп!&amp;quot;, выйти из этого круговорота распыления внимания. Перестать заботиться о том, о чём тебе приказано заботиться властями и корпорациями. Надо подумать о себе, о своём месте в этой жизни. &lt;br /&gt;&lt;br /&gt;И тогда в голове появится чувство свежести и чистоты...</description>
  <comments>http://0x7be.livejournal.com/41847.html</comments>
  <category>о жизни</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/40920.html</guid>
  <pubDate>Wed, 30 Jul 2008 13:48:14 GMT</pubDate>
  <title>О самопозиционировании через отрицание (на примере чайлдфри)</title>
  <link>http://0x7be.livejournal.com/40920.html</link>
  <description>Есть такие люди - чайлдфри. Они сами про себя говорят, что они - люди не желающие иметь детей. После того, как я познакомился с ними поближе, я твёрдо убеждён, что это не точное определение. Люди, просто сделавшие свой выбор (не иметь детей) и живущие с ним и чайлдфри - это немного разные группы людей.&amp;nbsp; Главное их отличие заключается в том, что чайлдфри активно противопоставляют себя не-чайлдфри. Эта активность проявляется по-разному: в их слэнге, в необходимости общаться на тему своей позиции, а агрессивном отношении к людям, имеющим детей или не разделяющим их позицию. Отдельным пунктом хочу выделить постоянно возникающий мотив преследования со стороны общества, которое (по их версии) покушается на их свободу не иметь детей.&lt;br /&gt;&lt;br /&gt;Есть такие люди - агрессивные атеисты. Есть просто атеисты (или агностики), живущие со своем мировоззрением, а есть агрессивные атеисты. Их отличает так же активное противопоставление верующим, уничижительный (по отношению к верующим) слэнг, мотив преследования и церковного заговора.&lt;br /&gt;&lt;br /&gt;Есть линуксоиды. Это не те, кто просто любят и знают Линукс. Это экзальтированные люди, активно противопоставляющие себя корпорации Майкрософт, уничижительно высказывающиеся о ней и постоянно подозревающие её во всяких гадостях.&lt;br /&gt;&lt;br /&gt;Ну и так далее. Ладно, вернемся к чайлдфри. Я в последнее время стал регулярно захаживать в ru_childfree, что бы посмотреть на участников данного коммьюнити. Один раз я вступил в дискуссию и имел несколько интересных диалогов. В частности с одним весьма благоразумным и вежливым участником. И с одним невежливым.&lt;br /&gt;Ниже приводится самая интересная часть диалога с невежливым участником:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Она: &lt;span&gt;Ой, да бросте! Отпрыск отдан на попечение бабушки, а не в детдом, а бабушки квохчат над этими ссущимися кульками как квочки- похлеще матерей. Ничего с ним не сделается, отлично побудет и с бабкой, ему там и зад языком вылижут и все что хочешь. А то какие-то там прямо психологические потери, ерунда какая-то в самом деле. Прямо надо всё побросать и упиваться соплями бессмысленного вопящего огрызка, а то у него психотравма будет. Да не будет у него ничего, будет жиреть на бабкиных харчах и охеревать переизбытка любви.&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;&amp;gt; всё побросать и упиваться соплями бессмысленного вопящего огрызка&lt;br /&gt;Вы действительно полагаете, что уделение внимания ребёнку заключается в процитированном действии?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Она: &lt;span&gt;А как иначе обозначить действие по отношению к безмозглому, ничего не понимающему куску мяса, который способен только издавать звуки и испражняться под себя? Новорожденный- это точно такой же кусок плоти, как тушка курицы, которую покупают на суп, только верещащий и исрекающий вонючими ингредиентами.&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;&amp;gt;А как иначе обозначить действие по отношению к безмозглому, ничего не понимающему &lt;br /&gt;&amp;gt;куску мяса, который способен только издавать звуки и испражняться под себя?&lt;br /&gt;Почему куску мяса? Вы еще забыли кости, внутренние органы, нервную систему, наконец :) Вообще, Ваша изобретательность и креативность в употреблении эпитетов меня восхищает :) Скажите, а когда я ухаживаю за своей машиной, Вы, наверное, скажете, что я упиваюсь машинным маслом и антифризом, да? :)&lt;br /&gt;&lt;br /&gt;Она: &lt;/span&gt;&lt;span&gt;Скажите, а когда я ухаживаю за своей машиной, Вы, наверное, скажете, что я упиваюсь машинным маслом и антифризом, да?///////////////&lt;br /&gt;&lt;br /&gt;Ключевое слово у вас- &quot;наверное&quot;. Им вы оправдали выдачу собственных мыслей за мои. Мне нет дела, какие у вас интимные отношения с техникой и с каким упоением вы лобызаете сраки у младенцев. Главное, что бы вы эти особенности своей натуры не навязывали тем, у кого другие отношения с машинами и младенцами.&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;Да боже упаси, кто Вам что навязывает? :)&lt;br /&gt;Просто меня завораживает Ваша манера излагать свои мысли, с постоянно возникающей темой орального контакта с разными выделениями или выделительными органами :)&lt;br /&gt;&lt;br /&gt;Она: &lt;/span&gt;&lt;span&gt;Завораживает??? Ну, так бы сразу и сказали, что вы обычный извращенец.&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;Фи. Ну вот зачем Вы сейчас меня обидели? Я разве про Вас что-то нехорошее говорил?&lt;br /&gt;&lt;br /&gt;Она: &lt;/span&gt;&lt;span&gt;Фу! А зачем вы меня выше по ветке обидели? Я тут сижу вся из себя такая разобиженная, а вам хоть бы хны! С вашей стороны это жестоко и бесчеловечно! Это варварский способ унизить женщину! Вы меня ненавидите, а я вам ничего плохого не делала. Вы меня преследуете с целью унизить и оскорбить! Вы агрессор! Вы попрали права слабых и беззащитных! Выражаю вашей неуёмной жестокости всяческую ноту протеста и вотум недоверия.&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;А где я Вас обидел? Я тут ни одного слова вообще дурного не сказал И уж тем более не называл никого нехорошими словами. Если можно - приведите цитату моей фразы, Вас обидевшей.&lt;br /&gt;&lt;br /&gt;Она: &lt;/span&gt;&lt;span&gt;Вот! Видите? Вы уже начали выкручиваться и изворачиваться! Вы находите тысячу способов поиздеваться! Жестокосердный тиран!&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;Так я тиран или извращенец? Вы уже определитесь пожалуйста, а то как-то неловко плолучается. И вообще, Вы оскорбили меня второй раз! Как Вам не стыдно?!&lt;br /&gt;&lt;br /&gt;Она: &lt;/span&gt;&lt;span&gt;Хмм.. знаете, ваше необычное пристрастие к новорожденным младенцам вкупе - такая специфическая вещъ... Вы уверены, что сообщество ЧФ то самое место, где найдется удовлетворение этой вашей страсти? Может быть имело бы смысл поискать способы для выхода подобных потребностей в каких-то... ммм... специализированных сообществах? Ну.. Есть же, наверняка, группы объединяющие людей, мучающихся подобными патологиями.. &lt;br /&gt;Очень волнуюсь за вас.&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;Ах, я тронут Вашей заботой о моей скромной персоне! Право же, не стоит так волноваться. Спешу Вас успокоить - я ни одного младенца в жизни на руках не держал. Кроме того, я совершенно не могу понять, каким образом вы заключили, что я люблю детей. Это абсолютно неверное заключение. Я отношусь к ним сугубо нейтрально. Если Вы потрудитесь перечитать написанное мною в этом коммьюнити, то Вы, несомненно, придете к правильным выводам. Возможно Вы несколько поторопились приписать мне определённые взгляды только на том основании, что я не согласился с некоторыми мыслями, изложенными автором поста и Вами.&lt;br /&gt;&lt;br /&gt;Она: &lt;/span&gt;&lt;span&gt;Бла-бла-бла&lt;br /&gt;Поди поучи жену щи варить, учитель фигов. Много вас тут таких, указчиков ходит. А мне не указывай что и как мне делать. Указка не выросла.&lt;br /&gt;&lt;br /&gt;Я: &lt;/span&gt;&lt;span&gt;Во-первых, я тебе ничего не указывал, не указываю и указывать не собираюсь. Это тебе померещилось. &lt;br /&gt;Во-вторых, своим хамским поведением ты больше дискредитируешь коммьюнити чем рота специально обученных агентов мирового заговора против чайлдфри. Впрочем, это проблемы коммьюнити.&lt;br /&gt;В-третьих, и без поучений моя жена прекрасно варит щи :)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Она: Ах-ах! Какие мы нежные! Обидели суслика- в норку пукнули! Ну поплачь, поплачь.. Побольше поплачешь- поменьше поссышь!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;span&gt;Каюсь-каюсь, я немного троллил, но делал это очень корректно, не скрывая того, что многие вещи я говорю с юмором. Что имеем в итоге? Человек из самого факта, что я с ним о чем-то спорил вывел несколько странных фактов, не имевших места:&lt;br /&gt;1. Будто я сам очень люблю детей.&lt;br /&gt;2. Будто я хочу учить его жизни и указывать, что ему делать.&lt;br /&gt;3. Будто я настроен по отношению к нему агрессивно. &lt;br /&gt;В результате мой собеседник скатился до банального хамства. Т.е., фактически, он спроецировал на меня образ своего идеологического противника.&lt;br /&gt;&lt;br /&gt;Данный паттерн прослеживается во поведении многих людей из описанных в начале поста категорий. Их всех объединяет наличие некоторых шаблонных черт:&lt;br /&gt;1. Активное противопоставление себя своим идеологическим противникам, которые позиционируются как некоторое &quot;большинство&quot;. Сам противопоставляющий видит себя неким нонконформистом, осмелившимся бросить вызов традициям или общим ценностям.&lt;br /&gt;2. Приверженность крайним точкам зрения, неспособность к компромису или взвешенным суждениям.&lt;br /&gt;3. Крайняя агрессивность по отношению к тем, кто с ним не согласен. Проецирование на всех своих оппонентов целой гаммы отрицательных черт на основании только одного факта, что они с ним не согласны. &lt;br /&gt;4. Мания преследования со стороны некоего мирового заговора людей, исповедующих отрицаемую им точку зрения. Стремление везде искать и видеть факты &quot;давления&quot; или нарушения своих прав со стороны этих лиц.&lt;br /&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;&lt;/span&gt;&lt;/i&gt;5. Стремление группироваться с единомышленниками. Желание обсуждать с ними свои мысли и идеи.&lt;br /&gt;&lt;br /&gt;Лично я делаю вывод, что эти черты характера являются более фундаментальными, чем конкретная идея, в которой они находят свое выражение. Конкретная идея является лишь точкой приложения этих сил. В качестве гипотезы могу сказать, что это может быть попыткой самоутверждения - доказательства себе и окружающим своей значимости, своего права на самостоятельноть и независимость.</description>
  <comments>http://0x7be.livejournal.com/40920.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/40700.html</guid>
  <pubDate>Tue, 22 Jul 2008 13:52:36 GMT</pubDate>
  <title>Eisbrecher</title>
  <link>http://0x7be.livejournal.com/40700.html</link>
  <description>Гуляючи по просторам ютуба наткнулся на совершенно замечательную штуку - немецкую грппу названием Eisbrecher (ледокол, прямо по Резуну :) ). Играют весьма забойный индастриал с электроникой. Вообщем, тащусь как удав по стекловате, доволен как слон и т.п. :)&lt;br /&gt;День удался :)&lt;br /&gt;&lt;br /&gt;(HINT: Если вам по душе творчество ВИА Rammstein, то советую послушать).&lt;br /&gt;&lt;lj-embed id=&quot;4&quot; /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;div class=&quot;ljcut&quot; text=&quot;Ещё одна&quot;&gt;&lt;lj-embed id=&quot;5&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description>
  <comments>http://0x7be.livejournal.com/40700.html</comments>
  <category>Музыка</category>
  <lj:music>Eisbrecher - Leider</lj:music>
  <media:title type="plain">Eisbrecher - Leider</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/40318.html</guid>
  <pubDate>Sun, 20 Jul 2008 10:54:37 GMT</pubDate>
  <title>&quot;В интернете кто-то неправ!&quot;  (с)</title>
  <link>http://0x7be.livejournal.com/40318.html</link>
  <description>Вот правильно говорят, что есть люди, знающие и уважающие Linux, а есть линуксоиды.&amp;nbsp; Что бы быть линуксоидом, не надо разбираться в линуксе или иметь хоть какой-нибудь опыт работы в нём. Достаточно иметь достаточный запас классовой ненависти и доступ к форумам, где&amp;nbsp; Windows обсуждают :-)&lt;br /&gt;&lt;br /&gt;Обычный стиль таких персонажей - влететь галопом в какую-то дискуссию, где люди чинно и мирно обсуждают конкретные проблемы в некоторой вещи X, и громко заорать &quot;да ваш Х - полное ГАВНО!&quot;. Иногда приличные люди ведутся и вступают в неравный бой. Неравный - потому что против их попыток аргументированно что-то объяснить троллю и провокатору, тот отвечает могучими залпами из говномёта. Иногда люди, обсуждавшие Х, также достают своих говномёты с зарубками на прикладах и превращают форум в полноводную реку дерьма, похоронив предметный топик.&lt;br /&gt;&lt;br /&gt;Как это ни забавно, но Линукс всё же является неким флагом, путеводной звездой таких троллей. Последний раз я наблюдал, как один альтернативно одаренный персонаж обливал дерьмом С++ и Страуструпа лично. И что бы вы думали? Он оказался линуксоидом! :)&lt;br /&gt;&lt;br /&gt;Мне сильно интересен психологичекий портрет таких персонажей. Ибо есть у меня смутные подозрения, что это такая попытка самоутвердиться через отстаивание своей точки зрения. Во всём споре наблюдается метаконфликт: спор формально о предмете, а реально о том, кто главный, кто круче.</description>
  <comments>http://0x7be.livejournal.com/40318.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/40126.html</guid>
  <pubDate>Tue, 15 Jul 2008 09:04:11 GMT</pubDate>
  <link>http://0x7be.livejournal.com/40126.html</link>
  <description>&lt;lj-embed id=&quot;3&quot; /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;div class=&quot;ljcut&quot; text=&quot;Lyrics...&quot;&gt; Some people say a man is made outta mud&lt;br /&gt; A poor man&apos;s made outta muscle and blood&lt;br /&gt; Muscle and blood and skin and bones&lt;br /&gt; A mind that&apos;s a-weak and a back that&apos;s strong&lt;br /&gt; &lt;br /&gt; You load sixteen tons, what do you get&lt;br /&gt; Another day older and deeper in debt&lt;br /&gt; Saint Peter don&apos;t you call me &apos;cause I can&apos;t go&lt;br /&gt; I owe my soul to the company store&lt;br /&gt; &lt;br /&gt; I was born one mornin&apos; when the sun didn&apos;t shine&lt;br /&gt; I picked up my shovel and I walked to the mine&lt;br /&gt; I loaded sixteen tons of number nine coal&lt;br /&gt; And the straw boss said &quot;Well, a-bless my soul&quot;&lt;br /&gt; &lt;br /&gt; You load sixteen tons, what do you get&lt;br /&gt; Another day older and deeper in debt&lt;br /&gt; Saint Peter don&apos;t you call me &apos;cause I can&apos;t go&lt;br /&gt; I owe my soul to the company store&lt;br /&gt; &lt;br /&gt; I was born one mornin&apos;, it was drizzlin&apos; rain&lt;br /&gt; Fightin&apos; and trouble are my middle name&lt;br /&gt; I was raised in the canebrake by an ol&apos; mama lion&lt;br /&gt; Cain&apos;t no-a high-toned woman make me walk the line&lt;br /&gt; &lt;br /&gt; You load sixteen tons, what do you get&lt;br /&gt; Another day older and deeper in debt&lt;br /&gt; Saint Peter don&apos;t you call me &apos;cause I can&apos;t go&lt;br /&gt; I owe my soul to the company store&lt;br /&gt; &lt;br /&gt; If you see me comin&apos;, better step aside&lt;br /&gt; A lotta men didn&apos;t, a lotta men died&lt;br /&gt; One fist of iron, the other of steel&lt;br /&gt; If the right one don&apos;t a-get you&lt;br /&gt; Then the left one will&lt;br /&gt; &lt;br /&gt; You load sixteen tons, what do you get&lt;br /&gt; Another day older and deeper in debt&lt;br /&gt; Saint Peter don&apos;t you call me &apos;cause I can&apos;t go&lt;br /&gt; I owe my soul to the company storeType your cut contents here.&lt;/div&gt;</description>
  <comments>http://0x7be.livejournal.com/40126.html</comments>
  <category>Музыка</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://0x7be.livejournal.com/39699.html</guid>
  <pubDate>Tue, 08 Jul 2008 13:50:30 GMT</pubDate>
  <title>This the Bismark</title>
  <link>http://0x7be.livejournal.com/39699.html</link>
  <description>&lt;lj-embed id=&quot;2&quot; /&gt;</description>
  <comments>http://0x7be.livejournal.com/39699.html</comments>
  <category>Музыка</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
