<?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>язык, на котором не говорят</title>
  <link>http://beroal.livejournal.com/</link>
  <description>язык, на котором не говорят - LiveJournal.com</description>
  <lastBuildDate>Fri, 24 May 2013 16:55:44 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>beroal</lj:journal>
  <lj:journalid>4821330</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://l-userpic.livejournal.com/63961076/4821330</url>
    <title>язык, на котором не говорят</title>
    <link>http://beroal.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/43998.html</guid>
  <pubDate>Fri, 24 May 2013 16:55:44 GMT</pubDate>
  <title>окно в интернет</title>
  <link>http://beroal.livejournal.com/43998.html</link>
  <description>Найти с помощью поискового сервиса что-то полезное становится с каждым годом труднее. Это особенно заметно, когда я ищу популярное слово. Сначала идут купи-продайки, потом &lt;a href=&quot;http://en.wikipedia.org/wiki/Content_farm&quot; rel=&quot;nofollow&quot;&gt;content farms&lt;/a&gt;. Настойчивым людям я рекомендую сразу перемотать на 300-ю ссылку в результатах поиска. :-)&lt;br /&gt;&lt;br /&gt;Полезным остаётся поиск по словами, по которым пока никто не додумался спамить. Примеры: диффеоморфизм, пелагический, скафандр. Полезным остаётся поиск длинных фраз. Например, вы хотите вспомнить, на каком сайте видели некоторую фразу, или хотите узнать, сколько сайтов перепечатало вашу статью. Это правило можно обобщить: результатов поиска настолько мало, что &lt;strong&gt;рейтинг сайта не имеет значения&lt;/strong&gt;. Следовательно, проблема в алгоритме вычисления рейтинга. Или в понятии рейтинга вообще.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;Моим окном в интернет давно стали блоги и &amp;laquo;ленты избранного&amp;raquo;. &amp;laquo;Ленты избранного&amp;raquo; я считаю наиболее прогрессивным методом получения информации из интернета и хочу сказать о них. (Наиболее подходящий им официальный термин &amp;mdash; социальные закладки, &lt;a href=&quot;http://en.wikipedia.org/wiki/Social_bookmarking&quot; rel=&quot;nofollow&quot;&gt;social bookmarking&lt;/a&gt;.) Это реинкарнация старой идеи — просеивания информации вручную. Мы хотя бы можем выбирать тех, кто выбирает материал, и это не будут сеошники или толпа. От традиционных каталогов сайтов мы перешли к децентрализованной системе, следовательно, конкуренции. Этот метод уже давно работает при фильтрации &lt;strong&gt;новостей&lt;/strong&gt; и, очевидно, будет внедрён в &lt;strong&gt;поиск&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Когда &amp;laquo;Google&amp;raquo; прибил &amp;laquo;Shared Items&amp;raquo;, я использовал это событие, чтобы вдоволь насладиться тишиной. Когда стало совсем нудно, я решил восстановить свою ленту избранного и вскорости выбрал &amp;laquo;Diigo&amp;raquo;. Не совсем то, но сойдёт. &lt;a href=&quot;https://www.diigo.com/user/beroal&quot; rel=&quot;nofollow&quot;&gt;Моё избранное&lt;/a&gt; можно фильтровать по меткам (пока что есть метки, обозначающие язык материала), можно подписываться на него с помощью RSS feed. Чтобы поместить материал в избранное, надо выделить цитату на веб-странице и нажать &amp;laquo;Highlight&amp;raquo; в расширении &amp;laquo;Diigo&amp;raquo; для &amp;laquo;Firefox&amp;raquo;. Можно нажимать несколько раз на одной странице, цитаты будут собраны под одним пунктом. Чтобы расшарить чужую запись, надо нажать &amp;laquo;Save&amp;raquo; (по названию и не догадаешься :-) ). Добавить запись из произвольного feed-а невозможно, это то, чем &amp;laquo;Diigo&amp;raquo; отличается от &amp;laquo;Shared Items&amp;raquo;.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/43998.html</comments>
  <category>writer&apos;s block</category>
  <category>социальная сеть</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/43717.html</guid>
  <pubDate>Mon, 13 May 2013 09:04:33 GMT</pubDate>
  <title>поиск людей по параметрам</title>
  <link>http://beroal.livejournal.com/43717.html</link>
  <description>Сайты для поиска людей по параметрам уже существуют, например, сайты знакомств, вакансий. У меня есть идея аналогичного сайта со следующими &lt;strong&gt;отличиями&lt;/strong&gt;:&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;ol&gt;&lt;li&gt;Сайт не является специализированным. Параметры должны охватывать самые разные темы, от аквариумных рыбок до политических убеждений.&lt;/li&gt;&lt;li&gt;Пользователи могут сами создавать параметры. Это сделает сайт интересным и актуальным.&lt;/li&gt;&lt;li&gt;Если пользователь X читает профиль пользователя Y, то видит только те параметры, по которым между X и Y есть близость. Подобной функции я не видел.&lt;/li&gt;&lt;li&gt;Если пользователь X читает сообщение пользователя Y в блоге или на форуме, то X видит близость между X и Y рядом с сообщением (рядом с именем автора). Чтобы не нужно было далеко ходить. (Конечно, потребуется сотрудничество с блогами и форумами.)&lt;/li&gt;&lt;/ol&gt;&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;&lt;br /&gt;Существенное отличие от традиционных сайтов:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;На традиционном сайте пользователь задаёт параметры поиска, получает список людей.&lt;/li&gt;&lt;li&gt;В моём случае пользователь узнаёт близость к тем людям, с которыми он пересекается в интернете, то есть уже с ними общается.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;В принципе, меня устроит и готовая такая система…</description>
  <comments>http://beroal.livejournal.com/43717.html</comments>
  <category>социальная сеть</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/43309.html</guid>
  <pubDate>Mon, 22 Apr 2013 18:40:44 GMT</pubDate>
  <title>&amp;laquo;Психбольница в руках пациентов&amp;raquo;. Рецензия.</title>
  <link>http://beroal.livejournal.com/43309.html</link>
  <description>Увидев рецензию на какую-то книгу в своей ленте, решил и сам что-то написать. Учитывая, что я давно не касался своего блога.&lt;br /&gt;&lt;br /&gt;Книга &lt;a href=&quot;http://coollib.net/b/55755&quot; rel=&quot;nofollow&quot;&gt;&amp;laquo;Психбольница в руках пациентов&amp;raquo;&lt;/a&gt;. (Не спрашивайте, пожалуйста, почему я начал её читать. :-) ) Книга посвящена программированию в широком смысле и обещает научить нас работе с заказчиками. Ну, там, интерфейс пользователя, как отличать нужную функциональность от ненужной, как сделать программу привлекательной. Менеджменту она не посвящена.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;1-я половина книги (части 1—3) посвящена описанию стоящей перед нами проблемы, и описана проблема в таком стиле:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Программы очень плохие. Вообще, всё очень плохо.&lt;/li&gt;&lt;li&gt;Курьёзные случаи из серии &amp;laquo;Из-за ошибки в программе самолёт врезался в гору&amp;raquo;. Ну, знакомо. Только здесь вариант &amp;laquo;Из-за ошибки в интерфейсе пользователя самолёт врезался в гору&amp;raquo;.&lt;/li&gt;&lt;li&gt;Во всём виноваты программисты и инженеры, потому что они аутистичные мудаки. (Я пересказал своими словами, конечно ;-) .)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Приведу пару мудрых мыслей:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;laquo;Иерархические файловые системы нужны операционным системам компьютеров, но не людям&amp;raquo;.&lt;/li&gt;&lt;li&gt;Подглава &amp;laquo;Повторное использование кода&amp;raquo; находится в главе &amp;laquo;Отмирающая культура&amp;raquo;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Если вас заставляют читать эту книгу, по крайней мере, не читайте 1-ю половину.&lt;br /&gt;&lt;br /&gt;В оставшейся части книги написано, как решать проблему. К сожалению, 2-я половина сохраняет стиль 1-й половины &amp;laquo;писать много банальностей и обтекаемых фраз и повторять их много раз&amp;raquo;. Я только пролистал книгу, так как мне было жалко тратить время. (Книга большая, 6.5e5 знаков.) Однако, тот, кто потрудиться фильтровать этот словесный поток, без сомнения, найдёт золотые крупицы.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/43309.html</comments>
  <category>интерфейс пользователя</category>
  <category>writer&apos;s block</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/43035.html</guid>
  <pubDate>Fri, 01 Mar 2013 13:20:50 GMT</pubDate>
  <title>signature verification direct request of loginza.ru Relying Party is not correct</title>
  <link>http://beroal.livejournal.com/43035.html</link>
  <description>I have recently installed a personal OpenID provider (SimpleID) and linked it to my domain name. It performed well on OpenID test websites but failed on the &lt;em&gt;real-world&lt;/em&gt; relying party &lt;a href=&quot;https://loginza.ru/signin-integration&quot; rel=&quot;nofollow&quot;&gt;&amp;ldquo;Loginza&amp;rdquo;&lt;/a&gt;. I do know that OpenID is hard because of incompatibilities between the OpenID specification and OpenID websites. But I have little choice: OpenID, SSL client certificates, proprietary platforms. Fortunately, owning the Provider part, I can debug.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&amp;ldquo;Loginza&amp;rdquo; gives a message &amp;ldquo;sign_validation Invalid request signature or association expired&amp;rdquo; at the very end of an OpenID authentication process. Looking into an OpenID provider log revealed that the Provider actually did not verify the signature given to the Provider in the Relying Party&apos;s direct request which is described in &lt;a href=&quot;http://openid.net/specs/openid-authentication-2_0.html#verifying_signatures&quot; rel=&quot;nofollow&quot;&gt;&amp;ldquo;11.4. Verifying Signatures. 11.4.2.1. Request Parameters&amp;rdquo;&lt;/a&gt; of the specification. Key events leading to the failure are following.&lt;br /&gt;&lt;br /&gt;The &amp;ldquo;openid.signed&amp;rdquo; parameter of Provider&apos;s positive assertion indirect response described in &lt;a href=&quot;http://openid.net/specs/openid-authentication-2_0.html#positive_assertions&quot; rel=&quot;nofollow&quot;&gt;&amp;ldquo;10.1. Positive Assertions&amp;rdquo;&lt;/a&gt; has the following value:&lt;br /&gt;&lt;blockquote&gt;op_endpoint,return_to,response_nonce,assoc_handle,identity,claimed_id,ns.pape,pape.auth_time,pape.auth_level.ns.nist,pape.auth_level.nist,pape.auth_policies,ns.sreg,sreg.nickname,sreg.email,sreg.gender,sreg.country,sreg.language,sreg.timezone&lt;/blockquote&gt;&lt;br /&gt;In Relying Party&apos;s signature verification direct request (aforementioned &amp;ldquo;11.4.2.1&amp;rdquo;) that parameter has the same value. There are no parameters &amp;ldquo;openid.ns.pape&amp;rdquo;, &amp;laquo;openid.ns.sreg&amp;raquo;, &amp;ldquo;openid.pape.auth_level.ns.nist&amp;rdquo; in the request. Instead, there are unexpected parameters &amp;ldquo;ns.openid.pape&amp;rdquo;, &amp;ldquo;ns.openid.sreg&amp;rdquo;, &amp;ldquo;ns.openid.pape.auth_level.nist&amp;rdquo; with the values that the missing parameters should have. And the unexpected parameters have the prefix &amp;ldquo;ns&amp;rdquo;, but &lt;a href=&quot;http://openid.net/specs/openid-authentication-2_0.html#anchor11&quot; rel=&quot;nofollow&quot;&gt;&amp;ldquo;6. Generating Signatures. 6.1.  Procedure&amp;rdquo;&lt;/a&gt; says:&lt;br /&gt;&lt;blockquote&gt;The list is stored with the key &quot;openid.signed&quot;. The value is a comma-separated list of keys, with the &quot;openid.&quot; prefix stripped. This algorithm is only capable of signing keys that start with &quot;openid.&quot;&lt;/blockquote&gt;&lt;br /&gt;Relying Party&apos;s mistake is clear.&lt;br /&gt;&lt;br /&gt;If my provider is modified such that it renames the unexpected parameters (of course, only if received from the specific IP address), the authorization on &amp;ldquo;Loginza&amp;rdquo; works.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/43035.html</comments>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/42988.html</guid>
  <pubDate>Sun, 25 Nov 2012 14:32:08 GMT</pubDate>
  <title>Почему американцы не умеют думать.</title>
  <link>http://beroal.livejournal.com/42988.html</link>
  <description>&lt;a href=&quot;http://criticalandrationalthinking.blogspot.com/2005/11/why-americans-cant-think_17.html&quot; rel=&quot;nofollow&quot;&gt;Why Americans Can&apos;t Think.&lt;/a&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;Я 9 лет преподаю естественные науки в старших классах школы (high school). Каждый год я сталкиваюсь с поразительным количеством учеников, которые яростно сопротивляются попыткам заставить их думать самостоятельно. Многие ученики (в некоторых классах они составляют большинство) не хотят овладевать трудными концепциями, синтезировать информацию, применять концепции в новых условиях, решать трудные задачи; они ожидают, что кто-то нальёт информацию в их головы. Мало кто задаёт вопросы во время урока, не во время урока или хотя бы по e-mail. Они приходят на урок с усвоенными ранее идеями (например, что мы произошли от обезьян), из-за чего им труднее понять истину (например, что у нас и обезьян был общий предок). Некоторые ученики уверены, что любое знание относительно; поэтому для них результаты контролируемого научного эксперимента выглядят не более достоверными, чем информация из рекламы. Другие считают, что наука — это одна из религий, поэтому они вольны верить в неё или не верить. Некоторые отказываются думать о трудных вещах, которые требуют концентрации и усердия.&lt;br /&gt;&lt;br /&gt;Большинство людей не получает такого образования, где бы их формально учили думать критически и независимо. Обучать этому навыку трудно, и его не включили в стандарты школьного образования штата Калифорния.&lt;br /&gt;&lt;br /&gt;Умение критически думать тормозится и другими факторами:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Размышление требует времени. Кто из нас может позволить себе эту роскошь в наши дни?&lt;/li&gt;&lt;li&gt;Размышление может привести к пугающим выводам или подвигнуть на действия.&lt;/li&gt;&lt;li&gt;Правительство и цензура в СМИ ограничивают доступность информации и искажают факты.&lt;/li&gt;&lt;li&gt;Иногда размышление вынуждает идти против большинства.&lt;/li&gt;&lt;li&gt;Иногда размышление вынуждает отказываться от убеждений, в которые человек верил долгое время.&lt;/li&gt;&lt;li&gt;Иногда размышление вынуждает разрывать ценные социальные связи.&lt;/li&gt;&lt;li&gt;Если человек думал самостоятельно и ошибался, кого он должен обвинить?&lt;/li&gt;&lt;li&gt;Каждый раз при решении задачи или самостоятельном размышлении мы тащим личные предубеждения, которые могут препятствовать пониманию.&lt;/li&gt;&lt;li&gt;Трудно преодолеть личные предубеждения, которые формировались в течение жизни и являются результатом влияния семьи, друзей, коллег.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/42988.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>12</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/42601.html</guid>
  <pubDate>Wed, 24 Oct 2012 19:10:00 GMT</pubDate>
  <title>сообщество двуногих</title>
  <link>http://beroal.livejournal.com/42601.html</link>
  <description>Я не понимаю терминов типа &amp;laquo;Haskell community&amp;raquo; или &amp;laquo;Perl community&amp;raquo;. Я-то думал, что community образуется на основании симпатий и антипатий, а язык программирования &amp;mdash; критерий третьестепенный. Правило &amp;laquo;Если ты программируешь на Java, то я с тобой дружу, а если ты не программируешь на Java, то я с тобой не дружу&amp;raquo; кажется мне странным.</description>
  <comments>http://beroal.livejournal.com/42601.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/42017.html</guid>
  <pubDate>Mon, 01 Oct 2012 17:40:53 GMT</pubDate>
  <title>Dijkstra. &amp;ldquo;&amp;ldquo;Real mathematicians don&apos;t prove.&amp;rdquo;&amp;rdquo; &amp;ldquo;On a cultural gap (Dra</title>
  <link>http://beroal.livejournal.com/42017.html</link>
  <description>Опубликован перевод ещё двух заметок Дейкстры о математике. Заметка &lt;a href=&quot;http://www.beroal.in.ua/article/dijkstra/ewd1012.html&quot; rel=&quot;nofollow&quot;&gt;«Настоящие математики не доказывают»&lt;/a&gt; (&amp;ldquo;&amp;ldquo;Real mathematicians don&apos;t prove&amp;rdquo;&amp;rdquo;, EWD1012) рассказывает о том, что люди, которые не считают формальное доказательство критерием истины, существуют не только в программировании, но и в математике. Правда, в программировании их намного больше. Заметка &lt;a href=&quot;http://www.beroal.in.ua/article/dijkstra/ewd913.html&quot; rel=&quot;nofollow&quot;&gt;&amp;laquo;О пропасти между культурами. (Черновик.)&amp;raquo;&lt;/a&gt; (&amp;ldquo;On a cultural gap (Draft.)&amp;rdquo;, EWD913) рассказывает, какие исторические факторы привели к тому, что информатика оказалась оторванной от математики.&lt;br /&gt;&lt;br /&gt;Я решил не засорять блог переводами. Список переводов &lt;a href=&quot;http://www.beroal.in.ua/article/dijkstra/&quot; rel=&quot;nofollow&quot;&gt;здесь&lt;/a&gt;, там же лента с новыми переводами. Обсуждение переводов можно посылать мне лично или в сообщество &lt;span  class=&quot;ljuser  i-ljuser     &quot;  lj:user=&quot;transnote&quot;&gt;&lt;a href=&quot;http://transnote.livejournal.com/profile&quot; &gt;&lt;img width=&quot;16&quot; height=&quot;16&quot;  class=&quot;i-ljuser-userhead&quot;  src=&quot;http://l-stat.livejournal.com/img/community.gif?v=104.3&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://transnote.livejournal.com/&quot; class=&quot;i-ljuser-username&quot;   &gt;&lt;b&gt;transnote&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;.</description>
  <comments>http://beroal.livejournal.com/42017.html</comments>
  <category>dijkstra</category>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/41764.html</guid>
  <pubDate>Tue, 25 Sep 2012 14:53:56 GMT</pubDate>
  <title>генератор тетрисов</title>
  <link>http://beroal.livejournal.com/41764.html</link>
  <description>Пусть в тетрисе фигуры имеет кривую границу. Можно ли в него играть? Границы разных фигур должны частично совпадать. Я думаю, надо поделить фигуру на кривые отрезки. Есть множество кривых отрезков. Даже функция, которая описывает отрезок, не имеет значения, будь она хоть трижды недифференцируемой. Нам достаточно знать размах отрезка, то есть разницу между началом и концом отрезка. Ещё надо как-то добиться, чтобы сумма размахов отрезков, образующих фигуру, была равна нулю.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://beroal.livejournal.com/38510.html&quot; rel=&quot;nofollow&quot;&gt;Изучай математический анализ&lt;/a&gt;, играя в тетрис! Ориентирован на понимание.</description>
  <comments>http://beroal.livejournal.com/41764.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>14</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/41522.html</guid>
  <pubDate>Fri, 21 Sep 2012 20:58:18 GMT</pubDate>
  <title>и тут внутренний голос сказал&amp;hellip;</title>
  <link>http://beroal.livejournal.com/41522.html</link>
  <description>Методология (программирования) похожа на внутренний голос шизофреника. Например, внутренний голос приказывает бросить все дела и уехать в другой город. Человек выполняет всё в точности. У человека ни разу не мелькает мысль, что это вредное и бессмысленное действие. Это состояние красочно описано в &lt;a href=&quot;http://lib.ru/PSIHO/OBRAJEN/obrajen.txt&quot; rel=&quot;nofollow&quot;&gt;книге Барбары О&apos;Брайен &amp;laquo;Необыкновенное путешествие в безумие и обратно: операторы и вещи&amp;raquo;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[Update 2012-10-04. Я мнил себя сатириком, но, как говорится, век живи, век учись. Ведь можно &lt;a href=&quot;http://пиши-код-блять.рф/&quot; rel=&quot;nofollow&quot;&gt;объяснить всё и просто и глубоко, на практике&lt;/a&gt;. (Ключевая фраза для поиска: &amp;laquo;Мы пишем код блять!&amp;raquo;]</description>
  <comments>http://beroal.livejournal.com/41522.html</comments>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/41397.html</guid>
  <pubDate>Sun, 16 Sep 2012 19:19:20 GMT</pubDate>
  <title>альтернативно одарённые наступают (СУНЦ НГУ)</title>
  <link>http://beroal.livejournal.com/41397.html</link>
  <description>&lt;blockquote&gt;Суд Советского района Новосибирска обязал СУНЦ НГУ (бывшая Физико-математическая школа, ФМШ) уволить профессоров и нанять вместо них школьных учителей.&lt;br /&gt;&lt;br /&gt;Как пояснил Николай Яворский, к судебному разбирательству привела проверка Рособрнадзора, проведенная в ответ на жалобу матери одного из учеников школы, которому грозило отчисление.&lt;/blockquote&gt;&lt;br /&gt;&lt;a href=&quot;http://news.ngs.ru/more/702637/&quot; rel=&quot;nofollow&quot;&gt;сухая новость&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://5-tv.ru/news/59864/&quot; rel=&quot;nofollow&quot;&gt;чуть более жирный репортаж&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogs.mail.ru/mail/vann/182408226B392E56.html&quot; rel=&quot;nofollow&quot;&gt;наводчик&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/41397.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/41000.html</guid>
  <pubDate>Fri, 07 Sep 2012 12:33:21 GMT</pubDate>
  <title>Dijkstra. &amp;ldquo;There is still a war going on&amp;rdquo;</title>
  <link>http://beroal.livejournal.com/41000.html</link>
  <description>Опубликован &lt;a href=&quot;http://www.beroal.in.ua/article/dijkstra/ewd1165.html&quot; rel=&quot;nofollow&quot;&gt;перевод заметки Дейкстры &amp;laquo;Война, которая идёт до сих пор&amp;raquo; (&amp;laquo;There is still a war going on&amp;raquo;, EWD1165)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Отрывок из заметки &amp;laquo;О &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C_%D0%A3%D1%8D%D0%B1%D1%81%D1%82%D0%B5%D1%80%D0%B0&quot; rel=&quot;nofollow&quot;&gt;словаре Вебстера&lt;/a&gt;, юзерах, багах и Аристотеле&amp;raquo; &lt;a href=&quot;http://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD618.html&quot; rel=&quot;nofollow&quot;&gt;(&amp;laquo;On Webster, Users, Bugs and Aristotle&amp;raquo;, EWD618)&lt;/a&gt; я напечатаю прямо здесь, так как оригинал защищён копирайтом. Я полагаю, что это сойдёт за цитату и бог копирайта меня не накажет. :)&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;blockquote&gt;Мои подозрения пробудились, когда я увидел, что французы — несмотря на всю их англофобию — тоже вставляют слово «user» в предложения на своём языке! С тех пор я внимательно наблюдал за этим явлением и могу сказать вам, что слово «user» разрешается употреблять в правильной русской («юзер») и японской речи.&lt;br /&gt;&lt;br /&gt;Это говорит о многом. На выпускном экзамене в моей средней школе было задание перевести текст с некоторого иностранного языка на «правильный голландский». Нас учили, что перевод состоит из двух шагов: сначала вы должны извлечь точный смысл из текста на иностранном языке, потом вы должны выразить этот смысл на правильном голландском. Раз слово «user» копируется, а не переводится, по-моему, это доказывает, что это слово потеряло свой первоначальный смысл. Мы заимствуем иностранный термин как неологизм, новое название нового понятия.&lt;br /&gt;&lt;br /&gt;Компьютерный «user» не живой человек из плоти и крови, с собственными желаниями и разумом. Нет, это сказочное существо, причём с весьма дурным характером. Он, видимо, полукровка, так как у него есть деньги, но нет вкуса, карикатурный герой, и работа на него не приносит никакого вдохновения. Честно говоря, он настолько тупой и ограниченный, что одна его тупость может быть ответственной за всё уродство существующих компьютерных систем. Господи, а какой же он невежественный! Пожалуй, эта черта характера угнетает нас больше всего. Он так же сопротивляется обучению, как другой знаменитый иванушка-дурачок — «средний программист», чья тупость является главным препятствием на пути прогресса в программировании. Тяжело сознавать, что работа на широких фронтах информатики практически парализована из-за узколобости и других гротескных изъянов, которыми эти влиятельные сказочные фигуры были наделены в унылой литературе. (Не только компьютерная литература изобретает подобные карикатуры. Университеты всех стран пострадали от изобретения «среднего студента», рождение «неискушённого» и даже «бедного читателя» серьёзно затрудняет научную публикацию!)&lt;br /&gt;&lt;br /&gt;Здесь будет уместно привлечь ваше внимание к другой английской фразе, которая часто встречается в голландской литературе — «реальный мир» (the real world). Её употребление в голландском — боюсь, не только в голландском — почти всегда является симптомом воинствующего невежества (violent anti-intellectualism).&lt;/blockquote&gt;&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/41000.html</comments>
  <category>dijkstra</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/40792.html</guid>
  <pubDate>Tue, 04 Sep 2012 08:45:59 GMT</pubDate>
  <title>надо как-то развивать софтверную терминологию</title>
  <link>http://beroal.livejournal.com/40792.html</link>
  <description>В свете заметок Дейкстры хочу начать конкурс. Программистов сначала программистами, потом софтверными инженерами и дизайнерами ПО. Как их будут называть в будущем? Предлагайте. Разбиратель сложностей, структурный художник и поэт, электромыслитель, повелитель аспектов?</description>
  <comments>http://beroal.livejournal.com/40792.html</comments>
  <category>dijkstra</category>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>17</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/40505.html</guid>
  <pubDate>Mon, 27 Aug 2012 12:22:59 GMT</pubDate>
  <title>Dijkstra. &amp;ldquo;On the cruelty of really teaching computing science&amp;rdquo;</title>
  <link>http://beroal.livejournal.com/40505.html</link>
  <description>Опубликован &lt;a href=&quot;http://www.beroal.in.ua/article/dijkstra/ewd1036.html&quot; rel=&quot;nofollow&quot;&gt;перевод заметки Дейкстры &amp;laquo;О суровости зим в Челябинской области&amp;raquo; (&amp;laquo;On the cruelty of really teaching computing science&amp;raquo;, EWD1036)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Когда я переводил, то падал под стол и колотил пятками в крышку. :) Вот цитата, чтобы разогреть интерес:&lt;br /&gt;&lt;blockquote&gt;Поэтому, когда я высматриваю в своём хрустальном шаре смутное будущее информатики, я вижу одну и ту же печальную надпись: &amp;laquo;Бизнес, как всегда&amp;raquo;. Университетам не хватает храбрости учить точным наукам, они продолжают вести студентов в тупик, и каждую новую инфантилизацию учебной программы приветствуют криками &amp;laquo;Слава прогрессу!&amp;raquo;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;У меня есть что добавить на тему &amp;laquo;множество и его элементы&amp;raquo;. Когда вы изучаете вектора, на первых порах вы манипулируете ими примерно так: k·(x_0, x_1, x_2, x_3, x_4) = (k·x_0, k·x_1, k·x_2, k·x_3, k·x_4). Вектора бывают разной длины, поэтому надо написать аналогичную формулу для всех длин. Конечно, количество длин бесконечное, но мы можем ограничиться только теми, которые нам понадобятся для прикладных задач. Манипулирование матрицами требует ещё большего количества писанины. Я называю эту писанину &amp;laquo;полотнища&amp;raquo;. То же верно для последовательностей (ℕ→X), только выписать последний элемент последовательности ну никак не получается. :) Здравый смысл намекает, что эту рутинную писанину можно как-то сократить и что человек, который выписывает все элементы для всех длин, выглядит как конченый придурок. От усталости и стыда вы бросаете писать приблизительно на втором элементе: f(x_0, x_1, &amp;hellip;, x_n). Для матриц правила каллиграфии немного более сложны, и многоточия должны быть прочерчены во многих направлениях, как полосы на британском флаге. Следующий барьер, который вы должны взять, — это не перечислять элементы. Вектор — это 1-местная функция с конечным доменом, матрица — это 2-местная функция с конечными доменами. Надо выполнять операции над этими функциями, а не над элементами векторов и матриц. Умножение матриц записывается Σ(j↦a_1(i1, j) · a_0(j, i0)). Подпоследовательность последовательности x записывается x∘s, где s &amp;mdash; изотонная инъекция. Это уменьшает количество писанины и делает доказательство более строгим. Похоже, даже авторам учебников трудно взять этот барьер.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Я прошу помощи с переводом. В конце статьи есть фраза, смысл которой я не понял: «&amp;hellip;The problems of the real world are primarily those you are left with when you refuse to apply their effective solutions.».</description>
  <comments>http://beroal.livejournal.com/40505.html</comments>
  <category>dijkstra</category>
  <lj:security>public</lj:security>
  <lj:reply-count>42</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/40387.html</guid>
  <pubDate>Thu, 09 Aug 2012 12:59:59 GMT</pubDate>
  <title>&amp;laquo;поэт по тетрадкам в клеточку&amp;raquo;</title>
  <link>http://beroal.livejournal.com/40387.html</link>
  <description>Originally posted by &lt;span  class=&quot;ljuser  i-ljuser     &quot;  lj:user=&quot;dark_barker&quot;&gt;&lt;a href=&quot;http://dark-barker.livejournal.com/profile&quot; &gt;&lt;img width=&quot;16&quot; height=&quot;16&quot;  class=&quot;i-ljuser-userhead&quot;  src=&quot;http://l-files.livejournal.net/userhead/865?v=1344240826&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://dark-barker.livejournal.com/&quot; class=&quot;i-ljuser-username&quot;   &gt;&lt;b&gt;dark_barker&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; at &lt;a href=&quot;http://dark-barker.livejournal.com/116397.html&quot; rel=&quot;nofollow&quot;&gt;программисты-гуманитарии&lt;/a&gt;&lt;blockquote&gt;&lt;div&gt;Именно же поэтому сказать про программиста, что он «программист php/delphi/java/любой_другой_язык» — это тоже абсурд. Когда так говорят про кого-то, тут сразу всё понятно становится. Программистом нельзя быть только на каком-то языке. Это всё равно, что быть поэтом только на тетрадках в клеточку; или художником, но исключительно гуашью; или музыкантом, но лишь на пианинах.&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Добавлю, что с характеристикой fritzmorgen я полностью согласен. Мне он запомнился как философ, который запутался в &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BB%D1%8C%D1%81%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%BE%D1%81%D1%82%D1%8C&quot; rel=&quot;nofollow&quot;&gt;критерии Поппера&lt;/a&gt;. :) Его талант лежит не в глубине мысли, а в нахождении горячих, флеймерских тем.</description>
  <comments>http://beroal.livejournal.com/40387.html</comments>
  <category>dijkstra</category>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/40142.html</guid>
  <pubDate>Tue, 24 Jul 2012 15:09:08 GMT</pubDate>
  <title>Dijkstra. &amp;ldquo;The fruits of misunderstanding&amp;rdquo;</title>
  <link>http://beroal.livejournal.com/40142.html</link>
  <description>Опубликован &lt;a href=&quot;http://www.beroal.in.ua/article/dijkstra/ewd854.html&quot; rel=&quot;nofollow&quot;&gt;перевод заметки Дейкстры &amp;laquo;Плоды непонимания&amp;raquo; (&amp;laquo;The fruits of misunderstanding&amp;raquo;, EWD854)&lt;/a&gt;.</description>
  <comments>http://beroal.livejournal.com/40142.html</comments>
  <category>dijkstra</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/39909.html</guid>
  <pubDate>Fri, 20 Jul 2012 15:38:12 GMT</pubDate>
  <title>вибори, вибори, кандидати &amp;mdash; лінуксоїди</title>
  <link>http://beroal.livejournal.com/39909.html</link>
  <description>На веб-сайті &amp;laquo;Українські науковці у світі&amp;raquo; опубліковані &lt;a href=&quot;http://www.usw.com.ua/profiles/blogs/2012-7&quot; rel=&quot;nofollow&quot;&gt;витяги з програм політичних партій, які стосуються науки&lt;/a&gt;. Є серед них і такий витяг:&lt;br /&gt;&lt;blockquote&gt;Створити конкурентоспроможну українську операційну систему для комп&apos;ютерів на базі наявних вільних систем з якісним перекладом, великою кількістю українських шрифтів, запровадити службу підтримки та безпеки. 3апровадити українську операційну систему в усіх державних органах та установах.&lt;/blockquote&gt;&lt;br /&gt;В якій це партії окошилися лінуксоїди, питаєте ви? У тій самій жахливій &amp;laquo;Свободі&amp;raquo;. :) У &amp;laquo;Свободи&amp;raquo; найбільш ліберальна програма. Інші програми кучкуються навколо тези &amp;laquo;держава допомагає науці, нічого міняти не треба, просто дайте більше грошей&amp;raquo;. Програма ПР має найбільший запах &lt;em&gt;радянської стабільності&lt;/em&gt;, ПР переплюнула навіть комуністів.</description>
  <comments>http://beroal.livejournal.com/39909.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>9</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/39664.html</guid>
  <pubDate>Sat, 10 Mar 2012 08:17:27 GMT</pubDate>
  <title>байт</title>
  <link>http://beroal.livejournal.com/39664.html</link>
  <description>Пришло в голову. что понятие байта больше не имеет практической ценности. Когда-то и числа, и буквы имели размер байта, это было удобно. Сейчас числа имеют разный размер в зависимости от процессора, и даже в пределах одного компьютера разные шины данных имеют разную ширину. С буквами вообще бардак, который невозможно описать одним предложением.&lt;br /&gt;&lt;br /&gt;Процессор должен видеть память как массив битов, а не массив байтов.</description>
  <comments>http://beroal.livejournal.com/39664.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>25</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/39322.html</guid>
  <pubDate>Thu, 09 Feb 2012 20:14:10 GMT</pubDate>
  <title>PulseAudio: творческое программирование</title>
  <link>http://beroal.livejournal.com/39322.html</link>
  <description>Что меня поражает в &lt;a href=&quot;http://ru.wikipedia.org/wiki/PulseAudio&quot; rel=&quot;nofollow&quot;&gt;PulseAudio&lt;/a&gt;, так это изощрённость ошибок. Была &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/928757&quot; rel=&quot;nofollow&quot;&gt;ошибка, которая искажала голос&lt;/a&gt; так, что он был похож на голос &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%94%D0%B0%D1%80%D1%82_%D0%92%D0%B5%D0%B9%D0%B4%D0%B5%D1%80&quot; rel=&quot;nofollow&quot;&gt;Дарта Вейдера&lt;/a&gt;. Есть ошибка, готорая превращает голос в музыку. И неплохие мелодии получаются. Никогда бы не подумал, что такие эффекты могут возникнуть в результате ошибок.</description>
  <comments>http://beroal.livejournal.com/39322.html</comments>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/38978.html</guid>
  <pubDate>Thu, 22 Dec 2011 16:31:18 GMT</pubDate>
  <title>радость Firefox-а</title>
  <link>http://beroal.livejournal.com/38978.html</link>
  <description>&lt;a href=&quot;http://theunfocused.net/2011/11/19/solving-firefoxs-add-on-compatibility-problem/&quot; rel=&quot;nofollow&quot;&gt;Расширения для Firefox будут по умолчанию совместимы с новыми версиями Firefox.&lt;/a&gt; Прогрессивные силы человечества одержали верх над тёмными силами реакции! Ура, товарищи!&lt;br /&gt;&lt;br /&gt;По теме: &lt;a href=&quot;http://beroal.livejournal.com/37332.html&quot; rel=&quot;nofollow&quot;&gt;жалобы на Firefox&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/38978.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/38746.html</guid>
  <pubDate>Tue, 13 Dec 2011 11:36:22 GMT</pubDate>
  <title>софизмы-синонимы</title>
  <link>http://beroal.livejournal.com/38746.html</link>
  <description>Из разговора родился следующий ряд софизмов:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;laquo;Пёс&amp;raquo; и &amp;laquo;dog&amp;raquo; &amp;mdash; это разные животные, потому что их названия звучат по-разному.&lt;/li&gt;&lt;li&gt;Ньютон изучал притяжение Земли к Солнцу или притяжение Солнца к Земле?&lt;/li&gt;&lt;li&gt;Join-semilattice и meet-semilattice &amp;mdash; это абсолютно разные вещи.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;А вы можете придумать изречение такого же рода?</description>
  <comments>http://beroal.livejournal.com/38746.html</comments>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>14</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/38510.html</guid>
  <pubDate>Sun, 20 Nov 2011 18:01:47 GMT</pubDate>
  <title>правильные названия книг по математике</title>
  <link>http://beroal.livejournal.com/38510.html</link>
  <description>Тайные знания древних цивилизаций о математическом анализе.&lt;br /&gt;Духовный математический анализ. Раскрытие своих сверхспособностей.&lt;br /&gt;Математический анализ под знаком индиго.&lt;br /&gt;Чудотворный и исцеляющий математический анализ.&lt;br /&gt;Математический анализ в родовых поместьях.&lt;br /&gt;Русская доктрина математического анализа.&lt;br /&gt;Кто на самом убил Каддафи? Математический анализ.&lt;br /&gt;Добейся счастья и успеха с помощью математического анализа.&lt;br /&gt;Обольщение силой математического анализа.&lt;br /&gt;Математический анализ — путь к бессмертию.&lt;br /&gt;Люби себя — говорит математический анализ.&lt;br /&gt;Как перестать беспокоиться и начать математический анализ.&lt;br /&gt;Как быть счастливым с математическим анализом.&lt;br /&gt;Чайка по имени Математический Анализ.&lt;br /&gt;Особенности национального математического анализа.&lt;br /&gt;Застольные шутки и песни о математическом анализе.&lt;br /&gt;Математический анализ учит рисовать мангу.&lt;br /&gt;Прикольный математический анализ для девочек. (Раскраски, одевалки, блестяшки, макияж, кулинария, декор.)&lt;br /&gt;Готовим здоровую пищу с математическим анализом.&lt;br /&gt;1001 рецепт математического анализа.&lt;br /&gt;Математический анализ своими руками.&lt;br /&gt;Зарабатывай на Forex прямо сейчас с помощью математического анализа.&lt;br /&gt;Математический анализ за t времени, где t стремится к нулю.&lt;br /&gt;Легенды и мифы математического анализа. Увлекательный мир богов и героев. (С цветными иллюстрациями.)&lt;br /&gt;Математический анализ в стихах. Считалочки.&lt;br /&gt;Математический анализ спешит на помощь.&lt;br /&gt;Фридрих Ницше. Так говорил Фихтенгольц.&lt;br /&gt;Перерождение Фурье.&lt;br /&gt;&lt;br /&gt;P.&amp;nbsp;S. Доказано, что данная последовательность бесконечна.</description>
  <comments>http://beroal.livejournal.com/38510.html</comments>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/38259.html</guid>
  <pubDate>Fri, 04 Nov 2011 02:17:36 GMT</pubDate>
  <title>Майкл Фрэнсис Атия. Как выполняется исследование</title>
  <link>http://beroal.livejournal.com/38259.html</link>
  <description>Опубликован перевод статьи &lt;a href=&quot;http://www.beroal.in.ua/article/atiyah_research/index.html&quot; rel=&quot;nofollow&quot;&gt;«Майкл Фрэнсис Атия. Как выполняется исследование»&lt;/a&gt;.</description>
  <comments>http://beroal.livejournal.com/38259.html</comments>
  <category>writer&apos;s block</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/38107.html</guid>
  <pubDate>Sat, 29 Oct 2011 03:36:48 GMT</pubDate>
  <title>искусство мыслить</title>
  <link>http://beroal.livejournal.com/38107.html</link>
  <description>Человек, который ни разу в жизни не придумал самостоятельно математическое доказательство, не имеет морального права учить абстрактно мыслить. Потому что как можно учить тому, что сам не умеешь делать?</description>
  <comments>http://beroal.livejournal.com/38107.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/37807.html</guid>
  <pubDate>Thu, 13 Oct 2011 14:29:43 GMT</pubDate>
  <title>lets number them from the last one</title>
  <link>http://beroal.livejournal.com/37807.html</link>
  <description>Stereotypes are treacherous. They suggest you the “right” decision in such a way that you forget that you ever had a choice. They look comfortable now just to make your life awful later. Here I will talk about numbering/indexing of list elements. (Not about numbering of array elements starting from &lt;code&gt;1&lt;/code&gt;. That discussion is only good for making fun of it.)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;base.Data.List.(!!)&lt;/code&gt; provides the standard numbering that I got used to: the head of any list has index &lt;code&gt;0&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;The numbering above provides the isomorphism between the set of lists of length &lt;code&gt;n&lt;/code&gt; with elements in &lt;code&gt;value&lt;/code&gt; and the set of functions of type &lt;code&gt;ix→value&lt;/code&gt;, where &lt;code&gt;ix = {m∈ℕ|m&amp;lt;n}&lt;/code&gt;. For a list of length &lt;code&gt;n+1&lt;/code&gt; we have &lt;code&gt;ix = {m∈ℕ|m&amp;lt;n+1} = {m∈ℕ|m≤n}&lt;/code&gt;. When we apply &lt;code&gt;tail&lt;/code&gt; to the list of length &lt;code&gt;n+1&lt;/code&gt;, the head of the list disappears and the index &lt;code&gt;n&lt;/code&gt; disappears from &lt;code&gt;ix&lt;/code&gt;. Therefore, the head has index &lt;code&gt;n&lt;/code&gt;. Consequently, the last element has index &lt;code&gt;0&lt;/code&gt;. This is not a &lt;strong&gt;joke&lt;/strong&gt;. This is &lt;code&gt;base.Data.List.(!!)&lt;/code&gt; reverted.&lt;br /&gt;&lt;br /&gt;And when my numbering is more useful than the standard one? &lt;strong&gt;Example.&lt;/strong&gt; I want to implement &lt;code&gt;xs::[a]&lt;/code&gt; as &lt;code&gt;ys::[Array64 a]&lt;/code&gt;, where &lt;code&gt;Array64 a&lt;/code&gt; denotes an array of length &lt;code&gt;64&lt;/code&gt; with elements in &lt;code&gt;a&lt;/code&gt;. With the standard numbering every element of &lt;code&gt;xs&lt;/code&gt; at index &lt;code&gt;i&lt;/code&gt; corresponds to the element at index &lt;code&gt;r&lt;/code&gt; of the element at index &lt;code&gt;q&lt;/code&gt; of &lt;code&gt;ys&lt;/code&gt; where &lt;code&gt;(q, r)==i `divMod` 64&lt;/code&gt;. After we apply &lt;code&gt;tail&lt;/code&gt; to &lt;code&gt;xs&lt;/code&gt; (this amounts to wiping some element of the head of &lt;code&gt;ys&lt;/code&gt;, set it to e.g. &lt;code&gt;undefined&lt;/code&gt;), this correspondence changes to &lt;code&gt;(q, r)==(i+1) `divMod` 64&lt;/code&gt;. Applying &lt;code&gt;tail&lt;/code&gt; further, it changes to &lt;code&gt;(i+2) `divMod` 64, (i+3) `divMod` 64, … (i+63) `divMod` 64, i `divMod` 64&lt;/code&gt; again. Huh, very nice. In contrast, my numbering provides the correspondence which is stable.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/37807.html</comments>
  <category>haskell</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://beroal.livejournal.com/37574.html</guid>
  <pubDate>Wed, 12 Oct 2011 19:33:38 GMT</pubDate>
  <title>intersecting boxes</title>
  <link>http://beroal.livejournal.com/37574.html</link>
  <description>This paragraph appears on the &lt;a href=&quot;http://hackage.haskell.org/package/groupoid&quot; rel=&quot;nofollow&quot;&gt;page of some Hackage library&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;In geometry, bounding boxes (represented as two points - bottom-left corner and top-right corner) give an example where a groupoid may be more satisfying than a monoid. The union operation on bounding boxes is essential to track the extent of shapes after their superimposition. To fit bounding box union into the Monoid typeclass one can do a clever trick representing mempty with the bottom-left corner at positive infinity and the top-right corner at negative infinity, the standard implementation of union which uses min and max will still proceed to identify the extreme corners correctly.&lt;/blockquote&gt;&lt;br /&gt;This not only shows a good example of a semigroup which is not a monoid, but reminds me of a trick I used to add neutral element to this semigroup. First, I describe the evident trick. Second, I describe the trick I used.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;I will talk about intersection of boxes and not union. A union of boxes (regarded as sets of points) may be not a box. So they actually find the &lt;a href=&quot;http://en.wikipedia.org/wiki/Supremum&quot; rel=&quot;nofollow&quot;&gt;supremum&lt;/a&gt; of boxes. Not the supremum of corresponding sets of points, of course. The supremum of subsets is the union of those subsets. However, this is not important here. So I will stick to intersection.&lt;br /&gt;&lt;br /&gt;A box is a &lt;strong&gt;multidimensional interval&lt;/strong&gt;, i.e. it assigns an interval for every dimension. Operations on multidimensional intervals are done &lt;a href=&quot;http://en.wikipedia.org/wiki/Pointwise#Pointwise_operations&quot; rel=&quot;nofollow&quot;&gt;pointwise&lt;/a&gt;. Therefore I only talk about (ordinary) intervals in the following. The greater bound of the intersection of intervals is equal to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Infimum&quot; rel=&quot;nofollow&quot;&gt;infimum&lt;/a&gt; of greater bounds of those intervals. The lesser bound of the intersection of intervals is equal to the supremum of greater bounds of those intervals. Because we consider intervals of integer/rational/real numers (&lt;a href=&quot;http://en.wikipedia.org/wiki/Total_order&quot; rel=&quot;nofollow&quot;&gt;total orders&lt;/a&gt;) and we consider finite intersections, infimum can be replaced with least element and supremum can be replaced with greatest element. All infima and suprema below are assumed to be finite.&lt;br /&gt;&lt;br /&gt;Finite infimum comprise a &lt;a href=&quot;http://en.wikipedia.org/wiki/Commutative_property#Mathematical_definitions&quot; rel=&quot;nofollow&quot;&gt;commutative&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Idempotence#Binary_operation&quot; rel=&quot;nofollow&quot;&gt;idempotent&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Semigroup&quot; rel=&quot;nofollow&quot;&gt;semigroup&lt;/a&gt;. As well as supremum. All aforementioned total orders has no &lt;a href=&quot;http://en.wikipedia.org/wiki/Neutral_element&quot; rel=&quot;nofollow&quot;&gt;neutral element&lt;/a&gt; of infimum and supremum. Because if a &lt;a href=&quot;http://en.wikipedia.org/wiki/Partially_ordered_set&quot; rel=&quot;nofollow&quot;&gt;partial order&lt;/a&gt; &lt;code&gt;⊆&lt;/code&gt; has a neutral element &lt;code&gt;x&lt;/code&gt; with respect to infimum, then &lt;code&gt;x&lt;/code&gt; is the greatest element of &lt;code&gt;⊆&lt;/code&gt;. None of the aforementioned total orders has the least element or the greatest element.&lt;br /&gt;&lt;br /&gt;We can use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Free_functor&quot; rel=&quot;nofollow&quot;&gt;free functor&lt;/a&gt; from the category of semigroups to the category of monoids to turn a semigroup into a &lt;a href=&quot;http://en.wikipedia.org/wiki/Monoid&quot; rel=&quot;nofollow&quot;&gt;monoid&lt;/a&gt;. This functor just adds 1 element to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Algebraic_structure&quot; rel=&quot;nofollow&quot;&gt;carrier&lt;/a&gt; and extends the 2-ary operation. This can be implemented by &lt;code&gt;Maybe&lt;/code&gt; in Haskell or &lt;code&gt;option&lt;/code&gt; in ML. The &lt;code&gt;instance Monoid (Maybe a)&lt;/code&gt; gives this monoid. This not only extends the set of boxes with a “neutral” box, but also with boxes which are unbounded in some dimension at some side of the interval.&lt;br /&gt;&lt;br /&gt;And here is another way. Lets call &lt;code&gt;sg&lt;/code&gt; this semigroup of infimum. Let &lt;code&gt;h&lt;/code&gt; be the 2-ary operation of &lt;code&gt;sg&lt;/code&gt;, &lt;strong&gt;curried&lt;/strong&gt;. Then &lt;code&gt;h : carrier(sg)→carrier(sg)→carrier(sg)&lt;/code&gt; and &lt;code&gt;h(x)=(x∩)&lt;/code&gt;. In words, &lt;code&gt;h(x)&lt;/code&gt; is the function which intersects its argument with &lt;code&gt;x&lt;/code&gt;. &lt;code&gt;h&lt;/code&gt; is a &lt;a href=&quot;http://en.wikipedia.org/wiki/Homomorphism&quot; rel=&quot;nofollow&quot;&gt;homomorphism&lt;/a&gt; from &lt;code&gt;sg&lt;/code&gt; to the monoid of endofunctions (the &lt;a href=&quot;http://en.wikipedia.org/wiki/Full_transformation_monoid&quot; rel=&quot;nofollow&quot;&gt;full transformation monoid&lt;/a&gt;) on &lt;code&gt;carrier(sg)&lt;/code&gt; (like in &lt;a href=&quot;http://en.wikipedia.org/wiki/Cayley%27s_theorem&quot; rel=&quot;nofollow&quot;&gt;Cayley&apos;s theorem&lt;/a&gt;). &lt;code&gt;h&lt;/code&gt; is also a &lt;a href=&quot;http://en.wikipedia.org/wiki/Monomorphism&quot; rel=&quot;nofollow&quot;&gt;monomorphism&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;Proof.&lt;/strong&gt; For all &lt;code&gt;x, y&lt;/code&gt;, if &lt;code&gt;(x∩)=(y∩)&lt;/code&gt;, then &lt;code&gt;(x∩x)=(y∩x) ∧ (x∩y)=(y∩y)&lt;/code&gt;. Because &lt;code&gt;sg&lt;/code&gt; is idempotent and commutative, &lt;code&gt;x=(x∩x)=(y∩x)=(x∩y)=(y∩y)=y&lt;/code&gt;. Therefore this is an &lt;a href=&quot;http://en.wikipedia.org/wiki/Injective_function&quot; rel=&quot;nofollow&quot;&gt;injection&lt;/a&gt;. &lt;strong&gt;Qed.&lt;/strong&gt;&lt;/blockquote&gt;&lt;br /&gt;So, &lt;code&gt;x∈carrier(sg)&lt;/code&gt; can be encoded by &lt;code&gt;h(x)&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;This encoding supports unbounded boxes. It can be actually implemented in programming languages, but only in &lt;strong&gt;functional&lt;/strong&gt; ones because &lt;code&gt;h(x)&lt;/code&gt; is a function. The hard part is decoding. I did not wrote a decoding function because I did not need one. I needed only those parts of intervals which fit into the screen, and I obtained those parts by &lt;code&gt;h(x)(screen)&lt;/code&gt;, where &lt;code&gt;screen&lt;/code&gt; is some parameter of the screen (a lesser/greater bound of some interval of the screen). The screen is also a box, you know.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>http://beroal.livejournal.com/37574.html</comments>
  <category>haskell</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
</channel>
</rss>
