Журнал полосатого кренделя

16 ноября 2008

17:14 — Структура компьютерной сети отражает природу человека

Проделаем небольшое мысленное упражнение. Возьмём систему тонких тел Елены Блаватской, которая, как известно, состоит из семи уровней, и сопоставим её с семиуровневой сетевой моделью OSI. Первое описывает один из распространённых взглядов на устройство человека, второе — на устройство протокола в компьютерной сети. Что между ними общего? Начнём с низменного.

Читайте дальше и комментируйте в сообществе [info]ru_demagogy.
Метки: , ,

20 июля 2008

0:27 — Минимум необходимого

Как известно, население планеты растёт, а общая сумма IQ остаётся постоянной. То же и с пользователями интернета. По мере того, как число пользователей в мире растёт, средний коэффициент интеллекта катастрофически падает, и программному обеспечению приходится адаптироваться. Продолжим тенденцию в будущее и представим себе, каким будет веб-браузер, скажем, 2030 года. Если вы оптимист, можете увеличить эту цифру, если пессимист — уменьшить.

Иллюстрация (310 Кб) )

После многочисленных преобразований, направленных на повышение дружественности интерфейса, браузер стал таким простым, как только возможно. В нём нет меню (ни главного, ни контекстных), нет панелей инструментов со множеством кнопок, нет боковых панелей, строки состояния, диалоговых окон для настройки. Всего этого большинство пользователей всё равно не понимало, а излишняя сложность отпугивала несчастного Джо от компьютеров. Браузер будущего вряд ли будет уметь десятую часть того, что умеет нынешний, зато пользоваться им наконец-то смогут все. Что касается оформления, то тени и скруглённые углы по-прежнему будут в моде. Благодаря отсутствию в интерфейсе слов браузер не нуждается в переводе на всевозможные языки.

Браузер поставляется с операционной системой, а та поставляется с компьютером. Причин что-нибудь менять у обычного пользователя не бывает, поэтому единственный выбор среди конкурирующих продуктов он делает при покупке компьютера, а уж этот выбор определяет и операционную систему, и браузер. У браузера нет даже своего названия, поскольку он не является самостоятельно продвигаемым продуктом. У окна браузера нет строки заголовка, потому что название программы никого не интересует. Единственная кнопка, относящаяся к самому окну, — красная кнопка закрытия, да и та выглядит лишней. У окна всегда стандартные размеры, под которые и делаются веб-страницы. Сохранение страниц и изображений и открытие локальных файлов осуществляется перетаскиванием между браузером и менеджером файлов, печать — перетаскиванием на принтер.

В верхней части окна находится комбинированное поле, совместившее в себе функции адресной строки, индикатора безопасности, заголовка окна и поля поиска. URL — это техническая информация, которая пользователя не интересует; важно только, на каком сайте и на какой странице он находится. Название сайта автоматически верифицируется посредством сертификата. Единственная индикация безопасности — цвет этой строки: зелёный, если всё хорошо, красный, если плохо. Пользователь не обязан разбираться в таких тонкостях, как SSL или доменные имена, поэтому судить о том, достаточно ли безопасна страница, приходится браузеру. Если ситуация небезопасная, то в красный цвет окрашивается и основное поле окна, потому что иначе внимания пользователя не привлечь. При щелчке мышью на этой строке она становится белой и очищается, и в ней можно печатать. Вводимый текст всегда ищется в поисковой системе (в той, с которой договорился производитель браузера). Если какой-то чудак всё-таки введёт по старой памяти URL, это сработает.

Слева от комбинированного поля находится кнопка «Назад». При таких размерах её несложно найти. Справа — кнопка, меняющая свои функции. Обычно это «Обновить», но во время загрузки она превращается в красную «Стоп» (знак «кирпич»), а во время ввода текста для поиска — в кнопку «Перейти» (зелёная стрелка вправо). Индикатора хода загрузки нет. Вместо этого, пока идёт загрузка, недогруженный документ вообще не показывается, а вместо него в основном поле появляется анимация «идёт загрузка». Недогруженные документы лучше не показывать, потому что их странное поведение смущает пользователя. К счастью, благодаря технологиям будущего, долгая загрузка будет делом исключительным. Полос прокрутки тоже нет, для прокрутки достаточно перетащить мышью любое место документа, не являющееся ссылкой. Чтобы найти текст внутри текущей страницы, нужно просто начать его набирать.

В нижней части окна находятся восемь гнёзд, заменяющих табы и закладки. Технически они ближе к табам: каждое из восьми гнёзд является как бы отдельным окном браузера с собственной историей перехода по страницам. Щелчок по гнезду выбирает его, перетаскивание изменяет порядок, перетаскивание ссылки на неактивное гнездо открывает ссылку в указанном гнезде. Активное гнездо выделено рамкой и формой самой рабочей области в виде стрелочки. Гнёзд всегда ровно восемь, нельзя ни добавить, ни убрать. Обычному пользователю больше восьми не нужно, а интерфейс для добавления, удаления и прокрутки внёс бы лишнюю сложность. При первом запуске гнёзда заполнены рекомендуемыми популярными сайтами, а при каждом следующем сохраняют своё содержимое и историю переходов. Таким образом, они заменяют и закладки: часто используемый сайт можно просто всегда держать в одном из гнёзд.

Пользователю будущего картинки куда милее слов, поэтому в гнёздах отображаются логотипы сайтов. Для старых сайтов применяются эвристики для определения, где на странице логотип, а современные смогут воспользоваться новым API. Этот API позволит странице сообщать браузеру, что именно нужно показывать в гнезде, и даже изменять это содержимое динамически. На иллюстрации Google показывает строку поиска и число найденных страниц, LiveJournal — имя пользователя, чей журнал открыт, а Gmail — число непрочитанных сообщений, причём последнее обновляется даже в неактивном гнезде.

Что касается доли процента пользователей, которым этой функциональности не хватает, то они будут составлять сообщество, всё более отдаляющееся от массового рынка. Там будут свои браузеры и свои операционные системы. Некоторые из тех, кто разрабатывает веб-сервисы для массового рынка, будут принадлежать к этому сообществу, но большинство веб-мастеров станут пользоваться визуальными средствами быстрой разработки, по духу близких к «народному» браузеру.

В заключение — опрос. Переводы в скобках даны для тех, кто читал английскую версию этой записи. Пожалуйста, не голосуйте, если не прочли статью целиком.

Опрос #1226287 Браузер будущего (Browser of the future)
Открыт: Всем, подробные результаты видны: Всем, участников: 72

Сбудется ли мой прогноз? (Do you think my forecast will come true?)

Показать ответы

Да, непременно. (Yes, definitely.)
7 (9.7%)

Скорее всего. (Most likely.)
31 (43.1%)

Вряд ли. (Hardly.)
25 (34.7%)

Нет, исключено. (No, it's impossible.)
9 (12.5%)

В каком году наиболее вероятно исполнение прогноза? Не заполняйте, если считаете, что он не сбудется. (In what year is it most likely to come true? Skip if you think it won't come true.)

Показать ответы
Среднее 2025.92 Медиана: 2020 СКО: 16.03
2010 10 (20.4%)
2020 22 (44.9%)
2030 5 (10.2%)
2040 7 (14.3%)
2050 4 (8.2%)
2060 0 (0.0%)
2070 0 (0.0%)
2080 0 (0.0%)
2090 0 (0.0%)
2100 1 (2.0%)

Что из перечисленного, по-вашему, никогда не исчезнет из интерфейса браузеров? (Which items do you think will never disappear from the user interface of web browsers?)

Показать ответы

URL в адресной строке. (URL in address bar.)
34 (49.3%)

Закладки. (Bookmarks.)
37 (53.6%)

Переменное число табов. (Variable number of tabs.)
26 (37.7%)

Отдельное поле поиска. (Separate search field.)
12 (17.4%)

Индикаторы безопасности. (Security indicators.)
19 (27.5%)

Строка заголовка окна. (Window title bar.)
16 (23.2%)

Меню. (Menus.)
18 (26.1%)

Настройки. (Settings.)
30 (43.5%)

Переменные размеры окна. (Changeable window size.)
36 (52.2%)

Полосы прокрутки. (Scrollbars.)
36 (52.2%)

Индикаторы хода работы. (Progress indicators.)
18 (26.1%)

Отображение недогруженных документов. (Rendering of incompletely loaded documents.)
9 (13.0%)

Кнопка «Вперёд». (Forward button.)
16 (23.2%)

Кнопка «Домой». (Home button.)
14 (20.3%)


In English: Barest Necessity
Метки: , , ,
(92 комментария) (Оставить комментарий)

12 мая 2008

18:00 — Ворчание о дружественности

Жило-было программное средство, никого не трогало, на массовый рынок не зарилось, а довольствовалось полупроцентом постоянных пользователей. Те, в свою очередь, были более или менее довольны программой; большинство из них пользовались ею с давних версий и выработало свои подходы, привычки и удобные для себя настройки. Многим пользователям нравилось, что программа отличается от своих конкурентов, что некоторые подходы, реализованные в ней, особенные и не имеют аналогов. Но даже если бы конкуренты реализовали все те же подходы и возможности, такой пользователь вряд ли совершил бы переход, потому что тонко настроить альтернативную программу под свои давние привычки, чтобы достигнуть того же уровня комфорта, — долго и не всегда в полной мере возможно.

И вот, в какой то момент производителя программы перестаёт устраивать верная, но немногочисленная пользовательская база. Производитель недоумевает: наш продукт почти во всех отношениях лучше, чем у конкурентов, а пользователей у нас меньше процента. Почему же? Начинают выяснять, проводят исследования, и оказывается, что большинство пользователей конкурирующих продуктов считают эту программу слишком сложной в использовании и в настройке, и вообще рассчитанной не на обычного пользователя, а скорее на технического специалиста.

Ой, говорит производитель. Мы-то и не думали рассчитывать на каких-то там специалистов! Как же так получается, что пользователей наша программа отпугивает? Надо нам поработать над интерфейсом, а то мы всё только над функциями да над функциями. У нашей программы должен быть дружественный интерфейс! К обычному пользователю, стало быть, дружественный, то есть к тому самому, который до сих пор пользовался продуктами конкурентов, а нашего побаивался. А поскольку дружественный интерфейс, очевидно, у тех, кто этих пользователей сумел привлечь, то у конкурентов и надо учиться.

Проходит необычо долгий для производителя промежуток между релизами. И вот постоянный пользователь, уверенный, что уж он-то, верный программе с версии, скажем, 2.0 для MS-DOS, и есть самый обычный, устанавливает себе новую версию, скажем, X, как теперь модно обозначать 10.0. Вот что он обнаруживает:

Это, конечно, крайний, доведённый до абсурда случай. Всё перечисленное едва ли когда-нибудь случается одновременно, да и сам процесс придания интерфейсу дружественности обычно бывает растянут на несколько выпусков программы.

Я не имею в виду какую-то одну конкретную программу. Такое случалось на моей памяти с разными программными продуктами, в разной степени. Примеров приводить не буду, чтобы не провоцировать войны в комментариях. Не знаю, помогало ли это производителям переманить часть «обычных пользователей» у конкурентов, но у тех, кто пользовался программой издавна, уж точно появлялась серьёзная причина попробовать альтернативы, раз уж любимая программа всё равно не та, что была раньше. Оказавшись в числе таких пользователей, я всякий раз чувствовал себя обиженным тем, что производитель хвастался обновлённым интерфейсом, дружественным к пользователю. Если всё это ради пользователя, то кто тогда я?

In English: A Rant on Friendliness
Метки: ,
(19 комментариев) (Оставить комментарий)

5 апреля 2006

14:29 — Перл

Найдена стационарная точка1 функции MD5(). Ею оказался скрипт на языке Perl неизвестного автора.

1Такая точка x, для которой MD5(x) = x.
Метки: ,
(16 комментариев) (Оставить комментарий)

9:57 — Что случилось с оформлением моего журнала?

Сегодня, 5 апреля, в моём журнале нет таблицы стилей (CSS) — только голый HTML. Подробнее об акции «Ежегодный день раздевания», инициированной организацией Web Standards, читайте на сайте
Annual CSS Naked Day
(на английском языке).
Метки: ,
(0 комментариев) (Оставить комментарий)

15 ноября 2005

21:26 — Последовательности для эскапистов

Если запустить ssh и установить соединение с удалённым компьютером, возникает иллюзия, что сидишь непосредственно за её монитором и клавиатурой. Но эту иллюзию легко отличить от действительности: как правило, об этом будет свидетельствовать заголовок консольного окна и, самое главное, существует множество способов «оторваться» от удалённой клавиатуры и перейти к управлению собственным, локальным компьютером. Один из них — завершить сеанс работы с удалённым сервером командой logout. Но всегда есть и другие способы — вдруг удалённый компьютер «завис», и нет возможности набрать logout? Для ssh, к примеру, для принудительного отключения достаточно набрать с новой строки последовательность символов ~. (тильда, затем точка). Эта последовательность, вместе с несколькими другими, является escape-последовательностью, интерпретируемой особым образом. Это важно: любые символы передаются на удалённый компьютер «как есть», а escape-последовательность обрабатывается самим средством коммуникации и никогда не доходит до удалённого сервера. Если всё-таки нужно набрать именно эту последовательность на удалённой «клавиатуре», для этого есть другая последовательность: удвоенная тильда передаёт одинарную тильду. Всё это означает, что «в районе тильды» прозрачность ssh нарушается, и иллюзия нахождения за консолью удалённого компьютера уже неполна.

Сеанс ssh, конечно, даёт довольно слабую иллюзию. Куда натуральнее выглядит соединение с удалённым компьютером по протоколам VNC, Remote Desktop и аналогичным. При этом можно работать с графическим интерфейсом удалённого компьютера, а в некоторых подобных системах — и слышать звук, выводимый удалёнными программами. Если перейти в полноэкранный режим, иллюзия становится почти полной… но основные свойства остаются неизменными: непременно есть хотя бы одна escape-последовательность (по меньшей мере, для разрыва соединения), которая не дойдёт до удалённого компьютера, а будет обработана средством коммуникации. Часто это бывает такая последовательность, которая, скорее всего, не встретится при нормальной работе, что-нибудь вроде Ctrl-Alt-Shift-Esc, так что случайно на неё не наткнуться. Поэтому тому, кто не знает об escape-последовательностях, приходится использовать «естественный» способ разрыва соединения, завершая сеанс связи средствами удалённой операционной системы. Но бывают, конечно, случаи, когда это невозможно.

Напрашивается очевидная аналогия с системами виртуальной реальности. Простейший вид виртуальной реальности — трёхмерное изображение на экране компьютера, например, в играх. Отличить его от настоящего проще простого: достаточно посмотреть вокруг. Escape-последовательности, как правило, очевидны. Шлем виртуальной реальности создаёт гораздо лучшую иллюзию, особенно в сочетании с сенсорными перчатками и прочими датчиками, считывающими положение тела. Тем не менее, и такую имитацию легко распознать, а escape-последовательностью является, например, снимание шлема. А если пойти дальше? Если система будет имитировать и объёмное изображение, и звук, и вкус, и запах, и положение тела в пространстве, да настолько натурально, что не отличить от настоящего? Какими тогда должны быть escape-последовательности?

Во-первых, это должны быть редкие последовательности, такие, которые не сделать случайно. Иначе мы наблюдали бы внезапно замирающих или исчезающих людей, которые всего лишь хотели, к примеру, почесать пятку. Во-вторых, эти последовательности должны быть доступны во всех ситуациях, в том числе, когда движения тела сильно ограничены, или когда некоторые части тела отсутствуют — ведь именно в этих случаях скорее может потребоваться выйти из этого мира. А уж куда таким путём можно вернуться, мы все узнаем, даже если никогда не найдём потайных escape-последовательностей: выйти отсюда естественным путём, с помощью logout, рано или поздно доведётся каждому.

In English: Escapist Sequences
Метки: ,
(52 комментария) (Оставить комментарий)

10 октября 2005

22:39 — Полный назад!

Кто ни разу не играл в стратегические компьютерные игры? Даже те, кто не относят себя к любителям этого жанра, знают, что все стратегические игры моделируют развитие. От первобытнообщинного строя к капитализму, от шалаша к небоскрёбу, от посёлка к мегаполису, от племени дикарей к сверхдержаве. На этом построены все стратегические игры, о которых я когда-либо слышал. По мере продвижения вперёд в этих играх усложняется инфраструктура, становятся доступными новые технические возможности, совершенствуется вооружение. В результате все стратегические игры сегодняшних дней — это, по сути дела, новые и новые реализации нескольких бессмертных прототипов, всякий раз лишь с новыми графическими и звуковыми эффектами. Среди этих прототипов Dune, Civilization, King's Bounty и несколько других. Пришло время для чего-то нового. Поэтому, как обычно, на правах завзятого дилетанта и графомана, спешу опубликовать свою идею для стратегической игры.

В отличие от традиционных стратегических игр, в новой игре целью будет не прогресс, а регресс. Как известно, прогресс не только полезен, но и вреден, и некоторые его горькие плоды нашему поколению уже приходится вкушать. Заглянем в будущее самым пессимистическим взглядом, на который только способны, и получим начальные условия для новой игры. Игроку вверяется в распоряжение страна, страдающая от всевозможных негативных последствий технического, экономического и социального прогресса. Не большая и не маленькая, обычная вымышленная страна с менталитетом западного типа. Экологическая ситуация в ней дрянь, генофонд неуклонно вырождается, здоровье нации угасает не по дням, а по часам, общество страдает от нищеты и безработицы, рождаемость стремительно падает. Без вмешательства игрока население страны полностью исчезнет примерно через век или два, что в масштабе игрового времени составит несколько часов. Исправить ситуацию может только постепенный отказ от достижений прогресса — вредного производства, пагубных технологий, нездорового образа жизни.

Каждое задание в игре начинается с новой начальной ситуации, более тяжёлой, чем предыдущая. В первом задании ситуация всего лишь слегка посложнее, чем сейчас есть в России. Дальше — хуже, и где-то поближе к концу люди живут в городах под стеклянными колпаками, за пределами которых воздух отравлен вредными производствами. Пешком они ходить разучились, поскольку с раннего детства привыкают к индивидуальным передвижным средствам. Без очков с гигантсткими линзами никто ничего не видит. Вся информация о человеке — от удостоверения личности до предпочитаемой разновидности синтетического мяса — хранятся в центральной базе данных, при отсутствии доступа к которой человек даже по-малому сходить не может. На то, чтобы завести ребёнка, решаются лишь немногие отважные пары, потому что здоровых детей не рождалось уже лет сто. Каждый ребёнок до 6–8 лет обычно живёт в больнице, где обычным делом стало начальное обучение — разумеется, при помощи компьютера. Увеличить рождаемость не поможет даже запрещение абортов и средств контрацепции, поскольку процветают развлекательные технологии для взрослых, заменяющие настоящий секс. Запрет заодно и этих средств, да и вообще любые запреты и чересчур крутые изменения могут привести к резкому учащению самоубийств, поскольку здоровой психики, как нетрудно догадаться, тоже днём с огнём не сыскать. В результате вновь страдает численность населения, так что простых и быстрых решений в игре нет. Наконец, на последнем уровне человек представляет собой мозг с системами жизнеобеспечения, подключённый к интернету, и то, возможно ли будет вообще пройти этот уровень, останется на совести разработчиков игры.

В начале каждого задания будет формулироваться цель, состоящая из нескольких условий. Для успешного выполнения задания нужно выполнить все условия. Одним из условий всегда будет добиться заданного уровня годового прироста населения (при том, что в начале задания всегда имеет место отрицательный прирост, то есть убыль). Другие условия различны на каждом уровне. Например, снизить уровень детской смертности до определённого порога; отказаться от радиоактивного производства; получить тысячу человек, которые умеют ходить пешком; или даже — на одном из последних уровней — получить одного ребёнка, рождённого естественным путём, без искусственного оплодотворения и инкубатора.

В распоряжении игрока — довольно обычный для стратегических игр набор инструментов. Можно строить и сносить сооружения; регулировать экономические параметры, например, налоги; организовывать экономические программы поощрения населения, удовлетворяющего заданным критериям, например, родителей, имеющих двух детей; в некоторых пределах изменять законодательство; поощрять или, наоборот, тормозить ту или иную научную, общественную и культурную деятельность; наконец (и это один из мощнейших инструментов), можно использовать развитые средства массовой информации, чтобы пропагандировать тот или иной образ мыслей и действий, влиять на предпочтения масс.

Один момент здесь настолько важен, что его следует повторить: в игре не может быть простых и быстрых решений, выигрышных стратегий. Скажем, нельзя разом убрать стеклянные колпаки, потому что воздух снаружи отравлен. Если остановить производство, отравляющее воздух, люди останутся без необходимых им ресурсов. Значит, нужно подготавливать альтернативу. Все переходы должны быть постепенными, любое радикальное решение приносит больше вреда, чем пользы. Одной из задач отдела контроля качества при тестировании такой игры должно быть отыскание выигрышных стратегий. Любой очень простой алгоритм, приводящий к выигрышу, должен считаться серьёзным недостатком, который следует устранять, скорее всего, путём регулирования весов различных факторов и взаимосвязей в игровой модели.

К сожалению, я почти уверен, что эта идея никогда не будет реализована. Едва ли какой-нибудь производитель компьютеных игр вдохновится этим (скорее всего, он даже не узнает). Но я бы с удовольствием сам в такую игру сыграл, хотя я и не любитель стратегических игр.

In English: Full Speed Astern!
Метки: ,
(65 комментариев) (Оставить комментарий)

20:14 — What's Web 2.0

Очень обнадёживающая статья.
What's Web 2.0 © Tim O'Reilly

Прошу прощения, язык — английский. Может быть, позже напишу по-русски основные положения.
Метки: , ,
(0 комментариев) (Оставить комментарий)

8 октября 2005

21:26 — Три уровня многомерного безумия

Когда программисту нечего делать, или ему просто хочется размять мозги, он начинает придумывать странные вещи. Например, эзотерические языки программирования.

Все наши скучные программы вопиюще одномерны. Память линейна, стек последователен, программа записывается в сериализованном виде. Даже то, что по своей природе двумерно, например, изображение на экране, для программной обработки сводится к линейным структурам. Идея вывести программирование за пределы одномерного пространства не нова и уже успела породить целое семейство эзотерических языков программирования, получивших, вслед за первым в своём роде языком Befunge, общее название fungeoids. Общей чертой этих языков является запись программы в виде двумерной матрицы, содержащей коды операций. Интерпретатор перемещается от ячейки к ячейке в одном из нескольких возможных направлений. Таким образом, цикл на языке Befunge может иметь весьма наглядный «циклический» внешний вид. В некоторых из этих языков запоминающие регистры изолированы от пространства, в котором хранится программа, и адресуются одномерными индексами. Другие имеют фон неймановскую архитектуру, то есть данные хранятся в той же двумерной памяти, что и код, что создаёт, помимо прочего, интересные возможности для написания самомодифицирующихся программ.

Вопросы о том, зачем всё это нужно, действительно ли кому-то нефиг делать, и обкурился ли автор лёгких наркотиков, непременно, уже возникли на языках читателей, так что придётся ответить, зачем всё это придумывается. Низачем. Попросту — для развлечения. Впрочем, спросите некоторых солидных учёных, занимающихся чистой математикой, зачем им нужно изучать такие объекты, как… не то, чтобы просто алгебра, и даже не алгебра алгебр, а прямо-таки алгебра n-го порядка, то есть алгебра алгебр алгебр… n раз. Думаю, их замысловатые ответы будут сводиться по смыслу примерно к следующему: «Так ведь это же интересно!» Вот и эзотерический язык программирования — это интересно. Это одновременно и оригинальная шутка, и замысловатая математическая абстракция для изучения, и головоломка. Доведение некоторой концепции до абсурда само по себе неплохое развлечение, поэтому сегодня мне взбрело в голову довести до абсурда идею многомерного программирования. Доводить до абсурда будем в три этапа. Я буду писать о двумерном случае, однако всё это нетрудно (?) обобщить на n-мерный случай.

Первый уровень. Собственно, на этом уровне обитают языки «программирования стрелочками» из семейства fungeoids. Память двумерна. В более интересных случаях память общая для кода и данных. На этом уровне в каждой ячейке двумерной памяти хранится обычное число, скажем, один байт. Будем называть единицу информации, хранимую в одной ячейке, словом, как и в традиционном программировании. В двумерной памяти уместна двумерная адресация ячеек, то есть адрес имеет вид (ij). Указатель на текущую инструкцию (IP) тоже имеет такой вид. Чаще всего фунгеоиды имеют возможность изменять направление, в котором перемещается этот указатель, на одну из четырёх сторон света, но для полноты по Тьюрингу это не обязательно — достаточно лишь одного направления и набора инструкций условного перехода на двумерный адрес. Впрочем, изменяемое направление выполнения кода — изюминка фунгеоидов, делающая программирование на них особенно непохожим на традиционное, и позволяющая записывать циклы кольцами, а линейные программы — спиралями. Двумерная стуктура памяти наталкивает на мысли о таких единицах измерения, как квадратные килобайты (Кб2), заставляет задуматься о действиях операционной системы, когда у неё запросили широкий блок памяти, а свободными остались только высокие и узкие области, и порождает интересную задачу о дефрагментации прямоугольных файлов в массовых запоминающих устройствах. Компилятор мог бы оптимизировать код не только по скорости, но и по площади, и даже отдельно по ширине или высоте, а хранение растровых изображений стало бы естественным, как никогда. Наконец, языки программирования можно описывать двумерными грамматиками в форме BNF2.

Второй уровень. В отличие от первого уровня, во множестве представленного фунгеоидами, надо сказать, что ничего такого, что могло бы относиться ко второму или третьему уровню, я не встречал. На втором уровне что-то странное делается с самими числами — это уже не простые байты, как на первом уровне, а комплексные числа. Адресация ячеек двумерной памяти становится естественной. Сложение и вычитание почти не отличаются от обычных операций, а вот умножение и деление становятся несколько сложнее; появляется и новая операция — комплексное сопряжение. Можно даже пойти дальше и решить, что в ячейках памяти содержатся двумерные массивы битов. Например, слово может состоять из 16 квадратных бит (4×4). Разумеется, это порождает множество новых арифметических операций. Так, при обычном сложении одномерных байтов перенос происходит в одном направлении — влево; при двумерном сложении переносы бывают и влево, и вверх. Это уже по меньшей мере два вида сложения и вычитания. Битовые сдвиги и циклические сдвиги возможны не в двух, а в четырёх направлениях, кроме того, появляются принципиально новые битовые операции — повороты и транспонирование. При умножении сдвиги происходят в двух направлениях. Правда, не вполне понятно, как интепретировать двумерное слово в качестве обычного числа для целей адресации и организации счётчиков. Что же касается передачи данных по каналам связи, то вместо двух вариантов порядка следования бит — little-endian и big-endian — будет восемь вполне равноценных способов сериализации слов.

Третий уровень. На третьем уровне абсурда двумерным становится время. Ну и что с того, что это не для нашей Вселенной? Нам интересна математическая модель. Момент времени описывается не одной, а двумя переменными (tu). В результате, для всякого момента времени есть не просто моменты, происходящие позже или раьше. По отношению к моменту (tu) одни моменты правее по времени, другие — ниже, а третьи — ниже и правее. Причинно-следственная связь распространяется в обоих направлениях, и происходящее в каждый момент времени определяется тем, что происходило левее, и тем, что происходило выше по времени. Тактовая частота процессора измеряется в квадратных герцах, а состояние машины на такте (tu) определяется её состояниями на тактах (t − 1, u) и (tu − 1). Программа, записанная в двумерной памяти, выполняется и по горизонтали, и по вертикали. На следующем по t такте процессор переходит к инструкции на ячейку правее предыдущей, а на следующем по u — на ячейку ниже. Бициклический алгоритм может иметь топологию тора. За одну квадратную секунду по каналу связи может быть передано определённое число квадратных же бит, поэтому скорость передачи данных измеряется традиционно — в битах в секунду. Тут уж и задача оптимизации алгоритма по скорости может быть уточнена — по какому именно измерению времени важнее ускорить.

Четвёртый уровень. Если кто-нибудь придумает ещё один, четвёртый уровень в дополнение к описанным трём, буду рад это обсудить, пока за нами обоими не пришли.

In English: Three Levels of Multidimensional Insanity
Метки: , ,
(44 комментария) (Оставить комментарий)

30 августа 2005

17:17 — Variadic templates (a proposal to C++ standard)

Родилась идея о том, как побороть давнюю проблему C++ и реализовать функции и шаблоны с переменным числом аргументов в классическом стиле C++. Отправил своё предложение в comp.lang.c++.moderated, а вот, для интересующихся, его копия.

Variadic templates (in English) )
Метки:
(4 комментария) (Оставить комментарий)

19 августа 2005

17:26 — Bug Reports of the New Millennium

Япония создает трехмерное ТВ, в котором можно понюхать и «потрогать» виртуальные объекты

А пока они создают, можно предположить, что кто-то ведь будет их разработки тестировать. И будут разработчики получать вереницу багов. Например, таких:

Bug #8654534: Roses in test scene 21 smell onion
Bug #8654535: Cannot feel window glass with fingertips
Bug #8654536: After sneezing, sound disappears
Bug #8654537: Toilet paper perceived as too heavy
Bug #8654538: When trying to drink from the faucet, water does not flow
Bug #8654539: [feature] Smell intensity adjustment needed
Bug #8654540: [security] Test scene 50 has holes in the floor
Bug #8654541: After switching scenes, smells from old scene persist
Bug #8654542: [release notes] Fragments of broken glass cause pain in fingers
Bug #8654543: Cannot tear paper by hand when there is writing on it
Bug #8654544: [feature] Vaporizing liquids must increase perceived humidity
Bug #8654545: Very low performance in scenes with multiple PVC layers
Bug #8654546: Can't feel electrcity by touching battery terminals with tongue
Bug #8654547: Stack overflow error in front of the mirror in test scene 44
Bug #8654548: Adding salt to water does not change its taste
Bug #8654549: Books on shelves in test scene 75 have wrong Cyrillic encoding
Bug #8654550: Debug warnings when clapping hands
Bug #8654551: [security] Non-admin can walk through brick walls
Bug #8654552: Segfault when trying to bite barbed wire
Bug #8654553: Snow in test scene 12 feels hot
Bug #8654554: [release notes] Jumping off a moving car causes a crash
Bug #8654555: Cannot eat more than one sandwich in test scene 64
Bug #8654556: All strings on the guitar in test scene 57 make the same sound
Bug #8654557: [top-bayan] Cannabis plant in test scene 18 is not real

In English: Bug Reports of the New Millennium
Метки: ,
(10 комментариев) (Оставить комментарий)

8 января 2005

16:54 — Инфляция номера версии

Opera Software не удержались. Так и чесались, видать, у менеджмента руки увеличить старший номер версии. Я следил за предварительными выпусками:

7.60 Preview 1 Build 793 (August 25, 2004)
7.60 Preview 2 Build 840 (October 26, 2004)
7.60 Preview 3 Build 862 (November 15, 2004)
7.60 Preview 4 Build 874 (December 3, 2004)
8.0 Beta 1 Build 913 (January 6, 2004)

Вообще, похоже, это закономерность: координаторы open source, как правило, подходят к изменению старшего номера версии очень консервативно, и большинство открытых продуктов вообще имеют в качестве первой цифры 0 или 1. Увеличивается эта цифра только тогда, когда или продукт переходит в стабильное состояние (после 0 становится 1), или половина кода переписана напрочь. Бывают, конечно, исключения: например, Emacs.

Коммерческие продукты с закрытым кодом, наоборот, как правило, обращаются со старшим номером версии весьма вольно. В основном, думаю, это происходит потому, что в коммерческих организациях выбором публичного номера версии занимаются не программисты, а менеджеры, и для них это не столько отражение значительности или характера изменений по сравнению с предыдущей версией, сколько маркетинговый рычаг, наряду с названием продукта, эмблемой и лозунгом. А с этой точки зрения, наверное, 8.0 смотрится красивее, чем 7.60 или, тем более, 7.60-preview4.874.

При этом возникает явление, которое я бы назвал «инфляцией номера версии»: если при взгляде на версию Apache 2.0 мне ясно: «Уууу, тут, наверное, пол-апача перелопатили», — то, значительные ли изменения в Corel DRAW 12, по номеру версии не определить. Так, например, Corel DRAW 11 содержал по сравнению с предыдущей версией нововведения, которые я бы назвал если не косметическими, то, по крайней мере, не более чем тривиальными. Причём инфляция бывает иногда столь значительна, что менеджерам иногда приходится увеличивать старший номер версии больше, чем на единицу, чтобы отразить, что изменения на этот раз ещё масштабнее. Так, например, произошло с Netscape и Winamp.

К чему я всё это? Да так, нашёл ещё одно подтверждение универсального принципа: Выделяя всё, не выделяешь ничего. Если выделить каждое слово в тексте жирным шрифтом, то непременно захочется самое-самое важное выделить жирным-прежирным. Если, давая любое задание подчинённым, вы говорите, что это должно быть готово вчера, то вам будет трудно объяснить, что вот это новое задание имеет более высокий приоритет, чем остальные. Других примеров существует масса, и, думаю, каждый без труда вспомнит ещё несколько. Просто я в данном случае несколько неожиданное проявление нашёл.

UPDATE: Вот, можно сказать, предельный случай агрессивного наращивания номера версии: полный отказ от использования публичных номеров версий, как это сделала Micro$oft, когда выпустила Windows 95 после Windows 3.11. А дальше уж понеслось. Ещё можно припомнить Pentium после 80486, но это уже из другой оперы всё-таки.
Метки: ,
Музыка: Roxette - Beautiful things
(16 комментариев) (Оставить комментарий)

15 декабря 2004

10:40

Гранулярность и, кхм, расчленённость юниксов приводит меня в восторг. Не удивлюсь, если окажется, что mplayer где-то внутри реализован через sed.
Метки: , ,
(2 комментария) (Оставить комментарий)

12 ноября 2004

11:36 — IT-аллегория: послесловие

Мою недавнюю IT-аллегорию легко прочесть двумя неправильными способами. Вернее, усмотреть в ней две идеи, которых я туда не вкладывал, и которые, в общем случае, я не считаю верными. А именно:
  1. Создавать универсальные инструменты, реализующие фундаментальные обобщения, — это неправильно. Следует изготавливать маленькие и простые инструменты, решающие конкретную задачу, и не более того.
  2. Изготавливать маленькие и простые инструменты, решающие конкретную задачу, и не более того, — это неправильно. Следует создавать универсальные инструменты, реализующие фундаментальные обобщения.
Ни то, ни другое, в целом, я не считаю универсально правильным подходом, да и не для того, чтобы продемонстрировать преимущество одного перед другим, писал я свой текст. Писал я его, чтобы выразить совсем другую мысль:
С этим утверждением вряд ли кто-то станет спорить, во всяком случае, оно куда менее спорное, чем второе утверждение, составляющее мою точку зрения:
Следствием этого утверждения является вывод о том, что разработка в условиях жёсткого временнóго прессинга вредит качеству продукта, хотя, возможно, и способствует (в случае коммерческого продукта) лучшему его продвижению на рынке.

In English: IT Allegory: Afterword
Метки:
(15 комментариев) (Оставить комментарий)

11 ноября 2004

15:34 — IT-аллегория

По долгу службы я занимаюсь разработкой инструментальных средств, далее в этом тексте — инструментов. Мне нравится моя работа, а больше всего нравится изобретать новые, универсальные инструменты, решающие целые классы задач.

Недавно начальник поручил мне разработать новую отвёртку )

In English: IT Allegory
Метки:
Музыка: J-J Goldman - Envole-moi
(30 комментариев) (Оставить комментарий)

18 октября 2004

18:34

Вы никогда не задумывались о том, какую траву курит создатель языка программирования C++ Бьерн Страуструп?
http://www.research.att.com/~bs/whitespace98.pdf
Метки: ,
Музыка: Aerosmith - Eat the rich
(13 комментариев) (Оставить комментарий)

6 октября 2004

9:14

Интересная уязвимость. Не дыра, не какое-нибудь там переполнение буфера, а просто ещё одна возможность, о которой не подумали. Такие уязвимости -- самые интересные.
http://www.livejournal.com/community/lj_dev/659112.html
Метки:
Музыка: Blur - Beetlebum
(12 комментариев) (Оставить комментарий)

1 октября 2004

14:13 — Не всякий баг вреден

В кои-то веки мне приснился сон, который нельзя с ходу назвать полной чушью. В принципе, события этого сна вполне могли бы происходить на самом деле.

Дело было так. Фирма X (конкретное название во сне не фигурировало) захватила здоровенный кусок рынка мобильных телефонов. Чуть ли не каждый второй телефон в стране был моделью Y этой фирмы. Была только одна позиция, по которой фирма X проигрывала конкурентам: Read more... )

In English: Not Every Bug is Bad
Метки: ,
Музыка: Avril Lavigne - Losing Grip
(21 комментарий) (Оставить комментарий)

21 сентября 2004

14:00 — You are in a Maze of Twenty Little Passages

В комплект GNU Emacs входит текстовая игра Dunnet в жанре Adventure — помните такие, где нужно читать описания комнат, где находишься, и набирать команды вроде put key in door? Если у вас есть Emacs, рекомендую поиграть. Это, скажу я вам, киберпанк.

Например, есть там одна комната, в которой стоит компьютер. На нём установлена... )

Там ещё много таких мест, впрочем. В общем, рекомендую.

PS: Оцените вот это изменение в CVS игры.

In English: You are in a Maze of Twenty Little Passages
Метки: ,
Музыка: All 4 One - Think You're The One For Me
(7 комментариев) (Оставить комментарий)

13 сентября 2004

10:38 — Островок цивилизации

Год с лишним назад я сетовал на первобытность российского рынка. Прошло время. За это время, надо признать, рынок стал цивилизованнее. Как ни странно, доля вопросов из упомянутого списка в SU.WIN32.PROG действительно стала меньше. Но самое главное — то, что я теперь работаю в таком месте, где ни один из пунктов топ-листа не актуален. Островок цивилизации, так сказать. Я доволен.
Метки: ,
Музыка: Mike Oldfield - Heaven's Open
(1 комментарий) (Оставить комментарий)

31 августа 2004

11:40

me->go(you) with "Hello" {
    me->tell(you, [sun->rise()]);
}
Метки: ,
Музыка: Roxette - Keep Me Waiting
(0 комментариев) (Оставить комментарий)

25 августа 2004

13:06

— Спорим, что этот скрипт можно написать в одну строку?
Любой скрипт можно написать в одну строку.
Метки: ,
(29 комментариев) (Оставить комментарий)

4 августа 2004

16:09

А вы знаете, откуда происходят названия little-endian и big-endian, обозначающие способы хранения многобайтовых чисел в памяти? Ну и откуда? )
Метки: ,
(3 комментария) (Оставить комментарий)

6 июля 2004

1:52 — Schedule Chicken and Other Things That Don't Happen Since the Re-Org

Everyone will just have to decide once and for all if the programmatic string property of a push-button should be called "Label," "Text," or "Value." The only parameters given to the Task Force are that it keeps its final slide deck down to under 110 slides, and that it covers the strategic implications of its recommendations. The last such Task Force meeting I attended made Carroll's Caucus Run look sane. Even though the final report is due in two years, most seemed happy with the compromise solution: "__szlpstrLabTxtValEx2."

И много других забавных внутренних приколов из Microsoft.
http://msdn.microsoft.com/library/en-us/dnstone/html/stone041999.asp
Метки: , ,
(2 комментария) (Оставить комментарий)

26 мая 2004

0:26 — Трёхмерные запоминающие устройства как область применения четырёхмерного МКЭ

[info]feldgendler: Надо начать акцЫю: бесполезные научные работы. То есть, теоретические (и практические) исследования, обладающие всеми признаками научной работы, кроме полезности. Первая идея у нас уже есть: четырёхмерный МКЭ. А я сейчас придумал ещё одно (музыкой навеяло): двумерные формальные грамматики. Типа, у двумерных текстовых строк есть не только длина, но и высота, и для таких строк можно задавать грамматики, ввести свой аналог БНФ, регулярных выражений, разработать технологию парсинга.
И понеслось... )

UPDATE: Ах да, забыл. Ссылка по теме.
Метки: , ,
Настроение: озорство озорство
(2 комментария) (Оставить комментарий)

18 марта 2004

10:44 — Рекомендации по подъёму производительности

Я занимаюсь проектированием архитектуры для системы учёта рабочего времени сотрудников на предприятии. Сидели с [info]datacompboy, языками чесали и придумали следующую рекомендацию:

Troubleshooting: performance issues

[…]

If nothing of the above helps, you may consider firing some of your employees to reduce the size of the database.
Метки: ,
(6 комментариев) (Оставить комментарий)

18 февраля 2004

10:52 — Microsoft предпринимает беспрецедентные меры для сохранения коммерческой тайны

[info]leksus вон бумагу марает, Лондона вовсю пиарит, а я, что, рыжий? Вот, статейку нацарапал.

Microsoft предпринимает беспрецедентные меры для сохранения коммерческой тайны
Корпорация обещает $1000 каждому, кто добровольно вернет полученную им копию исходных текстов Windows обратно в Microsoft.


Read more... )
Метки: , ,
Настроение: забава забава
Музыка: Nightwish - Sleeping Sun
(5 комментариев) (Оставить комментарий)

23 января 2004

6:54 — Четырёхмерный метод конечных элементов

[info]datacompboy и [info]feldgendler обсудили планы на будущее.

Диалог публикуется в сокращённом виде )
Метки: , ,
Настроение: идиотизм идиотизм
(0 комментариев) (Оставить комментарий)

27 декабря 2003

20:00 — Microsoft Proxy Server, the quick way to force everyone to use MSIE on your corporate network

Что делать, если в вашей конторе работает только Internet Explorer из-за идиотской политики администрирования

Обратите внимание на иллюстрацию, озаглавленную NTLM Browser Compatibility List.
Метки: , ,
Настроение: angry angry
(3 комментария) (Оставить комментарий)

21 декабря 2003

22:14 — С праздником вас, дорогие мои!

Согласно преданию, когда Хасмонеи вошли в оскверненный язычниками Храм, то для того, чтобы зажечь менору и начать богослужение, необходимо было ритуально чистое масло. Однако в Храме нашелся лишь один маленький сосуд с таким маслом, которого должно было хватить лишь на один день. Но случилось чудо, и светильник продолжал гореть целых восемь дней, пока не было изготовлено новое, ритуально чистое масло.

С тех пор в память об этом чуде в байте восемь битов.
Метки: ,
(7 комментариев) (Оставить комментарий)

7 октября 2003

19:43 — BarbieOS 0.99

Barbie Wizards guide girls through the process of partitioning their disks, formatting volumes, mounting Samba shares, and installing packages

Спасибо [info]datacompboy за ссылку.
Метки: , ,
(0 комментариев) (Оставить комментарий)

20 августа 2003

11:58 — Волки от испуга скушали друг друга

Никому такой вирус не нужен?
Метки: , ,
(0 комментариев) (Оставить комментарий)

25 июня 2003

14:28 — О мастерах установки мебели

В связи с новым ужесточением законодательства, защищающего права потребителей, все поставщики, торгующие мебелью в розницу, теперь обязаны не только обеспечивать бесплатную доставку в квартиру покупателя, но и направлять вместе с ней мастера для установки мебели. К лучшему ли эти перемены, судить потребителям. Уже сейчас качество услуг по установке, оказываемых мастерами, вызывает массу нареканий, а некоторые особенности их поведения и вовсе повергают в недоумение.

Read more... )

© [info]feldgendler, 1998.
Метки: ,
(5 комментариев) (Оставить комментарий)

24 июня 2003

14:41 — Вот как надо писать программы

Маленький примерчик экстремального программирования. Попробуйте скомпилировать и запустить (результат абсолютно безвреден, уверяю вас). Копирайт, к сожалению, утерян.

Только, предупреждаю, это плоский C, компилятором C++ компилироваться не будет.
Read more... )
Метки: ,
(11 комментариев) (Оставить комментарий)

23 июня 2003

15:19 — Matrix Reloaded: Nmap форева

BugTraq: Обозрение #133, 12.06.2003

Matrix Reloaded: Nmap форева
dl // 18.05.03 17:32
С ума сойти. В свежевышедшей Матрице обошлись без пролетов по трехмерным ландшафтам при демонстрации взлома. Тринити пользуется при этом популярным сканером портов Nmap (вывод которого слегка подправлен, чтоб смотрелся лучше, но это уже мелочи, потом, дело ведь происходит через несколько сотен лет), после чего запускает нечто под названием sshnuke, который начинает "[a]ttempting to exploit SSHv1 CRC32", т.е. использовать вполне реальное переполнение буфера в SSH. Что, кстати, говорит о полном провале "агентов Элрондов" как системных администраторов - ну надо же, продержали сервер непропатченным несколько веков :)
Источник: The Register
[ http://www.theregister.co.uk/content/55/30747.html ]
Метки: ,
(0 комментариев) (Оставить комментарий)

28 мая 2003

0:04

If u cn rd ths u cn bcm a c prgmr.
Метки: ,
(10 комментариев) (Оставить комментарий)

27 мая 2003

23:34 — История криптографии

Написал реферат на тему «История криптографии». Маленький, 8 страниц всего. Как сдам его, залью в коллекцию рефератов, пускай и другие пользуются. А вы, дорогие френды, закачиваете туда свои рефераты когда-нибудь? (вопрос, естественно, к студентам относится)
Метки: ,
(8 комментариев) (Оставить комментарий)

20 мая 2003

12:45 — Вопросы, которые бесят меня в программистских эхах

Эх, ну когда же у нас в стране разовьется нормальный рынок программного обеспечения и програмистского труда?.. Вот что меня бесит в фидошных эхах типа RU.CPP или SU.WIN32.PROG, так это не столько глупые вопросы чайников, сколько вопросы тех программистов, кому приходится выполнять идиотские требования заказчиков на нашем первобытном рынке.

Итак, топ-лист идиотских требований.
Read more... )
Метки: , ,
(16 комментариев) (Оставить комментарий)

12 апреля 2003

13:52 — Anti-spam filters for The Bat!

По просьбам трудящихся выкладываю свои сабжи.

Прежде всего надо пойти в Account Properties -> Mail management -> Mail dispatcher и увеличить Message body lines to download with header до 10.

Сами фильтры )
Метки:
(0 комментариев) (Оставить комментарий)