migmit: (Default)
Пошёл тут прогуляться, вижу — толпа. С факелами. Ну, я сначала решил, что это очередной уличный протест. Как утверждает одна из моих учительниц венгерского, в Будапеште уличные протесты — национальное развлечение, типа «ну что, куда пойдём — в кино или протестовать?» Но потом до меня дошло. Завтра же годовщина восстания 1956 года, когда, цитируя Фиалкова, «совдепия окончательно смахнула с себя последние остатки топорного макияжа и явила миру своё злобно-тупое рыло». Вот по этому поводу, стало быть, памятный марш.


Перед колонной едут грузовики — старые, того времени — с символически пробитыми знамёнами.


Набережная частично перекрыта для движения машин. Мост Свободы тоже перекрыт, а вот мост Эржибет, как и следующий за ним Цепной — нет, они проходят над колонной, и машины могут по ним проехать, не мешая демонстрантам.


На одном из грузовиков так и написано, «1956, октябрь, 23».


Колонна реально огромная, но совершенно спокойная.


Когда колонна немного отвернула — чтобы пройти возле стен Замка — это заметили не все.


Выходящие на набережную улицы, в основном, тоже перекрыты полицией.


А по набережной так и гуляет народ, и шествие ему совершенно не мешает.
migmit: (Default)
Как оказалось, российская политика предоставляет огромные возможности для цитирования классики и не только.
Например: )
Многие цитаты перевраны, но без изменения смысла.
migmit: (Default)
Тут начальник бензоколонки выкатил ультиматум зажравшимся американцам. Потребовав при этом довольно много довольно странного.

I. Отменить:
1) Санкции, которые только помогли.
2) Закон Магницкого.

II. Выплатить компенсации за:
1) Санкции.
2) Антисанкции.
3) Низкую стоимость нефти.
4) Загаженные подъезды.

III. Вернуть:
1) Колбасу за 2.20
2) Доллар за 67коп.
3) Нефть по 120.
4) Девственность Мизулиной.
5) СССР.

IV. Прочее:
1) Убрать войска НАТО от бензоколонки.
2) Перестать называть его нехорошими словами.
3) Прекратить, наконец, гадить в русских подъездах!
4) Постирать ему штаны.
5) Прислать две коробки галоперидола.
6) (другим почерком) И седьмой айфон.

Кто ещё что вспомнит?
migmit: (Default)
Полагаю, что подавляющее большинство людей в мире — полные идиоты.

Вчера в Венгрии был референдум по поводу Сирийских мигрантов. Пущать — или не пущать. Ответ, который предпочитает правительство — «не пущать». Опросы, до референдума, показывали, что этот ответ поддерживают, по разным оценкам, от 60% до 85% населения.

Но произошло забавное. В пользу «не пущать» высказались 98% голосовавших — но при этом только 40% населения действительно проголосовали (и ещё порядка 4% пришли на референдум и испортили бюллетень). По Венгерским законам, референдум, в котором приняли участие менее половины избирателей, силы не имеет.

То есть, за «пущать» были многие, но почти все из них остались дома, либо выразили свой протест иным образом.

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

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

Вот я и думаю: подавляющее большинство людей в мире — полные идиоты; но, может быть, не 99%, а всего 95%?
migmit: (Default)
По мотивам одного поста [livejournal.com profile] avva. Интересно, когда люди представляют себе, скажем, поездку на поезде — они реально видят вокруг себя поезд? Видят, как он покачивается, как кто-нибудь проходит по вагону? Слышат стук колёс? Чувствуют ветер из приоткрытого окна?

Я могу, если постараюсь, увидеть размытую статическую картинку, причём как будто «за стеклом» — меня в этой картинке нет. Я совершенно не в состоянии увидеть движущуюся картинку. Я могу услышать голос контролёра «предъявите билеты, пожалуйста», но при этом теряю изображение. Я могу увидеть, во что одет мой сосед — но при этом из поля моего зрения (внутреннего) совершенно пропадает остальной вагон.

Я не могу считать овец, чтобы уснуть. Могу представить себе овцу и забор, хотя и весьма нечётко. Представить сам прыжок овцы через забор — нет.

При этом с воображением у меня всё в порядке. Но оно у меня работает на более абстрактном уровне. «Представь себе, что ты едешь на поезде» — нет проблем, я просто мысленно записал «я в вагоне поезда, поезд движется», и дальше работаю от этого. Видеоряда нет вообще.

Вот здесь — отчёт программиста и писателя Блейка Росса, у которого подобного графического — и звукового — воображения нет вообще. Очень любопытный.
migmit: (Default)
Тут ходит по интернету новая забава — делать, с помощью соответствующего сервиса предвыборные плакаты со своей физиономией. Я попробовал, получилось что-то психоделическое:

Вторая попытка оказалась ещё круче )

Rebutting

Aug. 7th, 2016 09:38 pm
migmit: (Default)
Roman Cheplyaka posted an excellent answer to the Andrej Bauer's statement that "Hask is not a category", saying "Does it matter if Hask is (not) a category?". I'd like to add a few words of my own to that discussion.

We really don't care about whether Hask is a category; that is, if types and functions defineable in Haskell form a category. But not because we are totally OK with an imperfect model (although we are); the real reason is that we never really work in Hask. We only work in some other category, into which Hask can be embedded. Bauer mentiones one of such categories — the category of "continuous posets" (probably domains); there are others, more refined categories such as the category of dI-domains. The point is, we never really care about Hask itself. I think it's possible to define, in a strong mathematical sense, the the category whose object would be EXACTLY the types we can define in a certain variant of Haskell, and the functions would be EXACTLY the functions that we can define between them (although I'm not sure if undefined should be considered a valid function, despite what Wikipedia might say). But, first of all, that category would be very implementation dependent (and even compiler-extensions dependent), and, what's worse, it won't have virtually any nice properties. We won't even have cartesian products in that category!

So, who cares? We embed this category into some larger (although not much larger) category that has all those nice properties. There are different ways to do that, some more refined than the other; and the results we obtain stay true as soon as you choose a refined enough embedding. That works great; there is no need to use Hask itself.
migmit: (Default)
Чего-то меня потянуло на ночь глядя сделать демотиватор.

Вот.
migmit: (Default)
Сегодня я узнал две забавных штуки:

1) "Эффект кобры". Означает ситуацию, когда очевидное решение некоей проблемы приводит к её ухудшению. Происходит из исторического анекдота: английские власти в Индии, пытаясь извести кобр, объявили награду за каждую убитую кобру. Предприимчивые индусы начали разводить кобр, а потом сдавать за вознаграждение. Узнав об этом, англичане отменили награду. Предприимчивые индусы пожали плечами и выпустили кобр на волю. В результате кобр стало больше.

2) "Забор Честертона". Принцип, означающий, что отменять или исправлять что-то следует только тогда, когда понимаешь, зачем оно было сделано изначально. Честертон в качестве примера приводил забор, который не стоит сносить, не зная, зачем его поставили. Забавная идея, но не всегда верная. В некоторых случаях имеет смысл заранее предполагать, что забор поставил полный идиот.
migmit: (Default)
Чтобы на Маке скомпилировать, при помощи ghc или cabal, бинарник, включив в него libgmp статически, проще всего перед компиляцией сохранить куда-нибудь libgmp.dylib и скопировать на его место libgmp.a.

Это я одну внутреннюю программку пишу, для использования коллегами. Некоторые используют.
migmit: (Default)
Недели две назад из нашей конторы уволили одного разработчика, по имени Миколай. Он поляк по паспорту, венгр по самоидентификации (на польском не говорит), работал до недавнего времени в Нью-Йорке, переехал (вроде бы) в Лондон.

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

Но затем Миколай перебрался на новое место работы, где, судя по всему, его попросили назвать тех, кого он рекомендовал бы нанять, так его текущий работодатель — это молодая, активно развивающаяся компания. И Миколай, похоже, назвал всех своих бывших сослуживцев, кого только смог припомнить. Ну, кроме, наверное, Ника Дентона (основателя и CEO нашей конторы). В том числе тех, кто его терпеть не мог, причём взаимно. В пятницу несколько американских коллег получили звонки от рекрутера (одного и того же). Сегодня настал черёд Будапешта: один и тот же рекрутер (но другой) некоторым написал письмо (мне в том числе), другим послал сообщение в LinkedIn.

Посмотрим, что будет дальше. Я лично на письмо отвечу, хотя бы просто любопытства ради.
migmit: (Default)
Update: English version here

Я вернулся из Нью-Йорка. Ещё вчера.

По дороге туда посмотрел, наконец, фильм "Марсианин", по книге Энди Вейра. И вот, что я могу по его поводу сказать.

Мне чрезвычайно нравится книга. Я даже сделал собственный перевод (мой первый опыт перевода больших произведений). Причём получил от процесса большое удовольствие.

И мне очень не понравился фильм. Сейчас поясню, почему.

Massive spoilers ahead!

1. В фильме нет выдумки. Фактически, Скотт взял роман, отжал его хорошенько, добавил буквально две-три капельки, и в таком виде экранизировал.

2. Те самые две-три капельки оказались противоречащими всему. Конкретнее:

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

2.2. Финальное спасение. В том-то и фишка, что в книге астронавты "Гермеса" — это идеально подогнанная команда. Они знают возможности друг друга, и они полностью друг другу доверяют.

2.2.1. Именно поэтому Льюис НЕ МОГЛА в последний момент сдёрнуть Бека с задания и отправиться в космос сама. Он — их специалист по работе в невесомости; он лучше, она это знает, и она полностью ему доверяет. Если кто-то справится — то это он. Считай она, что сама сделает всё лучше него, то это было бы в первоначальном плане.

2.2.2. И опять же, Уотни НЕ МОГ, в нарушение приказа, покинуть своё место и отправиться ей навстречу. Да, пока он один, он действует по своему разумению; бюрократов из НАСА он вообще за людей особо не считает; но, как он сам говорит в книге, будь там Льюис — он выполнил бы любой её приказ не раздумывая. Он спорит с ней, убеждает, но сделать то, что она прямо ему запретила — никогда.

2.3. Не знаю, куда это отнести, к добавлениям, или к удалениям. Пусть будет здесь. В общем, в книге есть момент, когда Уотни размышляет о законах, действующих в космосе, и о том, что никто не дал ему формального разрешения подняться на борт космического корабля, на котором он улетит с Марса. И никто не может дать ему такое разрешение, пока он не доберётся до этого самого корабля и не поднимется на его борт, потому что из-за глупой случайности он лишился связи с землёй, и восстановить её не может. Так вот: в фильме эти его рассуждения ОБСУЖДАЮТ НА ЗЕМЛЕ. Потому что в фильме случайности не было, связь с землёй у него есть, и он эти свои мысли передал в НАСА. И почему они таки не дали ему формальное разрешение?

2.4. Отставка Митча — что это было и нафига? Не смогли найти способ убить Шона Бина? В книге Митч рассуждает вполне логично — НАСА, чтобы избежать скандала, скроет бунт на "Гермесе", выдав вариант Рича за своё решение; а значит, все, в том числе Митч (и Льюис), в полной безопасности. Тем самым роман отвечает на вопрос: пошли ли Льюис и Мартинез по завершении полёта под трибунал. Не пошли.

3. То, что исчезло. Конечно, уместить роман целиком в один фильм невозможно, сокращения необходимы. Но исчезло некоторое количество вкусных моментов, без которых роман теряет своё очарование.

3.1. Бет Йохансен, обсуждая с отцом опасность, что они не смогут подцепить посланную с Земли капсулу с провиантом и другими припасами — и, как следствие, через месяц умрут от голода — говорит ему, что другие умрут, но не она. Потому что остальные решили, что покончат с собой сразу, не дожидаясь голода, а вся еда останется ей — а также четыре крупных, вполне съедобных куска мяса.

3.1.1. Астронавты у Вейра продумывают ВСЁ. Как говорит сама Йохансен "у них всегда есть запасной план". Это — их запасной план, для самого пикового расклада. Тот же Уотни, между прочим, предваряет КАЖДЫЙ свой шаг расчётами.

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

3.1.3. И ещё — астронавты склонны ВСЕГДА искать способ вырвать у природы хотя бы частичную победу. В данном случае — спасти хотя бы одного из них.

3.2. Эпизод с шлюзом в фильме — это такой "рояль в кустах", который резко урезает оставшееся у Уотни время. И только. Вся борьба Марка с утечкой воздуха из шлюза — выброшена, его попытки герметизировать скафандр свелись к нескольким полоскам изоленты, бросок в сдувшийся Хаб, где полный бардак (ещё бы, после взрывной декомпрессии-то) — исчез. И, кстати, шлюз, в романе имевший размеры телефонной будки, в фильме резко вырос. Из этого вполне можно было сделать напряжённый клаустрофобный эпизод, но — нет.

3.2.1. Действия Уотни в шлюзе — пример того самого "сначала планируем, потом делаем", несмотря на жёсткие ограничения по времени. В романе, а не в фильме.

4. Самое главное. В романе Марк Уотни — весельчак, балагур; по утверждению психолога НАСА, в стрессовой ситуации он шутит БОЛЬШЕ обычного. Юмор — существенная часть обаяния этого романа. В фильме Уотни превращается в унылую бездарность Мэтта Деймона.
migmit: (Default)
С 15 по 28 мая буду в Нью-Йорке. Вообще по рабочим делам — но 25-го схожу, наконец, в "Мет". Что на выходных буду делать — пока не решил.
migmit: (Default)
Вышел покататься, а там такое:
migmit: (Default)
А кто знает, можно ли купить какие-то акции в эрэфии, а потом продать их в нормальной стране? Чтобы не тащить крупные суммы через границу и не светить зарубежный счёт?

Мопед не мой, у меня все деньги, какие были, уже давно потраченыздесь.
migmit: (Default)
У нас на работе до недавнего времени использовали таск-трекер Trello. Сейчас переключаемся потихоньку на Asana; с этим делом я мало знаком, но отвращения не вызывает. Слава богу, не Rally.

Ну и я себе тоже завёл парочку борд в Trello, чтобы собственные планы расписывать. Так вот. Есть некоторое количество вещей, которые я намерен сделать... когда-нибудь. Или нет. Я их свалил в одну борду, которой некоторое время придумывал название.

Назвал "Ленивое почёсывание".
migmit: (Default)
Если вы заболели, то нужно принимать лекарства, помогающие от вашей болезни.

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

Другое утверждение: если вы здоровы, то принимать лекарства не надо. Это утверждение не настолько верно. Прививки — штука полезная. Да и витаминку съесть порой вполне можно. Однако в целом, всё-таки, лекарства сами по себе, для здорового человека, вредны.

Святой Августин сказал "Omnis civitas corpus est". "Всякое общество есть тело". Что нужно для существования этого тела? Хорошее здоровье.

Применяя всю эту теорию получаем, в первом приближении, что здоровому обществу лекарства не нужны, а больному (и даже выздоравливающему) — необходимы. Какие лекарства? Зависит от болезни, разумеется.

К чему я веду? К тому, что обществу, больному расизмом (и даже выздоравливающему, как сказано выше), нужны лекарства под названием "affirmative action". Обществу, больному гомофобией (опять же, даже выздоравливающему), необходимы лекарства под названием "гей-парады". Да, и то, и другое вызывает некоторое раздражение (у любого лекарства есть побочные эффекты). Но, судя по результатам, достигнутым одним из пациентов, помогает. Да, это немного, но... пациентов всего-то пара сотен, даже меньше, причём у многих из них есть гораздо более серьёзные проблемы. Работаем с тем, что есть.
migmit: (Default)
В СУПе явно сидят полные уроды. В половине журналов не показываются комменты. Причём я посмотрел JS — не понимаю, как такое могло получиться случайно. Пока решил проблему установкой GreaseMonkey и такого скрипта:
// ==UserScript==
// @name        LJ
// @namespace   migmit
// @include     *.livejournal.com/*
// @version     1
// @grant       none
// ==/UserScript==
window.show = function(){}
window.unshow = function(){}

Вроде, теперь работает.

Кроме того, ссылки на форму создания нового поста тоже нигде нет. Решается установкой закладки на http://www.livejournal.com/update.bml .

Update ([livejournal.com profile] exler подсказал): похоже, фишка в том, что эти суки удалили тему XColibur. Если её поменять на Horizon, то всё начинает работать. Другой вопрос, что смотрится этот Horizon отвратно по сравнению с.
migmit: (Default)
Уже в нескольких местах рассказывал одну и ту же байку. Надо бы оформить постом, и потом только ссылку давать.

Итак. Года два-три назад писал я на Эрланге. И вот возник один баг: некий процесс, скажем, Игрек, через некоторое время после запуска вдруг падает. Причём, скотина, падает даже без каких-либо сообщений в логах. А так как занят он довольно важным делом — теряется куча информации. Соответственно, релиз пришлось откатить (то ещё удовольствие) и начать разбираться.

Как оказалось, падает Игрек только под нагрузкой, так что скормить ему какие-то простенькие входные данные и аккуратно отследить, где именно его скрючит, не представляется возможным. Добавленные во все мыслимые места логи показывают, что падает процесс, в общем-то, где попало. Точнее не совсем где попало, в некоей небольшой области, но не в строго определённом месте. Я поначалу грешил на оптимизатор (случалось сталкиваться с тем, что лог выведен, а предыдущая строчка таки не выполнилась из-за того, что процесс упал), но потом понял, что наш случай таки выходит за пределы бардака, который может устроить оптимизатор. А самое смешное, что, судя по логам git, ни сам Игрек, ни вообще что-либо в непосредственной близости от него, никто не трогал уже несколько месяцев. С чего он вдруг падать начал?

Что оказалось в итоге. Был некий другой процесс, скажем, Ипсилон. И он-то как раз занимался совершенно простенькой деятельностью; он принимал сообщение, смотрел, куда его сунуть, и отсылал дальше. Причём он дожидался ответа от конечного получателя ("ага, получили, спасибо"), но сам никакого ответа отправителю не возвращал. Реализован он был через gen_server, но реально никакого внутреннего состояния там не было; если точнее, внутреннее состояние всегда оставалось [].

Но какой-то гений, который его писал (я уже не помню, кто это был) слегка ошибся. Если кто не знает, то gen_server требует, чтобы в сервере была реализована функция handle_cast, которая, собственно, и решает, как именно следует реагировать на поступившее сообщение. Бизнес-логику реализует, если угодно. Так вот, эта функция должна была бы возвращать {noreply, []} (говоря тем самым "ответа не будет, новое состояние []"), но вместо этого возвращала {ok, []}. Нарушение типизации такое, ага.

gen_server такого ответа не понимает. Ну, тупой он, не знает, что ok — значит, типа, всё здорово, давай дальше в том же духе. Поэтому, по завершении handle_cast, он, в полном соответствии с идеологией Erlang "let it crash" (т.е., "гори оно огнём") падает. Но дальше, опять-таки в полном соответствии с упомянутой идеологией, в дело включается супервизор. Который видит, что Ипсилон упал — и перезапускает его. А так как состояния у Ипсилона нет — всё работает как и должно. Вместо того, чтобы сидеть и дожидаться нового сообщения, Ипсилон падает, стартует заново, и дальше сидит и ждёт нового сообщения. И так оно работало не то чтобы месяцами — годами.

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

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