США -- лучшая страна на планете

США -- лучшая стана на планете. Тут абсолютно все абсолютно идеально. Вот прямо буквально абсолютно все. Ну, вот возьмем напимер Сиэтл. Это лучший город на земле. Или Сан-Франциско, он -- тоже лучший город на земле. Они оба лучшие. А Нью-Йорк так и вообще тоже лучший город в США и на земле.

Я понял это только сегодня, прогуливаясь по улица Сиэтла. Зашел в Старбакс и решил поделиться этим удивительным открытием с миром. Кстати, этот Старбакс -- лучший в Сиэтле (и вообще в США, и на земле). И вообще вся сеть кафе Старбакс -- лучшая сеть кафе.

Сегодня заканчилась CPPCON -- лучшая конференция в мире, посвященая языку C++. Упоминать, что это лучший язык программирования просто глупо -- это и так все знают. Она проходила в еще одном лучшем городе на земле -- Бельву. Главным споносром выступил на этот раз Гугл -- лучшая IT-компания. Были и другие споносры, например Микрософт -- тоже лучшая компания на земле, потому что она производит самый нужный и качественный софт.

Все до единого докладчики на конференции были лучшими.

Вы может быть думаете, что это сарказм? А зря. Спросите любого американца, как у него дела. Он вам ответит, что у него все хорошо. И это не просто фигура речи. Распросите подробней: как дела у него на работе, дома. У него все отлично.

Как это приятно! Понимать, что Америка прекрасна. Я понял это только сегодня и тут же забыл, что на свете существуют другие страны. То есть я, коенчно, кое-что все еще помню. Но это уже и не важно. Какие страны? Ну да, есть какие-то другие страны, но кому это интересно. Наверняка там все несчастные, ведь у них ничего в жизни не происходит. Я уверен даже, что многие голодают.

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

Еда в Америке самая вкусная, полезная и разнообразная. Тут лушиая архитектура, лучшие музеи и лучшие кинотеатры. Американские автомобили тоже лучшие на земле.

А если вы сомневаетесь и считаете, например, что из двух старбаксов только один может быть лучшим, а второй -- как минимум второй, то вы -- странный и не умеете позитивно мыслить, вы портите всем вокруг настроение. Зачем вы это делаете? Наверное это потому, что вы родились не в США, что лишний раз подтверждает, что США -- самая прекрасная страна. Храни господь Америку!

Лечу в США

Еду в США на CPPCON 2016. Как в прошлый и позапрошлый годы. И опять на две недели. Одна -- собственно конференция, а после нее опять неделю будем кататься по разным местам. В прошлые разы это была Калифорния, а сейчас сначала летим в Лас-Вегас, там возьмем машину и покатаемся по региону. Деталей не знаю, все планировала Таня :-). После этого летим в Нью-Йорк на несколько дней. Оттуда я возвращаюсь в Амстердам, а Таня в Сан-Франциско на работу на две недели.

США я в целом недолюбливаю. Причины самые банальные. Мне даже немного стесняюсь о них писать, потому что в целом хорошего там тоже предостаточно, а на фоне большинства стран, так там и вообще прекрасно. Да и многие вещи -- дело личного предпочтения.

У меня есть стойкое ощущение, что я постоянно что я постоянно что-то нарушаю или хотя бы делаю не так. Я всегда кому-то что-то должен сказать, спросить как дела, и ответить до сих пор не знаю что, когда тебе говорят, что у тебя красивая рубашка. И я не в том смысле, что мне не нравится, когда ко мне обращаются посторонние, нет, я только за. Мне не нравится, что когда я не веду себя по установленному шаблону, люди в лучшем случае считают тебя странным, а в худшем обижаются.

У меня был случай в 2013 году, когда я ездил в Лас-Вегас на WJF9. Мероприятие замечательное, и люди там были очень положительные. И одним из этих положительных людей был влогер, который уже несколько лет подряд снимал подробные видео про WJF9. Как и положено в США, встречаешь человека, обмениваешься бессмысленными нежностями и комплиментами (по прежнему не нахожу в этом ничего плохо -- в каждой культуре свои причуды, и эта очень даже забавная, и скорее положительная). Я рассказываю ему, что почти все, что я знаю про WJF,  я знаю из его влога. Он не скрывает радости, и мне тоже очень приятно увидеть его вживую. В общем, поболтали по дуашм, что называется, хоть и коротко. И потом в течение мероприятия я вго встречаю то в залах, то в коридорах отеля. И вот один раз рано утром он проходит мимо меня и как всегда "Привет, как дела!" Ну я ему ответ "Привет, хорошо!", помохал рукой. И это был последний случай, когда он со мной поздоровался. Сейчас я думаю, хоть и не уверен до сих пор, что я по-просту не сопледовал его паттерну поведения -- не спросил в ответ как дела и не выдал еще пару-тройку бессмысленных фраз.

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

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

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

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

В общем, повторю то, с чего я начал. США -- замечательная страна, где живут одни из самых отзывчивых, приветливых и открытых людей. Но я все равно недолюбливаю эту страну. Вот Нидерланды я люблю практически без оговорок, а про США люблю писать всякие гадости. В ближайшие две недели, я скорее всего напишу много негатива в твиттере. Не хочу, чтобы у вас создалось впечатление, что я такой мазахист -- приезжаю четвертый год подряд в эту страну и только и делаю, что на все жалуюсь :-).

Почему DragonFly?

Обычно, когда кто-то из знакомых узнает, что я пользуюсь операционной системой DragonFly BSD на своем домашнем комьютере, они как минимум удивляются. Меня это всегда немного расстраивает. Точнее расстраивает не само удивление, а то что оно никогда не побуждает их узнать что же такого в этой ОС, а вместо этого делается очень поверхностное суждение: что я придаю очень важное значение какой-то малозначимой фиче в этой ОС и при этом готов мириться с целой кучей проблем, которые наверняка присущи всем ОС, кроме, скажем Windows и Linux.

Доля правды в этом есть, но меня расстраивает то, что вместе с этим у большинства этих людей обычно очень поверхностное представление о любой ОС, кроме собственно Windows и Linux. Еще чаще бывает так, что они что-то слышали о BSD в целом, но эта информация в большинстве случаев чрезвычайно устарела, а еще чаще состоит из мифов или "логичных" выводов, которые звучат логично, но совершенно неверны.

Поэтому я решил немножко, освсем чуть-чуть, рассказать про несколько отличительных особенностей DragonFly.

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

Первый интересный факт: в DragonFly есть свой (написаный заново, а не взятый из FreeBSD) слой совместимости, позволяющий использовать драйвера видеокарт для Linux'а. Он намного чаще обновляется, чем FreeBSD, и одно только это делает DragonFly намного более подходящей системой для рабочего компьютера, чем любую другую BSD.

Еще интересно, что многие по привычке когда думают о BSD, всегда вспоминают порты FreeBSD и предполанают, что для установки софта нужно обязательно его компилировать. Это чудовищно дремучее, даже оскорбительное, заблждение. Во-первых компилировать софт никогда не нужно было вообще. Даже тогда, когда самым популярным способом установить что-то на FreeBSD были порты, был доступны репозирории бинарных паектов. Да, когда-то давно, не было продвинутого менеджера пакетов наподобие apt. Но и без него можно было устанавливать бинарные пакеты из репозиториев. Просто порты имели много перимуществ и всегда, когда речь заходила о FreBSD, вы слышали именно про них. И не удивительно, это и правда очень удобная система, которая позволяет обновлять отдельные пакеты не ломая зависимостей.

Но не об этом даже речь. А о том, что уже много лет существуют менеджеры пакетов для BSD. Более того, менеджер pkgin (основной в NetBSD), например, кросплатформенный и может использоваться не только на всех BSD, но и на Linux'е, а также на Mac OS X, а также на производных Solaris'а: Illumos и др.

И не просто может гиппотетически, как например dpkg+apt якобы может использоваться на BSD, а на практике используется. Я уже много лет использую его на Mac OS X и на работе на Linux'е для некоторых целей. Для Illumos это основной менеджер пакетов.

Но и он не так важен в DragonFly, потому что там используется менеджер пакетов pkg, взятый из FreeBSD, где он был полностью написан с нуля несколько лет назад.

Использование как pkgin, так и pkg не отличается существенным образом от того, как используется apt в debian-производных дистрибутивах.

Файловая система. Обычно, люди из мира Linux если и знают что-то хорошее про FreeBSD, то это всегда ZFS.

Так вот в DragonFly своя файловая система, написанная Мэттом Диллоном -- Hammer. Она по некоторым (я бы написал по многим, но ZFS тоже за последние несколько лет развивалась, поэтому я не могу быть уверен) параметрам еще лучше ZFS.

Я, к сожалению, очень мало пользовался ZFS, поэтому сравнительную характеристику не могу написать, но просто перечислить возможности Hammer могу.

Это copy-on-write файловая система. То есть, никакие данные в системе никогда не перезаписываются. Абсолютно все, что вы записываете на диск всегда пишется в новое место. Старые данные удаляются только явно. Явно -- конечно, не ознчает вручную. Но это означает, что есть возможность хранить любую версию любого файла. Не нужно бояться что вы что-то перезаписали или случайно удалили. И самое главное, что доступ к истории файлов тривиальный: для этого не требуется изучать какие-либо специализированные утилиты. К любой версии любого файла можно обратиться стандартными утилитами от именю любого пользователя (при наличии прав, конечно). Все, что нужно, это добавить номер транзакции в качестве суффикса имени файла. Это в частности означает, что история файлов автоматически доступна, когда вы расшариваете данные по сети в том числе для других ОС. Повторю, для этого не нужны никакие специализированные утилиты. Вы можете настроить файловый сервер на DragonFly и использовать его с Windows по сети. При этом вам будут доступны все версии файлов: случайно удаленные или перезаписанные.

После этого когда я слышу, что люди предпочитают Linux, мне грусно :-(. То есть существует миллион причин, почему кому-то может не подойти DragonFly, но вот просто выбрать Linux со своей убогой ext4fs и даже не знать, что предлагает DragonFly -- вот это вот грустно.

Далее, в DragonFly почти с самого момент ее появления появилась возможность запускать ядро системы в виде обычного пользовательского процесса, даже не обязательно от имени root'а.

То есть весь интерфейс связи ядра с железом был упрощен, и реализован в виде user-space библиотеки.

Получился такой своеобразный вариант виртуализации: можно запускать произвольное число "виртуальных машин" (на самом деле просто ядер), отдавая им подможножество ресурсов (часть памяти, несколько процессоров и пр.). Для доступа к сети, есть свой демон vknetd, который реализует user-space bridge, видимый снаружи как ppp-интерфейс, который можно связать с реальным bridge-интерфейсом. Это позволяет развязать vkernel и запускать его от имени обычного пользователя.

Напомню, что этого всего нет ни в других BSD, ни в Linux'е.

И последнее, что очень хорошо дополняет технологию vkernel, -- это возможность сохранять полное состояние любого процесса (в том числе vkernel) на диске, преостанавливая процесс, и позже восстанавливать его. Это можно делать в том числе и на другой машине, что в частности означает, что можно переносить "виртуальную машину", запущенную как user-space vkernel с одного хоста на другой без перезагрузки.

Кокретно эта фича, насколько я знаю, досупна и в других системах виртуализации. Но в данном случае, обратите, внимание насколько элегантно и просто этого реализовано в DragonFly!

На этом все. Удачи!

В следующий раз, когда вам будет нужно выбрать ОС, если у вас в голове кроме автоматического "конечно же Linux" возникнет хотя бы ненадолго мысль о том, что на свете есть что-то еще, я буду считать, что я написал это не зря.

Хостинг на DragonFly

А вы рассматривали вариант хостинга на DragonflyBSD?

Если интересно попробовать, но не знаете, подойдет ли он вам, предлагаю бесплатно один IPv6-only виртуальный сервер на месяц. Дальше, если понравится -- 5 евро в месяц. Могу также дать тестовую машину с IPv4, но это возьму за это 1 евро (столько стоит один IP у моего провайдера).

Характеристики машинки:

  • 1 ГБ оперативной памяти,
  • 50 ГБ жесткий диск,
  • OC DragonFly 4.4

Работает виртуальная машина на vkernel.

Если интересно, обращайтесь любым способом: через Фейсбук, Твиттер или по почте root@zta.lk

О способе оплаты договоримся по-почте, если через месяц решите, что вас все устраивает. Варианты: перепод на банковский счет, bitcoin, ripple или что-нибудь еще.

Для сравнения: Digital Ocean за 5$ предлагает 0.5 ГБ оперативной памяти и 20 ГБ диск.

Обновление: для первых пяти обратившихся бесплатный первый месяц с IPv4.

Почта

Где-то около двух лет назад я отказался от хранения почты на gmail'е, yandex'е или mail.ru. Все адреса на на этих доменах по-преждему действительны, но почта перенаправляется на другой хостинг. Два года назад это был runbox.com, сервера которого физически находятся в Норвегии и могут предоставить данные властям только по судебному постановлению. Интерфейс у runbox'а ужасный, но так как я редко пользуюсь web-клиентом, это не очень страшно.

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

Выделеный сервер я арендую у hetzner.de. На нем стоит DragonFly 4.6. SMTP-сервер -- postfix, принимает почту для доменов zta.lk и ztalk.org. DNS-зоны хостяться на нем же, DNS-сервер -- tinydns из пакета djbdns, slave-сервера -- бесплатные hurricane electrics. Домен zta.lk я купил у asiaregistry.com много лет назад, ztalk.org -- не так давно у reg.ru. В данные момент у обоих зон по две mx записи: первые ссылаются на мой сервер kl.zta.lk, вторые по-прежнему на сервер runbox.com, буде какое-то время резервным. SPF-записи в обоих доменах предусматривают посылку почты как с моего сервера, так и с runbox'а. Спам фильтруется обычным spamassassin'ом, пока очень тупо -- как обычный content filter в postfix'е, то есть вся почта сначала приходит в очередь и только потом фильтруется. Это не лучший вариант настройки spamassassin'а, но мне пока хватает. В любом случае почта после фильтрации доставляется локально с помощью dovecot LDA в мою домашнюю директорию в формате maildir с layout'ом FS -- это когда подпапкам imap соответствуют реальные директории в файловой системе. На мой взгляд, это самый простой и удобный вариант хранения почты. Dovecot еще очень удобен тем, что допускает multimaster-синхронизацию. Сейчас я это никак не использую, но думаю в скором времени сделать синхронизаию с моим домашним компьютером, который тоже доступен снаружи и способен принимать почту по IPv6.

Для доступа к ящику я использую тот же dovecot, котоый слушает исключительно по imap+starttls по адресу mail.zta.lk. Сертификаты я использую бесплатные, подписанные letsencrypt, с подтверждением владения домена через http (для этого специально настроен nginx).

Кроме imap'а почта доступна через веб-интерфейс roundcube почти без плагинов, только для фильтров pigeonhole и кнопки "спам". Веб доступен через https тоже с сертификатами, подписанными letsencrypt.

Roundcube настроен самым стандартным образом -- через modphp и apache. Apache при этом не смотрит наружу, а скрыт за nginx'ом. Планирую в будущем полностью избавиться от этого монстра, но пока работает и так.

В такой конфигурации меня все более-менее устраивает в плане удобства. Теперь о самом главном -- о бэкапах.

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

Собственно, причина, по которой я везде использую DragonFly как раз в том, что в ее родной файловой системе Hammer забота о данных чрезвычайно удобна и очень хорошо автоматизирована.

Дело в том, что это полностью copy-on-write ФС с возможностью сериализации всех операций. Причем возможно сериализовать не только отдельный снимок ФС, а также настроить онлайн поток всех операций записи. Этот поток можно перенаправить через любой туннель (обычно ssh) на другую машину и десереализовать там на отдельный раздел. Естественно, можно ограничивать скорость этого потока данных. Если ограничение поставить слишком жестким и не все операции будут успевать передаваться, то система автоматически будет пропускать некоторые версии мнговенных снимков, но на выходе всегда гарантируется целостная ФС. И все это, повторю, делается в реальном времени.

В данный момент у меня на сервере 4-терабайтный RAID, все разделы которого полностью дуплицируются на разделы на моем домашнем RAID'е, который имеет размер 4.5 ТБ. А все информация с домашних разделов дуплицируется на сервере с помощью того же механизма.

На данный момент даже с учетом безумного количества всякого хлама на этих дисках, и я не только про фильмы, музыку, аудиокурсы, все фотографии за все мою жизнь, а также про все-возможные бэкапы всех временных компьютеров и ноубуков, которые когда-либо у меня были: домашний сервер со времен моей жизни в Малайзии, мой сервер в Москве, макбук, общажный комьютер, Raspberi PI, которую я какое-то время использовал в качестве домашнего роутера. Я думаю, что если хорошо покопаться, то там можно будет даже найти институтские бэкапы старых SCSI-дисков с серверов Alpha с доманшими каталогами студентов, где есть их лабы.

Так вот, на первый взгляд кажется, что это чрезвычайно много информации. На практике же оказывается, что все это умещается в 2.1 ТБ. То есть у меня еще остается чуть больше терабайта сервере и 2 ТБ дома.

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

Должен вам сказать, что когда вся эта система заработала, это был большой груз с плеч. А теперь вот еще и почта.

На данный момент у меня остался только один гештальт -- это фотографии. У меня нет полностью надежного и автоматизированного потока сихнронизации всех моих фоток со всех моих устройств на мои сервера. В этом отношении пока хаос: что-то уходит на cloud.mail.ru, что-то на mega.co.nz, что-то на dropbox'е.

Мечтаю разобраться и с этим и избавиться от всех этих убогих технологий. Но пока и так неплохо.

Про музыку

Бывает так, что разучиваешь какое-нибудь произведение Шопена и один из аккордов в длинной и запутаной гармонической последовательности кажется особенно красивым. Я даже помню, как у моей учителницы в музыкальной школе один раз почти невольно вырвалось "ой, какой красивый аккорд". Я и сам в тот момент подумал то же самое. Но она не заострила на этом внимание и мы продолжили занятие. С того момента прошло больше 18 лет, а я до сих пор помню, что это был первый аккорд седьмого такта шопеновской прелюдии соль-диез минор. (Я вам советую прямо сейчас взять ноты и сыграть два-три такта в этом месте -- вы удивитесь!)

Уже тогда я понимал, что красивых отдельно взятых аккордов не бывает, а бывает контекст, в котором аккорд дейтсвует на мозг как-то особенно, но тогда эта мысль ушла на второй план и на мгновение показалось, что вот именно этот аккорд уникальный. Этот эффект хорошо объяснен в книге Дугласа Хофстадтера "Гедель, Эшер, Бах", с примерами и аналогиями в областях математики и графики. Вообще-то, этот конкретный аккорд и правда не очень обычный -- в нем есть большая септима, которая представляет собой очень сильный диссонанс:

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

Как бы то ни было. Я решил написать об этом потому, что сегодня я, разучивая шопеновский вальс си-минор, опять заметил вырывающийся из контекста аккорд (этот вальс даже рядом не стоял по богатству гармонического состава, поэтому эффект был совсем не такой сильный.) и я просто для прикола спросил Таню, слышит ли она, что один аккорд особенный и если да, то какой. Она, естественно, указала именно на него. А мне стало интересно, насколько этот эффект культурно зависим. Я лично считаю, что совсем независим, даже больше -- что такой же эксперимент можно провести на коровах и зарегистрировать у них какие-нибудь там импульсы в мозгу именно на этом аккорде. Но доказать я это не могу. И после некоторой дискуссии с самим собой, понял, что не могу никак это обосновать. А самое плохое, что я даже не представляю как можно провести честный эксперимент. Ведь сегодня почти все человечество воспитывается в похожих культурных условиях.

А вы что думаете?

Z-talk с нуля

Я так часто переписывал Z-talk с нуля, что у меня самого появилось чувство, что я его никогда не допишу. Пора остановиться и довести до рабочего состояния то, что уже есть.

План такой: я буду писать раз в неделю пост о своем прогрессе. Сегодня первый пост из этой серии.

В основе, Z-talk — это лисп. Наиболее близкий диалект — Scheme. Фундаментальное отличие в поддержке макросов в стиле Common Lisp.

Реализация начинается с простейшего интерпретатора, который я пишу на C++.

Сначала я реализую простейший сборщик мусора. Mark&sweep с интерфейсом, состоящем из функций: add_root(), del_root() и собственно gc().

Дальше поддержка примитивных типов данных. Вот базовый набор: fixnum, bignum, char, string, symbol, bool, none, nil, pair, vector, а также файловые и строковые порты ввода-вывода.

Реализация классическая — fixnum, char, bool, none и nil представлены в виде машинного слова, два последние бита которого представляют собой тег (один бит для fixnum). Если тег равен нулю, то слово интерпретируется как указатель на объект в куче. Каждый такой объект имеет заголовок из нескольких битовых полей: несколько бит, использующихся сборщиком мусора и id типа. Id типа — это индекс в глобальной таблице типов. Каждый элемент этой таблицы — запись, включающая информацию о размере объекта в байтах, имя, используемое в целях отладки, битовый массив, определяющий какие машинные слова в объекте могут быть указателями (используется для фазы mark сборщика мусора), а также набор указателей на функции: hash, equal, destroy, print, dump.

Для типов, встроенных в машинное слово, кроме fixnum (назовем их immediate), id типа закодировано в битах со 2 по 7.

Реализацию я начинаю со списка unit-тестов, которые почти исключительно представляют собой список акимом для базового набора типов.

Для типов fixnum/bignum — это обычная арифметика. Для symbols — это операций преобразования из строки и обратно, а также проверка на идентичность копий. Для pair — это классические cons, car, cdr.

Продолжение следует.

Чего не хватает Европе

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

Конечно же, Европа -- это много очень разных стран. И жизнь, скажем, в Польше совсем не такая, как в Нидерландах. В этом контексте я имею в виду саму развитую Европу: Нидерланды, Данию, Бельгию, Люксембург, Швейцарию, Норвегию. Можно в этот список, наверное добавить и Францию с Германией, но где-то нужно все-таки остановиться.

США (опять же на мой взгляд) далеки от северной Европы по уровню общественной зрелости. И хоть по отдельным параметрам некоторые штаты даже круче, я все равно предпочитаю Европу.

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

Вообще-то, когда начинаешь делать подобного рода обобщения, то неизбежно находишь сотни исключений и оговорок. Нельзя просто так сказать, что в Нидерландах жить лучше, чем, например, во Франции. И не только потому, что каждому свое (это-то очевидно), а потому что я даже для самого себя не могу точно определить, что важнее: комфортная жизнь или культура, носителями которой являются жители страны. Такие вещи стравнивать очень сложно, потому что комфорт очень сильно зависит от наличия культурного наследия. То есть сегодня мне самым важным кажется то, что люди на улицах Харлема очень сдержаны, добры, приветлевы и искренни, а завтра я прочитаю афишу кинотеатра и пойму, что там нет ни одного стоящего фильма, снятого нидерландским режисером. Или даже чисто в отношении комфорта: с одной стороны одним из самых важных аспектов жизни для меня является наличие комфортных общественных пространств в непосредтсвенной доступности. Я люблю жить среди людей. Никакой трехэтажный дом с машиной, яхтой и не важно чем еще где-нибудь далеко за городом мне не нужен, если до ближайшего кафе нельзя дойти пешком. Или даже если это кафе близко, но его с трех сторон окружают широкие шумные дороги, а с четвертой гиганская парковка. Но с другой стороны, легко придумать экстемальный пример: если вы живете в очень маленькой квартире в старом доме со старой сантехникой, где шумит водопровод, а туалет чуть ли не на веранде, то в каком бы центре он не находился, как бы ни были уютны улицы вокруг вашего дома, рано или поздно вам захочется перемен. Захочется иметь место, куда бы можно было ставить мотоцикл, захочется чистую теплую просторную ванную комнату, в которую влазит что-то еще кроме стиральной машинки и раковины и душевой кабинки.

Таким образом, я не могу совершенно однозначно определиться, где именно жить лучше всего. Даже для самом себя. На данные момент, как я уже сказал, это северная Европа. Нидерланды, пожалуй, на первом месте, а дальше по списку, который я привел выше.

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

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

Каждый раз когда поднимается тема иммиграции, все обсуждают любый вопросы, кроме самого важного: когда же наконец иммигранты, выходцы из мусульманских стран, принесут в Европу традицию организовывать туалеты так, чтобы в них всегда был доступ к водопроводной воде?

Про Францию

Недавно к Тане приезжали родители и мы с ними съездили во Францию. Для меня это был уже второй раз, но раньше мы были только в Париже, а на этот раз сняли машину и прокатились еще по Нормандии. Заехали в Этрету (Étretat) и Трувиль-сюр-Мер (Trouville-sur-Merу).

Еще от прошлой поездки у меня осталось очень положительное впечатление от Парижа. Оно было особенно ярким от того, что ожидания были самые худшие. Раньше я о Париже слышал почти только плохое. А оказалось, что город очень обаятельный. Причем многое из того, что говорили оказалось правдой, но только не такой значительной. А положительные вещи оставили гораздо более яркий след. То есть, скажем, пробки и большое количество машин -- правда, но движение не очень сильное, не очень шумное, везде есть тротуары, а пешеходные переходы всегда наземные и огранизованы достаточно удобно. Местами грязновато и даже (как мне верно говорили) иногда пахнет туалетом, но это скорее исключения и общее впечатление от этого не испортилось. Французская надменность и нежелание знать никакой другой язык, кроме французского, преувеличены. То есть английский и правда знают очень немногие, но все всегда готовы тебя слушать, пытаются понять как могут и погают. Это даже немного приятно, особенно после двух лет в Нидерландах, где все мгновенно переключаются на английский, стоит им понять, что ты иностранец, даже если ты искрене пытаешься связать пару слов на их языке. На улицах всегда есть жизнь. Люди заняты самыми разыми вещами. Даже просто так ходить и наблюдать за жизнью города очень интересно. Даже более интересно, чем, скажем, в Амстердаме. В Нидерландских городах обычно намного уютнее и комфортнее, да, пожалуй, и красивее. Но если судить по тому, чем заняты люди на улицах, то Париж выигрывает. Люди собираются в группы, на чем-то или во что-то игают, что-то читают, бегают, катаются на досках и прочее.  Все это есть и тут в Нидерландах, но в основном по праздникам или в выходные, когда проходят какие-нибудь фестивали. А Париже все это как-то спонтанно и поэтому более жизненно и интересно.

Но на этот раз я был в Париже совсем чуть-чуть (Таня была в отпуске и она с родителями приехала раньше и осталась подольше, а я только на выходные прилетал), в основном мы время провели в Нормандии -- как я уже написал, в двух городах на море, а ночевали в Грюше-ле-Валасе (Gruchet-le-Valasse).

И вот тут согласно стереотипам мне Франция должна была бы понравиться  еще больше. А оказалось наоборот. Но я не собираюсь никого ни в чем убеждать -- каждому свое. Просто меня обычно очень мало интересует природа как таковая и я гораздо больше обращаю внимание на то, как организавана жизнь людей даже если речь идет об очень маленьких городах или деревнях. По этому параметру, конечно, я не знаю ни одной страны, которая хоть немного бы приблизилась к Нидерланам. А так как за последнее время в моем мозгу "ноль выставился" именно на Нидерланды, то я совершенно не могу хорошо относиться ни к какой другой стране. Ну, ладно, преувеличиваю -- в Дании вроде все нормально и, возможно в Швеции (я совсем чуть-чуть там был). Так вот Франция после этого кажется хаосом. Что, понятное дело, неправда -- стоит вспомнить как дела обстоят во Вьетнаме, в Индонезии или на Филиппинах (да и в России, чего уж там) и все встанет на свои места.

Еще одна одна причина, почему мне вне Парижа не очень понравилось в том, что мы были в самых туристических местах, а это всегда портит впечатление от поездки. Плюс ко всему, у меня давно выработалось отвращение ко всем морским курортам. Я не люблю пляжные атрибуты и иногда даже кажется само море. Самый терпимый вариант для меня -- это пустой холодный ветряный пляж -- купаться я все равно не люблю (разве что немного в речках и озерах), а так хоть красиво и без голых отвратительных тел. В этом смысле какой-нибудь Зандфорт или Гаага -- норма, а еще лучше где-нибудь в Ирландии.

Как бы то ни было, в целом впечатления остались замечательные. Обязательно поедем во Францию еще. И не раз.


Есть вещи, к которым я никогда не привыкну

Независимо от того, насколько долго я пользуюсь всякими Endomod'ами, Strav'ами и Runkeeper'ами,  я никогда не привыкну к тому, что они называют скоростью то, что на самом деле является "медленностью".

Speed, pace или tempo -- все это не может измеряться в минутах на километр. 6 мин/км -- это не скорость и не темп. 8 мин/км больше чем 6 мин/км, при этом скорость или темп, соответствующие 8 мин/км -- меньше.

Это все равно что радиус кривизны путать с кривизной. Если радиус больше, то кривизна -- меньше. Если сопротивление больше, то проводимость -- меньше. И дело не в единицах измерения. Нельзя изменять проводимость в Омах, а кривизну в метрах.

Особенно забавно, когда разработчики приложения чусвтуют подвох и вместо Speed пишут Pace (темп) или Tempo (тоже темп). На это грустно смотреть. Ведь это ровным счетом ничего не меняет. Больший темп -- это меньше мин на километр. Называть эту величину любым синонимом скорости -- это такая же глупость, как и называть ее скоростью.

Если вам так важно записывать этот показатель в мин/км, то придумайте для этой величины адекватное название. По смыслу это должно быть синонимом медленности: тормознутость. Вот правильно же звучит: ваша тормознутость 8 мин/км. А теперь ваша тормознутость -- 6 мин/км. Все логично. Ваша тормознуость упала на 2 мин/км. Не скорость упала, и не темп. Скорость и темп как раз выросли.

Помню, когда я жил в Малайзии и перед покупкой мотоцикла читал малайские форумы, я часто встречал, что люди жаловались на потребление топлива (consumption), при этом писали величины в км на литр. Тогда я был уверен, что это потому что в Малайзии никто вообще не знает элементарную физику. Я как раз там преподавал физику и не было дня, когда я бы не ужаснулся от их образования. Читая форумы, я лишь видел в этом подтверждение моих представлениях об их образовании. Особенно глупо то, что для величины, измеряемой в км/л есть отличное название -- экономичность.

И вот теперь, когда я почти каждый день вижу все эти мин/км, у меня уже нет возможности объяснить это хреновым Малайзийским образованием.

Куда катится этот мир?