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

Очень опрометчиво как мне кажется, очень надеюсь, что никто не слил себе копии паспортов. Правда, я не очень понимаю зачем они, но слышал несколько историй (уж не знаю правдивых ли), когда по копии паспорта брали кредит, который потом приходилось выплачивать владельцу паспорта, а не настоящему заёмщику.
Светящийся Мост Мира в Тбилиси
Я со вчерашнего дня в Тбилиси, вчера гуляли по городу. К сожалению, Тбилиси не раз сжигали подчистую, поэтому похвастаться множеством исторических зданий город не может (хотя они и попадаются), зато есть интересные новые постройки, например, Мост Мира (მშვიდობის ხიდი), пешеходный мост через реку Кура, недалеко от резиденции Саакашвили, действующего президента Грузии.

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

Удивил меня и факт их наличия, и то, что они днём тоже работали. Выглядит восхитительно. Соединены они едва заметными проводками, идущими внутри стекла горизонтально, если сильно не приглядываться, они совершенно неразличимы.
Оптимизирующий транслятор Brainfuck → PHP
Грех было не запустить свою же программу из предыдущего поста на собственном стареньком (2005 года) оптимизирующем трансляторе Брейнфака в ПХП. Оказалось, оттранслировал его неправильно.
Нашёл баг (неверно транслировалась последовательность «[<]» в некоторых случаях), исправил, почистил, убрал наследие ПХП 4, ввёл небольшую новую оптимизацию и выхожил на ГитХаб.
История этого интерпретатора тянется ещё
В 2005 году я переделал его на ПХП и попробовал предложить на ПЕАР (к тому времени у меня там уже было несколько модулей), но там он не прошёл предворительный осмотр, сказали, что такой модуль не нужен.
Так он у меня и валялся в разделе «Храню», пока я не запустил сегодня на нём свою программу. Должен, кстати, сказать, что интерпретатор держит марку, например, вот вычисление числа «Пи» на моём трансляторе и интерпретаторе на Джаве:

Хотя, может быть, Джава просто медленно стартует.
Заодно, кстати, на своей же программе нашёл баг в расцветке Брейфака, которую я делал для библиотеки highlight.js.
JavaScript, совмещённый с Brainf*ck: «hello friends» ★
Помните моё поздравление с Новым годом, написанное на запутанном Джаваскрипте? Такой же принцип я использовал для привлекающего внимание баннера нашей компании.
Я давно уже заметил, что это сильно похоже на язык Брейнфак. Давно хотелось попробовать смешать эти два языка в одном листинге. Со стороны Брейнфака всё довольно гладко — надо только балансировать квадратные скобки (но Джаваскрипт требует того же) и избегать вечных циклов (тут уже сложнее, так как листинги на запутанном Джаваскрипте часто требуют пустых циклов), незнакомые символы этот язык пропускает. В Джаваскрипте синтаксис построже, там нужно было помучаться больше.
Получилась следующая программа (используется расцветка для Брейнфака, чтобы было видно какие части программы он пропускает):
($=!{}[/-/+/\+@+@+!+/)-!{$:/>/+/!>/+/</}+
(_=!-{}-$+/>/)-~(/</)+
(_$=-$-{}-$+/>/)[$$=-(~-~$+~-~$-!+{$:/!</})+
_[$$+=~-~{$:/]/}+
_$-~{}+
_$[$$+~{_:-$>/]/}+
$-$$]
Оба интерпретатора выполняют её с разным результатом, Брейнфак выводит «hello», а Джаваскрипт — «friends»:
bolk@Bolk ~$ ./brainfuck <<<'($=!{}+[/-/]+/\+@+@+!+/)[-!{$:/>/+/!+>/+/<</}]+(_=!-{}+[-$]+/>/)[-~(/>[->+>+<<]>>[-<+<+>>]<<</)]+(_$=[-$][-{}]+[-$]+/>>/)
[$$=-(~-~$+~-~$-!+{$:/!+>+>+>+>+>+<<<<</})]+_[$$+=~-~{$:/[->++++>+>++++++++>++++++++>+++++++++++[<]]/}]+_$[-~{}]+_$[$$+~{_:-$>/[.>]/}]+$[-+-$$]'
hello
bolk@Bolk ~$ v8 -e 'print(($=!{}+[/-/]+/+@+@+!+/)[-!{$:/>/+/!+>/+/<</}]+(_=!-{}+[-$]+/>/)[-~(/>[->+>+<<]>>[-<+<+>>]<<</)]+(_$=[-$][-{}]+[-$]+/>>/)
[$$=-(~-~$+~-~$-!+{$:/!+>+>+>+>+>+<<<<</})]+_[$$+=~-~{$:/[->++++>+>++++++++>++++++++>+++++++++++[<]]/}]+_$[-~{}]+_$[$$+~{_:-$>/[.>]/}]+$[-+-$$])'
friendsПовозиться пришлось прилично, если честно, некоторые конструкции ДжЭс делит с Брейфаком (большинство квадратных скобок),
Слово «friends» я выбрал потому что его легко записать:
"false"[0]+"true"[1]+"undefined"[5]+"true"[3]+"undefined"[1]+"undefined"[2]+"false"[3]Принцип я
ГЛОНАСС
Как мне видится, ГЛОНАСС имеет огромное значение для обороноспособности страны. По спутникам сейчас ориентируется много военной техники — корабли, ракеты и прочее. В случае военного конфликта вероятный противник выключит ГПС или, что ещё хуже, начнёт врать в координатах и, привет, приехали.
Мне казалось, что гражданским, нам с вами, непосредсвенной пользы никакой — если ГПС начнёт врать, то нас с вами ГЛОНАСС не спасёт — в данный момент все буржуйские чипы в наших с вами любимых смартфонах и навигаторах, обращаются к ГЛОНАССу, только если у ГПСа дела плохи — мало спутников или приём плохой. Таким образом, если ГПС будет ловиться хорошо, но врать, ГЛОНАСС опрошен не будет, а если и будет, то я не сомневаюсь, что чип отдаст предпочтение координатам из ГЛОНАССа.
Но мне было интересно — а бывают ли ситуации, когда ГПС вообще не ловится, а ГЛОНАСС виден и вчера, на демонстрации татарстанской системы «ГЛОНАСС+112» я поймал редкий кадр — трекер на машине медицинской помощи не смог поймать спутники ГПС, но поймал четыре спутника ГЛОНАССа:

Так что, оказывается, и нам, гражданским, бывает польза от ГЛОНАССа.
Травля «Жены Футболиста»
Я не одобряю травлю «Жены Футболиста», полностью согласен с основным тезисом, описанным в статье «Потому что нельзя быть красивой такой» некого «Николаича» из ЖЖ — героиня в нашу жизнь не лезла, в депутаты не стремится, на эстраде не появляется. Зачем нужно было так унижать человека, пусть необразованного, мне неясно.
Но с остальными мыслями не согласен категорически.
А сколько человек, радостно сообщающих Инне, что она дура, может сходу вспомнить хотя бы теорему Пифагора? А доказать ее? А перечислить законы Ньютона? А рассказать суть теории относительности буквально в нескольких словах? А сам гений журналистики смог бы, скажем, взять простенький интеграл? Да хотя бы решить квадратное уравнение? А если с ним под камеру поговорить о валентности, дискриминанте, отличии кольчатых червей от круглых? Попросить число пи написать, хотя до восьмого знака после запятой.
В этом списке я не знаю только отличие кольчатых червей от круглых, даже Пи могу написать до десятого знака, благодаря мнемоническому стихотворению, которое прочитал в детстве в книге «Детство Марселя» (автор — Марсель Паньоль).
И второе:
Но как ведь приятно чувствовать себя умным за чужой счет! Особенно за счет молодой, красивой и богатой девки.
— Она же дура! — Зато молодая. — Но ведь дура!!! — Зато Миссис Россия. — Но дура же… — Зато муж известный спортсмен. — …дура?… — Зато наверняка долларовая миллионерша.
Для меня высочайшая ценность в жизни — возможность самореализации. Деньги — необходимость, как воздух, но их количество в моей системе ценностей не достижение само по себе, красота и молодость — тоже
Котельная соломинка
Чего только не узнаешь в интернете! Оказывается некоторым людям в слове «коктейльная» слышится «котельная», что привело к появлению совершенно дикого выражения «котельная соломинка»!
Я, когда впервые прочитал, представил себе котельную трубу, засунутую в гигантский бокал.
MongoDB разонравилась
Очень много раньше хорошего слышал про «Монгу», прочитал по ней пару книг, даже пытался использовать в рабочих проектах. Всё, теперь ни ногой.
Естественно, если
Инвертирование в CSS без фильтров
Немногие знают, что инвертирование части
Я говорю о поддержке значения invert свойства

Наложить сверху элемент с аутлайном можно любым способом, я использовал position: absolute:
<style>
.invert {
outline: invert solid 75px;
position: absolute;
width: 50px; height: 0;
margin: 75px 0 0 75px;
}
.content {
width: 200px;
height: 150px;
position: absolute;
left: 200px;
top: 200px;
text-align: center;
}
</style>
<div class="content">
<div class="invert"></div>
<img src="/i/foto.jpg">
</div>Для того, чтобы высчитать размеры накрывающего блока, нужно немного арифметики. У меня большую размерность имеет ширина (накрываемый блок размером 200×150), поэтому будем плясать от неё. Высота накрывающего блока должна быть в этом случае равна нулю, ширина — разности между шириной и высотой накрываемого блока,
Думаю, ни для кого не составит труда самостоятельно провести вычисления для обратного случая — когда высота больше ширины.
Нету? Есть!
Да кто это придумал, что в русском языке нет слова «нету»? В словаре Ушакова есть, в Малом энциклопедическом словаре есть, а в русском языке, стало быть, нету? Единственное, «нету» не может применяться как антоним «да», такое значение в современном языке считается устаревшим.
Mazda CX-5 и официальная сигнализация
Мы тут неделю назад машину купили, «Мазду
Речь сейчас не совсем про это. Мы хотим автозапуск в машину (на прошлой машине был, теперь без этого жить сложно), но в салоне сказали, что сигналку надо ставить у них, якобы, иначе машина снимается с гарантии. На мой взгляд, это нарушение шестнадцатой статьи «Закона о защите прав потребителей», во втором пункте русским языком написано:
Запрещается обусловливать приобретение одних товаров (работ, услуг) обязательным приобретением иных товаров (работ, услуг). Убытки, причиненные потребителю вследствие нарушения его права на свободный выбор товаров (работ, услуг), возмещаются продавцом (исполнителем) в полном объеме. Запрещается обусловливать удовлетворение требований потребителей, предъявляемых в течение гарантийного срока, условиями, не связанными с недостатками товаров (работ, услуг).
Тонкое подчёркивание ссылок с разрывами на буквах «р», «у» и других
У меня на сайте два изменения.
Но просто сделать так же не интересно, и я решил сделать лучше. Спорно получилось ли лучше, тут есть простор для экспериментов.
Подчёркивание ссылок и Тёмы и Ильи сделано одинаково — убрано родное подчёркивание, а взамен установлено свойство
Сначала позвольте показать что получилось, обратите внимание на разрыв на хвостике «р», когда я добился более плотного прилегания, оказалось, что перечёркивание хвостов меня не устраивает, хорошо что удалось это поправить:

Собственно, мне захотелось сначала исправить этот недостаток — слишком далеко отстоящее подчёркивание. Готовое решение у меня было, я
Я довольно долго эксперементировал и нашёл,
И вот тут меня ждала неприятность. Дело в том, что некоторое время назад появился способ, позволяющий узнать какие сайты вы посещали; интернет пестрел скриптами, которые в шутку журили вас, если обнаруживали, что вы до этого посещали
Способ проверки простой — на экран выводится ссылка, посещение которой пользователем мы хотим проверить, а потом мы смотрим у неё, скажем, цвет или другой параметр, который мы установили различающимся для посещённых и не посещённых ссылок. Я хорошо помню эту историю, потому что сделал на основе этого скрипт, который определял логинились ли вы в Гмейл — я просто смотрел загружал ли ваш браузер определённые ресурсы, которые грузятся только после логина. Но прежде чем я придумал как это можно практически использовать, дыру начали закрывать, так что скрипт не пригодился.
Естественно, браузеры не могли не отреагировать на эту дыру. Кажется, Файерфокс первым отреагировавшим на проблему — они предложили «врать» разработчику о стиле посещённых ссылок и разрешили менять для них только строго определённый список
Увы, это меняет многое. У меня для того, чтобы цвет посещённых ссылок не различался с цветом подчёркивания, нужно было поменять
В голове перед сном я прокручивал список разрешённых к изменению свойств и одно из них,

Теперь, если выставить его в качестве стиля заднего фона ссылки, а потом ещё задать цвет фона, ссылка оказывается аккуратно подчёркнутой в нужном мне, регулируемом месте (я же могу сделать прозрачным любой пиксель в фоне).
Ок, это сработало для посещённых ссылок, но в «Хроме» и «Сафари» меня ждал неприятный сюрприз: на мгновение, до того как браузер успевал отрисовать мой ГИФ на заднем фоне, все ссылки выглядели уродливо: был виден их цветной задний фон:

Я подумал, что мне бы помогло, если я бы
Получился следующий стиль:
a {
background: #00e url(data:image/gif;base64,R0lGODlhAQA7APABAP …и так далее… AAACCISPqcvtEEwBADs=) 0 100% repeat-x;
background-image: -webkit-linear-gradient(90deg, #fff 0, #fff 2px, rgba(0,0,0,0) 2px, #fff 3px, #fff 59px);
}Это полностью решило проблему — мигание на вебкитовских браузерах пропало. Кстати, я применил стиль линейного градиента, в новом формате — он работает в «Сафари» с версии 5.1 и в «Хроме» с десятой. Мне кажется, в этом нет ничего страшного — доля старых браузеров, в данном случае, ничтожна мала.
Когда я поставил подчёркивание куда мне хочется, возникла другая проблема. Эстетическая. Подчёркивание довольно уродливо перечёркивало нижние выносные элементы букв. На память, по аналогии, пришло моё баловство с фильтром Glow в Интернет Эксплорере. Там удавалось добиться интересных эффектов с задним фоном, поскольку эффект ложится и на него. Тут у меня ситуация такая же, но фильтров больше не существует, правда есть их реинкарнация —W3C заботливо слизало идею в другом синтаксисе.
После некоторых экспериментов, я решил, что тут подходит
a {
text-shadow: 1px -1px 1px white, -1px -1px 1px white, 2px -1px 2px white, -2px -1px 2px white;
}В браузерах, которые этот стиль не поддерживают, подчёркивание просто не будет разорвано.
Стиль, в результате выглядит примерно так:
a {
text-shadow: 1px -1px 1px white, -1px -1px 1px white, 2px -1px 2px white, -2px -1px 2px white;
text-decoration: none;
background: #00e url(data:image/gif;base64,R0lGODlhAQA7APABAP … и так далее … AAACCISPqcvtEEwBADs=) 0 100% repeat-x;
background-image: -webkit-linear-gradient(90deg, #fff 0, #fff 2px, rgba(0,0,0,0) 2px, #fff 3px, #fff 59px);
}
a:visited {
color: #551a8b;
background-color: #551a8b;
}
a:hover {
background-color: red;
color: red;
}Очень компактно, без лишнего и с плавной деградацией для старых браузеров.
Казань → Лениногорск → Казань
Сегодня вечером выезжаем в Лениногорск, обратно — в воскресенье утром.
Как собрать CuneiForm по старый Линукс
Если у вас не собирается CuneiForm под Линукс с ошибкой
Kern/rstr/librstr.so.1.1.0: undefined reference to `htobe32'То значит у вас очень старый glibc. Чтобы исправить ситуацию нужно в файл cuneiform_src/Kern/rstr/src/perc.c, в начало, добавить следующий код:
#include <endian.h>
uint32_t htobe32(uint32_t x) {
union { uint32_t u32; uint8_t v[4]; } ret;
ret.v[0] = (uint8_t)(x >> 24);
ret.v[1] = (uint8_t)(x >> 16);
ret.v[2] = (uint8_t)(x >> 8);
ret.v[3] = (uint8_t) x;
return ret.u32;
}
#define swapbytes(a) do { (a) = htobe32(a); } while (0)Тогда всё соберётся. У меня собралось под ЦентОС 5.2.
Американские полицейские тоже живые люди!
Американские фильмы давно создают впечатление, что американский полицейский этакий ангел во плоти — корректен, неумолим, лоялен. Ан нет, пошаливают, оказывается, американские полицейские. В частности — гоняют на дорогах, как российские. Доказательства этому добыла одна газета из Южной Флориды весьма остроумным способом:
Для расследования журналисты запросили из полицейских участков записи о прохождении патрульными машинами пропускных пунктов «СанПасс» на платных дорогах. В каждой записи «СанПасс» стоит отметка с точным временем прохождения пункта. Полиция предоставила информацию, не заподозрив подвоха.
Полицейские не подумали, что если замерить расстояние между соседними пропускными пунктами SunPass и зная время поездки между ними, то можно вычислить скорость автомобиля. (…)
Анализ данных более миллиона записей с пропускных пунктов «СанПасс» с 2004 года выявил 793 полицейских машины, которые двигались на скорости 145—210 км/ч, зачастую в нерабочее время. В нарушителях оказалась пятая часть полицейского автопарка. Более половины случаев превышения скорости зарегистрировано за пределами зоны патрулирования, большинство автомобилей ехало по стандартным маршрутам, скорее всего, домой после работы или утром на работу.
В Казани, кстати, компания «Автодория» собирается делать то же самое, но уже с оборудованием, предназначенным именно для этого (кажется, они всё ещё в процессе тестирования своей системы) — будет фотографировать автомобиль в двух точках и считать скорость его движения по школьной формуле.
Почему меня беспокоит размер программы
В комментариях к одной из заметок, где я показывал программу на Гугл Гоу меня спросили почему мне так важен размер программы, я там как раз сетовал, что размер скомпилированной программы получился около четырёх мегабайт.
С одной стороны, конечно, средства хранения сейчас дёшевы и для современных дисков это не объём. С другой стороны, с оперативной памятью всё несколько похуже. Мы пока разделяем два пространства: пространство выполнения программ и пространство их хранения. Хотя идут эксперименты по их совмещению, в продаже пока ничего подобного нет.
Поэтому данность: количество оперативной памяти ограничено, в случае моего ноута — сильно ограничено, у меня их всего 2ГиБ, это мало по нынешним временам, но что делать. Типичные современные объёмы оперативной памяти не отличаются от этой цифры на порядки, обычно это 4—8 ГиБ.

Соответственно, меня расстраивают большие программы просто по той причине, что они занимают много памяти, которой и так немного. Если у вас открыт браузер, Фотошоп, Офис и ещё
Соответственно, чем больше некомпактных утилит (например, на «Гоу») будет работать, тем меньше у меня памяти, тем медленнее система, что меня расстраивает, конечно.
Спасибо, «Яндекс.Маркет»!
В начале года заказывал массажную накладку на кресло, доставка из Москвы, заказывал в фирме, название которой помню ещё по работе в «Яндексе» — там много народу пользовалось её услугами, поэтому подвоха не ожидал. Назову её «Х». Не потому что они плохо со мной обошлись, а потому что название начинается с этой буквы.
Узнал сколько стоит доставка в Казань — 300 рублей, что показалось мне вполне приемлемой ценой. На другом сайте доставка была бесплатна, но лучше покупать в знакомом месте. Когда товар доставили, меня ждал сюрприз. Оказывается, фирма «Х» считает «доставкой» доставку только до перевозчика, она и стоит 300 рублей, перевозчик доставляет в Казань за 300 рублей, а потом ещё, если вы не можете забрать товар со склада (а мы не могли, перевозчик по выходным и вечерами товар не выдаёт), доставка по городу обойдётся ещё в 300 рублей. Я, конечно, всё оплатил, хотя доставка вышла мне в три раза больше обещанной.
Попробовал поспорить с менеджером, бесполезно, она утверждала, что обещала мне именно такую доставку.
Ну ок, деньги заплачены, их уже не вернуть, в сердцах
Кстати, в качестве альтернативы мне предлагали скидку на следующую покупку в этом магазине, но от этого я сразу оказался, по понятным, наверное, причинам. Я далёк от мысли, что все менеджеры в «Х» такие, но осадочек остался, дальше я связываться с этой фирмой не хочу.
Неожиданно оказалось, что «Яндекс.Маркет» работает ещё в одном направлении — позволяет не только выбрать товар, но и добиться справедливости.
Слава Герострат
Мне очень нравится выражение «слава Герострата», обычно оно значит некоторую позорную славу, которую обладатель получил
Напомню, что Герострат — молодой пастух, житель Эфеса, сжегший храм Артемиды в своём городе 21 июля 356 года до нашей эры. Когда его на суде спросили для чего он это сделал, он рассказал, что хотел, чтобы его имя помнили потомки. Это многие помнят, история довольно известная.
Менее известно, что Герострат сжёг не тот храм, который потом стал одним из семи чудес света, а старое деревянное здание, на месте которого построили новое, оно и вошло позже в список чудес.
Ещё менее известно, что Герострат, как считается, не настоящее имя пастуха, а прозвище, которое ему дали жители города. То есть ирония выражения «слава Герострата», как мне кажется, ещё и в том, что Герострат
Удивительный Си
Кажется, на любом языке программирования можно написать очень запутанную программу. Лидер, наверное,
main(_){_^448&&main(-~_);putchar(--_%64?32|-~7[__TIME__-_/8%8][">'txiZ^(~z?"-48]>>";;;====~$::199"[_*2&8|_/64]/(_&2?1:8)%8&1:10);}Эта программа выводит время на момент компиляции в следующем формате:

У Анатолия Воробья есть полный анализ этой программы, остроумно сделано!
Казань → Ульяновск → Казань
12 и 13 апреля буду в Ульяновске, на «Стачке» — большой итишной конференции.