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

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

Вообще, противоугонных аксессуаров хватает, на тросиках и замках свет клином не сошёлся — бывают «секретки» вместо эксцентриков, есть фонарь с модулем ДжиПиС, который сообщает хозяину свои координаты или такой же модуль, скрытый внутри рамы, в общем, чего только нет.
Своей сигнализацией пользуюсь уже неделю (устанавливаю, когда приезжаю на работу), а на ночь теперь велосипед
Chrome (but not Safari) CSS hack
Обратил внимание, что половина интернета сбилась с ног в попытках найти стильевой хак для «Хрома», который не срабатывал бы в «Сафари». Неясно почему его ещё никто не придумал, у меня на это ушла пара минут:
@supports (top: 0__qem) {
.chrome-only {
border: 1px solid #000; /* стиль только для Chrome (не Safari) */
}
}Работает начиная
Эта стандартная конструкция предназначена для проверки — поддерживает ли браузер указанное свойство. Недостаточно подставить туда свойство с префиксом webkit — сейчас многие браузеры читают такие свойства как свои,
Чтобы отсечь лишнее, я использую нестандартную единицу измерения Вебкита — «__qem», я о ней писал несколько лет назад. Вместе получается, что стиль в «Сафари» не срабатывает, потому что тот не поддерживает «@supports», а в остальных браузерах — потому что они не поддерживают «__qem».
Естественно, обёртки над Вебкитом (новая «Опера», браузер «Яндекса» и прочее) стиль увидят — но на то они и обёртки.
Случайные числа в Sed
После шахмат на «Седе» я, похоже, в глазах общественности стал
В основном, задачи очень простые и даже рутинные, ничего интересного, но вот вчера прислали действительно интересный вопрос. Вопрос в том можно ли командами «Седа» получить случайное число?
Уж не знаю что именно такого спросивший собирается с ним потом делать, надеюсь,
Итак, что же можно сделать? Команды жёстко заданы и менять их нельзя, возможно
Я
Тогда я не обратил на это должного внимания, а когда получил упомянутое письмо — вспомнил. Общая идея оформилась быстро: нужно очистить экран, скрыть курсор, выставить цвет фона и шрифта одинаковыми (чтобы скрыть прочитанный из файла мусор — ведь sed выведет прочитанное на экран), прочитать файл случайных чисел, потом сосчитать позицию в которой оказался курсор, восстановить параметры экрана и вывести позицию курсора.
В манипуляциях с экраном ничего сложного нет — существуют специальные управляющие последовательности при помощи которых это делается, даже координаты курсора можно получить ими же.
Получившийся код вполне уверенно работает, разве что у чисел, которые выводятся, распределение далековато от равномерного, но алгоритмы, исправляющие этот недостаток, в изобилии есть в интернете. Да и сам алгоритм получения случайного числа можно изменить: например не считывать позицию курсора,
В общем, у меня вышел вот такой код:
#!/usr/local/bin/gsed -n -f
# Очищаем экран, выставляем цвет чёрное на чёрном, убираем курсор
1i\\x1B[2J\x1B[f\x1B[30;40m\x1B[?25l
# Читаем файл случайных чисел, пока не встретим перевод строки
1R /dev/urandom
# Запрашиваем текущие координаты курсора
1a\\x1B[6n
2{
# Смотрим чему равна первая (Y) координата, оставляем только её
s/.*\x1B\[\([0-9]*\);1R.*/Random number: \1/
# Убираем текущий текст в буфер
h
# Очищаем экран, восстанавливаем цвет и курсор
i\\x1B[2J\x1B[f\x1B[0m\x1B[?25h
# Вынимаем из буфера сохранённое
g
# Печатаем сохранённое на экран
p
# Выходим
q
}У него есть и недостаток — так как «Сед» всегда совершает действия только после того как получит данные снаружи, вам придётся дважды нажать «Энтер», чтобы получить ожидаемое. Но от этого уже никуда не денешься, разве что можно сократить количество нажатий до одного — если отказаться от считывания координат.
Что почитать в выходной
«25 лет: счастье и разочарование» — история условной Люси, представительницы поколения, воспитанного в завышенных ожиданиях. Трансформация «ты сможешь стать кем угодно» в «ты станешь кем захочешь» как причина кажущейся неудачи в жизни Люси.
Питерский мастер Юрий Хвтисишвили сделал потрясающую копию мотоцикла
«Инвалиды не хотят никого вдохновлять» — перевод выступления Стеллы Ёнг, участницы сообщества людей с ограниченными возможностями. На её взгляд (по всей видимости в Америке) инвалидам фактически вменили в обязанность вдохновлять своим примером всех остальных, от них ждут жизненного урока несмирения, мотивационных речей и всего такого. Стелла Ёнг с таким отношением несогласна.
Я вижу в этом знак того, что инвалидам в Америке живётся уже хорошо или хотя бы сносно. Публичные выступления, мотивационные речи — всё это, на мой взгляд, попытки привлечь общественное внимание
«Эволюция „зиги“» — версия, откуда появился жест, знакомый нам с детства по фильмам про войну — так называемая «зига», жест, которым приветствовали Гитлера. А так же трансформация этого жеста в другой — «рука на сердце», который сейчас широко используют политики.
«Как наши предки спали по два раза за ночь и проблема „шока настоящего“» — в статье утверждается, что буквально до недавнего времени (по историческим часам) люди в Европе спали дважды за ночь. Примерно в половине третьего они просыпались, час или два бодрствовали, потом засыпали ещё раз, до утра.
Чудно́е в PHP
На работе сейчас с любопытным багом в ПХП разбирались. Разобрались, вот выжимка:
interface I {}
var_dump(class_exists('cI')); // false
var_dump(class_exists('C')); // true
class cI implements I {}
class C {}
var_dump(class_exists('cI')); // true
var_dump(class_exists('C')); // trueВыходит, если класс реализует интерфейс, то его не существует выше строки, где он декларируется, класс без реализации интерфейса виден в любом месте. Версия ПХП — 5.5.11. Я для интереса попробовал на 5.6а1 (есть под рукой собранный) — работает так же.
Что почитать перед выходными
Алекс Экслер выложил у себя в блоге историю Максима Баталина о разблокировке Айфона, заблокированного
В блоге Архивариуса появилась статья о краске «Мумия», которая
Разоблачение «Шестидесяти фактов о Николае Втором» — очень проработанная статья в историческом сообществе Живого Журнала.
И напоследок — небольшая презентация об интерпретаторе ПХП нового поколения — ПХПНГ, несмотря на краткость, самая суть передана.
CSS variables
Константы в ЦСС (которые
Идея замечательная — если у вас есть
:root {
--bgcolor: #000;
}
body {
background-color: var(--bgcolor);
}Как видите, префикс «var» сменился на два минуса в полном соответствии с изменениями в стандарте. Чем не устроил предыдущий синтаксис мне не интересно, но этот префикс набирать определённо быстрее —
Гобустан
Мы тут сегодня из Азербайджана вернулись, очень насыщенная программа получилась, масса впечатлений. Совершенно случайно исполнилась детская мечта, не мечта даже… не знаю как выразиться.
Словом, когда я в детстве разглядывал в книжках фотографии с рисунков пещерных людей и я мечтать не мог к ним прикоснуться в жизни. Это казалось совершенно нереальным, что я и не мечтал — зачем мечтать
Во взрослом возрасте мечта уже оформилась — хотелось увидеть эти рисунки, потрогать их, правда я понятия не имел как к этой мечте подступиться — мне всё казалось, что в открытом доступе таких мест быть не может, всё найденное должно быть обнесено забором с колючей проволокой, но вдруг посчастливится наткнутся

И вот — Гобустан, заповедник в Азербайджане, шесть тысяч наскальных рисунков, среди которых можно бродить вечность!
Вечности у меня не было, но около часа я со светящимися глазами разглядывал рисунки, датированные 3—2 тысячелетием (не годом!) до нашей эры.
На рисунке выше изображена плоскодонная лодка с солнцем в носовой части, а так же несколько людей с луками, перекинутыми через плечо и стрелами в руках. Зигзаги над головой одного из них означают дождь и облака.
Детализация у рисунков, кстати, абсолютно разная — от простых схематичных, по которым иногда и не понять что изображено, до неплохо выполненных силуэтов, вероятно
Тематика тоже разная — много рисунков животных, с ритуальным, как считается, предназначением (потыкать копьём в рисунок — хорошая примета перед охотой), но есть и чисто бытовые сцены — религиозные обряды, танцы и так далее. Комикс, которому несколько тысячелетий.
Казань ✈ Баку ✈ Казань
На приближающихся праздниках решили с женой побывать в Баку.
Купил велосипед

Раньше я иногда арендовал велосипед, чтобы просто покататься с друзьями, а в этом году решил неожиданно купить собственный. Купил ЖиТи Аваланч Элит 2014 года. Приобрёл в среду на прошлой неделе, с тех пор катаюсь почти каждый день.
Попробовал приезжать на нём на работу и оказалось, что это удобнее и интереснее такси — появилось
Ребята, которые узнают, что я сейчас езжу на велике, всё спрашивают потею ли я. Потею — там, где рюкзак прилегает к спине. Решается проблема просто (душа у нас нет) — в офис берётся запасная футболка, переодеваешься и идёшь работать.
IE9 и таблицы

В продукте, которым я занимаюсь, минимальная версия Эксплорера, которую я решил поддерживать — девятая. В будущем я хочу поднять это требование до десятой, а пока приходится жить с тем, что есть — клиенты не готовы к резким переменам и я их понимаю.
Наткнулись на странную проблему в этой версии Эксплорера — некоторые таблицы выглядят как на снимке выше — ячейки в строках иногда выпирают вправо безо всякой видимой причины.
Дело оказалось в пробелах между ячейками — верстальщик отформатировал шаблон, чтобы он лучше читался, и все браузеры всё показали правильно, один девятый Эксплорер сошёл с ума. Лечится проблема запросто — либо убираем форматирование в шаблоне, либо убираем его прямо в браузере.
Я выбрал второй путь. Пусть лучше шаблон выглядит читаемо, а костыль для девятого Эксплорера всегда можно будет убрать лёгким движением руки. Выглядит он вот так, кстати (используется jQuery, само собой):
$("table tr").contents().filter(function() {
return this.nodeType == 3;
}).remove();Колумб, который Христофор, хороший был моряк…
Завтра вступает в силу вторая часть запретов из прошлогоднего антитабачного закона. Станет запрещено курить в торговых центрах, поездах дальнего следования, гостиницах, ресторанах, кафе и барах.
Штраф за курение в неположенном месте — до полутора тысяч рублей.
И и И (логические выражения в PHP)
В ПХП есть два набора команд булевой логики — многим более привычные «&&» и «||», но кроме них — напоминающие о Бейсике и Эскюэле «and» и «or». Даже программирующие на языке годами часто не знают чем они отличаются, между тем употребление второго набора может привести к трудноуловимым багам, потому что ведут они себя чуть иначе.
Вся разница заключается в приоритетах выполнения, большинство языков, разбирая выражение, опирается на приоритеты выполнения, например, умножение приоритетней сложения, этому нас учат в школе, в ПХП и многих других языках — так же: 2 + 2 × 2 = 6, а не 8.
Так вот. Набор «and» и «or» — чуть ли не самые низкоприоритетные из всего, что может встретиться, а «&&» и «||» находятся
// какая-то переменная, значение которой в коде,
// к этому моменту, стало true
$check = true;
// а это другая контрольная переменная, где-то в коде
// она приобрела значение false
$criteria = false;
// и вот мы подходим к главному
$ret_bool = $criteria || $check;
$ret_logic = $criteria or $check;
var_dump($ret_bool, $ret_logic);Будут ли отличаться значения переменных ret_bool и ret_logic после выполнения программы? Конечно будут, иначе я бы не писал этут статью, неправда ли? Значение первой будет true, второй — false.
Почему так? Приоритеты! ПХП, исполняя предпоследние две строчки кода видит их
$ret_bool = ($criteria || $check);
($ret_logic = $criteria) or $check;Исполнение идёт строго по приоритетам, так как во втором случае операция присваивания имеет больший приоритет, чем «or», первым выполняется именно она, а проверка переменной check осуществляется, но её результат отбрасывается.
Это отлично подходит для программировая в «хакерском» стиле:
$ret_logic = $criteria or CheckSomething();Функция CheckSomething() вызовется только в том случае, если criteria будет равна false или эквиваленту, но зато результат функции никак не повлияет на значение ret_logic.
Впрочем, я такой способ программирования крайне не рекомендую — для современных программистов он сложен.
Свёртка в вебе
Я
<style>
.edge {
-webkit-filter: url(#edge);
filter: url(#edge);
}
</style>
<svg style="width: 0; height: 0">
<filter id="edge">
<feConvolveMatrix kernelMatrix="-1 -1 -1 -1 9 -1 -1 -1 -1" />
</filter>
</svg>
<image src="sample.jpg" class="edge">Магические числа в матрице — специальное ядро.
Впрочем, и раньше можно было внедрить в ХТМЛ
С таким возможностями, немудрено, что онлайновых «фотошопов» развелось, как грязи. Немного помучавшись с консолью, можно найти способ как поменять матрицу и это тоже будет работать! Например, вот так меняется число по центру (где у меня в примере девятка записана):
var arr = document.getElementById('edge').childNodes;
for (var i = 0; i < arr.length; i++) {
if (arr[i].kernelMatrix) {
arr[i].kernelMatrix.baseVal.getItem(4).value = newvalue;
break;
}
}Осталось только соединить этот код с «крутилкой» и готов
Goto
Нередко в разговорах программистов всплывает тема оператора «goto». Например, сообщество крупно побурлило после появления его в ПХП. Многие считают, что оператор вредный, его появление в языке «понижает» язык в классе до Бейсика (хотя современные Бейсики — очень мощные языки) и он несёт только вред.
Грустно то, что обычно критики предоставляют аргументы на уровне вкусовщины, даже не пытаясь сформулировать аргументы, видимо считая, что уровень «плохо, потому что goto» достаточен.
Попробую возразить.
С последним аргументам в спорах обычно не соглашаются, говорят, что goto как правило умеет больше, чем эта пара операторов. Тут надо отступить и вспомнить чем вообще был плох обсуждаемый оператор.
Плох он, вообще говоря,
Так вот, всего этого современный оператор просто не умеет. Современный goto — тёзка того старого, плохого, сейчас он умеет переходить на метку, но не на всякую, а с огромным количеством ограничений и его использование не более вредно или стыдно, чем использование break или continue.
В Ереване не без происшествий
Мы сегодня вылетам из Еревана через Москву домой, в Казань. Впечатлён действиями ереванской полиции.
Ещё в Казани я договорился о трёх экскурсиях, две из них — с Дианой Меликян, первую она организовала, наняв гида и водителя девятого мая, вторая должна была быть сегодня. Ещё девятого у нас попросили полную сумму, хотя у меня шевелнулся червячок недоверия, но первый день омрачать подобными переговорами не хотелось, мы были уставшими (встали в три утра), жаждали отдыха и новых впечатлений. В общем, заплатили вперёд.
Сегодня утром выяснилось, что Диана
Возможно надо было плюнуть и посмотреть в последний день хотя бы пару достопримечательностей самостоятельно, пользуясь предоставленной машиной, но во мне взыграло чувство справедливости. В общем, я позвонил в полицию.
Минут через 40 мы уже разговаривали с колоритным майором и его помощником — составляли протокол. Они приехали к нам прямо в хостел, пешком поднявшись на пятый этаж, не поленились тщательно разобраться в ситуации,
Причём, как оказалось, решение этих проблем — вовсе не дело полиции, они должны были только взять заявление, с остальным разбирался бы суд. Но из уважения к гостям из России они доработали ситуацию до конца.
В остальном, нам всё понравилось. В Ереване всё очень дёшево по нашим меркам, красивая природа, очень вкусная еда и прекрасные памятники старины, возраст которых впечатляет. Мы посетили за два дня (сегодняшний у нас, фактически пропал) Гарни, Гегард (с гидом Дианы), Аштарак, Ошакан, Сагмосаванк, Ованаванк, Амберд (с «Тревел Клаб Армениа»), погуляли по Еревану.
Так же мы увидели (издалека) Арарат и я с удивлением узнал, что знаменитая гора сейчас находится не на территории Армении. В школе у меня по географии была тройка, а позже я

Огромное спасибо очаровательной Հասմիկ (читается как «Асмик», с лёгким «х» впереди), сотруднице хостела, которая помогала нам в этой сложной ситуации и была временами нашим поводырём в лингвистических тупиках — полиция говорит на русском, но определённые трудности были.
Огромное спасибо и сотрудникам полиции, которые очень тщательно, корректно и с большим участием разбирались в этом деле! К сожалению, не запомнил их имена, очень уж непривычны для нашего уха.
Кстати, для экскурсий могу рекомендовать (личный опыт) гида Арэка («Тревел Клаб Армениа»), мы с женой много где были, но человека, который с таки́м жаром и любовью рассказывал бы о своей стране ещё не встречали.
Прекрасная страна, надеемся приехать ещё!
666
Одно из чисел, несущих для христиан сакральный смысл — 666, «Число Зверя». Оно знакомо многим, но мало кто знает, что «666» не единственный вариант, а просто самый известный.
В рукописях встречаются и другие варианты, как например в папирусе ниже.

Тут вместо 666 («ΧΞϚ») записано 616 («ΧΙϚ»). Это, кстати, один из древнейших отрыков «Апокалипсиса», его датировка — конец третьего—начало четвёртого века.
В настоящее время нет единого мнения о верном прочтении этого числа, изначальным может быть любой вариант (встречается ещё написание «665»), когда именно писцы ошиблись сейчас мы уже вряд ли выясним.
Интересно, что
Успехи с турником

Полгода назад, купив турник, я поставил себе цель — научиться подтягиваться на одной руке. Научился. Правда, подбородком дотянуться до перекладины пока не могу, буду заниматься дальше. Да и на левой руке пока не получается. Несмотря на то, что я умею левой почти всё то, что умею и правой, она у меня всё же слабее.
Зато подтягиваюсь «чисто» — без рывков и прыжков.
Советские радиодетали
Нашёл, разбирая старые вещи на квартире у братишки, привет из детства — радиодетали. Я
Вообще, куча у меня большая, но я выбрал самое характерное (а ещё не положил радиолампы — я их почти не застал и микросхемы — я ими уже не занимался). Некоторые детали в этой кучке очень старые — немногое можно было купить, чаще их искали на свалке или выпаивали из старой техники. Так большой конденсатор в прозрачном корпусе и надписью на бумаге — 1968 года, ПОВ 390 пф, с отклонением 20%, чуть левее и ниже — ПСО 2200 пф, то же отклонение (20%), год выпуска — 1955.
2200±20% — значит, что он может оказаться и 2640 пикофарад, и 1760, приличная разница, поверьте мне. Если взять его в руки, можно разглядеть как он изготавливался — на горячую пластиковую ленту клали фольгу и закатывали, в последний виток подкладывали бумажку с номиналом.
Не исключено, что собирали его вручную, возможно отсюда и такое большое отклонение в номинале.
Большие зелёные резисторы и здоровые транзисторы (нижний ряд) такого размера не потому что «советские микросхемы самые большие микросхемы в мире», а потому что они применялись там, где был солидный ток, физику не обманешь, чем больше ток, тем толще должен быть проводник.
Обратите внимание и на советскую лампочку, они были разные, но в основном детям попадались на 2,5, на 3,5 — эти использовались в детских игрушках, были автомобильные и прочие — у них напряжение питания было побольше.
Большой транзистор с просверленной крышкой — советский способ получить плохенький фотоэлемент. Свет, падая на кристалл, изменял характеристики элемента, чем и пользовались советские радиолюбители.
Из транзисторов очень хорошо помню более современные КТ315 и 361 — у них очень узнаваемый корпус, а так же серию МП39—42, они очень часто использовались, но по внешнему виду их не отличить от ГТ320, например. Ещё помню старичка П13 — он использовался в большинстве схем из папиной подшивки «Радио», семидесятых годов. Вот этому, на фото — более 50 лет, он 1963 года выпуска.
Светодиоды — отдельная радость, светили тускло, но радовали безмерно. Маленькое чудо, которое было не достать. Те, что на фото наверняка
Жаль у меня не сохранились детали от военной техники (с логотипом в виде контурной пятиконечной звезды и отклонением в доли процента), не помню откуда они. Не сохранились и конденсаторы в бумажной обёртке, сороковых, кажется годов, эти ни на что не годились, лежали для кучи и повертеть в руках их было интересно.
Казань ✈ Ереван ✈ Москва ✈ Казань
Армения, как я понимаю, не очень популярная страна для туризма (совершенно незаслуженно, кстати). Мы на вторые майские праздники (9—11) будем в Ереване. Десятого у нас экскурсия Аштарак → Ошакан → Сагмосаванк → Ованаванк → Амберд (проводит Армянский Тревел Клуб), а в оставшиемся дни, скорее всего, посмотрим Ереван.
Если вдруг вы были в Армении, раскажите особенности, пожалуйста. Какую валюту брать? Куда обязательно сходить? Что попробовать? И так далее.