UserJS для воспроизведения H.264 в «Опере»
Существует плагин «DivX web player», который отлично подменяет тег «VIDEO», в случае, если должен быть использован кодек H.264, но браузер его не поддерживает.
К сожалению, в «Опере» он
Самая засада — это тег «VIDEO» без размеров. Мне для поддержки этого приходтся запускать проигрывание и когда становятся доступны медиаданные, останавливать воспроизведение и переписывать размеры видео.
// ==UserScript==
// @name XVid patch
// @author Evgeny Stepanischev aka Bolk
// @version 1.00
// @namespace /files/opera-xvid-patch.js
// @modified 2012-04-14
// @include http://*
// ==/UserScript==
!function () {
var htmlif = function (attr, attrname) {
return attr ? attrname + '="' + attr + '" ' : '';
}
var patchtag = function (o, src) {
var html = '<embed type="video/divx" '+
'custommode="none" ';
if (o.preload == 'auto') html += 'bufferingMode="full" '; else
if (o.preload == 'none') html += 'bufferingMode="null" ';
html += htmlif(o.poster, 'previewImage')+
htmlif(o.id, 'id')+
htmlif(o.name, 'name')+
htmlif(src || o.src, 'src')+
htmlif(o.controls ? 'full' : 'null', 'mode')+
htmlif(o.width, 'width')+
htmlif(o.height, 'height');
if (!o.height || !o.width) {
html += 'onloadedmetadata="this.width=this.videoWidth;this.height=this.videoHeight" ';
html += htmlif(!o.autoplay && 'if (!this._sized) {this.pause(); this.currentTime=0; this._sized=1}', 'onplay');
html += 'autoPlay=true ';
} else {
html += htmlif(o.autoplay ? 'true' : 'false', 'autoPlay');
}
html += 'pluginspage="http://go.divx.com/plugin/download/"></embed>';
o.outerHTML = html;
};
var patch = function () {
window.opera.addEventListener('BeforeScript', function() {
with (window.HTMLVideoElement)
if (prototype._canPlayType === undefined) {
prototype._canPlayType = prototype.canPlayType;
prototype.canPlayType = function (type) {
if (type.substr(0, 9) == 'video/mp4') {
return 'probably';
}
return this._canPlayType(type);
}
}
!function() {
var videos = document.getElementsByTagName('VIDEO');
for (var i = 0, vl = videos.length; i<vl; i++) {
if (!videos[i]) continue;
if (videos[i].type && videos[i].type.substr(0, 9) == 'video/mp4') {
} else {
var sources = videos[i].getElementsByTagName('source');
var foundSupported = false, foundMP4 = false;
for (var j = 0, sl = sources.length; j < sl; j++) {
if (videos[i]._canPlayType(sources[j].type) !== '') {
foundSupported = true;
break;
}
if (sources[j].type.substr(0, 9) == 'video/mp4') {
foundMP4 = sources[j].src;
}
}
if (!foundSupported && foundMP4) {
patchtag(videos[i], foundMP4);
}
}
}
}();
});
};
for (var i = 0, l = navigator.plugins.length; i < l; i++) {
if (navigator.plugins[i].filename == 'DivXBrowserPlugin.plugin') {
return patch();
}
}
}();Добавлено: в комментариях справдливо указали на недостаток — перехватывать надо не только BeforeScript. Исправлять не буду до первого реального случая, когда
Nuzhno vvesti bukvy

Регистрация на сайте
Угадай закон
Минздравсоцразвития собирается внести законопроект о защите здоровья населения от табачного дыма, сообщается на Вести.ru… С 2014 года предлагается ввести запрет курения на рабочих местах в помещении, в общественном транспорте.
Пишет портал «ПроГород» и куча других изданий. Ммм? Что? Ещё 10 июля 2001 года был принят «Об ограничении курения табака»
Запрещается курение табака на рабочих местах, в городском и пригородном транспорте… за исключением курения табака в специально отведенных местах для курения табака
Из той же статьи:
— Мы надеемся, что Минздрав запретит еще и курение в подъездах, — сказал Дмитрий Янин, председатель правления Международной конфедерации обществ потребителей. — Пока закон не защищает нас от курящих соседей,
из-за которых всем остальным приходится дышать дымом.
Как же не защищает? Курение в подъезде является нарушением п. 9.1 СанПин
ФлешБэк
Все уже знают о существовании ботнета из полумиллиона «Маков»?
Проверить не заражён ли ваш «Мак» можно на специальном сайте. Я написал небольшой скрипт, который надо запускать из консоли, если лень шариться по менюшкам в поисках UUID вашей машины:
#!/bin/bash
UUID=$(/usr/sbin/system_profiler SPHardwareDataType | /usr/bin/awk '/UUID/ {print $3}')
result=$(/usr/bin/curl "http://flashbackcheck.com/check/?uuid=$UUID" 2>&-)
echo -n "Your system status is "
case "$result" in
"") echo NA.;;
clean) echo -e "\033[1;32mclean.\033[0m";;
*) echo -e "\033[1;31minfected.\033[0m";;
esacЛибо можно сразу скачать его на запуск с «Гитхаба»:
curl -s https://raw.github.com/bolknote/shellgames/master/checkflashback.sh | /bin/bashУ меня компьютер чистый.
Криптография для чайников
Очень хорошее видео (но на английском языке) о том как работает обмен ключами в том же самом HTTPS.
Казань → Лениногорск → Казань
С 29 апреля по первое мая будем с женой в Лениногорске, в гостях у моих родителей.
Работа с камерой и распознавание чисел в «Опере»

Я вчера заморочился на отличненько. Мне показалось скучным и грустным вводить цифры счёта за квартиру в окошко «Госуслуг» и решил сделать автоматическую распознавалку чисел, попутно изучив работу с камерой из браузера.
Доступ к камере — эксперментальный стандарт, поэтому мало кто из браузеров может им похвастаться, я использовал специальный билд «
АПИ оказалось несложным. Всё, что нужно сделать — соединить специальным образом тег VIDEO с источником стримового видео; потом я 10 раз в секунд забираю кадр с видео и кладу в CANVAS (на скриншоте он цветной), оттуда вырезаю небольшую область, перевожу в градации серого, беру за порог 75% от усреднённого цвета и перевожу всё в ч/б.
Больше всего из трёх часов, которые у меня ушли на это, я делал распознование цифр. Алгоритмы, которые я нашёл в интернете, были очень монструозными, да и переписывать готовое было скучно, поэтом я перепробовал несколько вариантов, которые пришли мне в голову.
В итоге, лучше всех распознаёт следующий алгоритм.
Сначала я очевидным образом разбиваю изображение на цифры, потом условно разделяю каждую цифру вертикальной линией по середине. Слева и справа от линий считаю количество переходов между чёрным и белым, двигаясь сверху вниз. Получаются комбинации из пар чисел. Я их прореживаю — одинаковые последовательно идущие заменяю на одно значение.
Получаются цепочки, которые уже достаточно хорошо характеризуют цифру, правда некоторые цифры этот паттерн не в состоянии распознать. Поэтому я считаю количетсво ч/б переходов ещё и по моей умозрительной вертикальной линии.
На скриншоте в большом текстовом поле записаны получившиеся комбинации. Первое — номер по порядку, далее (через двоеточие) — количество переходов по вертикали и потом описанная последовательность. Например, «ноль» записывается как «2:11» (два перехода по вертикали, потом одинаковые переходы по разу слева и справа разделительной линии).
Алгоритм «шумит»,
Переход на «Гоу 1»
С выходом первой версии языка программирования «Гоу» посмотрел как компилируются мои программы. Не компилируются никак. Весь набор утилит поменяли, теперь всё делается через утилиту «go». С одной стороны хорошо — раньше, чтобы просто запутсить код нужно было много танцев проделать, а сейчас «go run code.go», и всё, он работает.
С другой стороны, мне все make-файлы придётся переписать, надо ещё разобраться как всё теперь работает, но самое плохое вот что:
Finally, the Go tool chain (compilers, linkers, build tools, and so on) are under active development and may change behavior. This means, for instance, that scripts that depend on the location and properties of the tools may be broken by a point release.
Для тех, кто не понимает английский — набор утилит «Гоу» находится в стадии разработки и ещё может измениться. Это плохо очень. Я не хотел бы с выходом каждой новой версии смотреть не сломалось ли у меня
Казань ✈ Москва ✈ Бангкок → Паттайя → Бангкок ✈ Москва ✈ Казань
Ура, удалось вырваться в короткий отпуск (загруженность высокая, поэтому и пишу «вырваться»). С 7 по 15 мая будем в Паттайе (Таиланд) в отеле «Шератон» 5★. Это относительно новый отель с собственными пляжем, номер будет с видом на море.

Снимок взят с сайта отеля.
ДОСбокс и «Гопник»
Вспомнил, что есть такая штука как DOSBox («ДОСбокс»), позволяет запускать

Чтобы её поставить под «Мак», сначала надо установить «хоумбрю» (если у вас его ещё нет), потом в консоли последовательно набрать:
brew tap homebrew/games
brew install dosbox
# долго скачиваются разные штуки, ставятся библиотеки
sed -ie 's/keyboardlayout=auto/keyboardlayout=RU/' "$(dosbox -printconf)"
# заменяем кодировку на русскую, иначе будут проблемы со шрифтами
dosbox
# запускаем ДОСБокс, там пишем:
mount c /каталог на диске где у вас игры
# переходим на диск C:
C:
# запускаем игру
gopnik.exeГотово, теперь у вас в окне искомая игра.
strrev для UTF-8
В ходе обсуждения одной книге на «Хабре» придумал как развернуть строку
Вот что я придумал: перевожу в двухбайтную кодировку
$test = 'А роза упала на лапу Азора ウィキ';
$test = iconv('utf-8', 'utf-16le', $test);
$test = strrev($test);
// キィウ арозА упал ан алапу азор А
echo iconv('utf-16be', 'utf-8', $test);0,(9) апреля
Каждый год, первого апреля, увеличивается количество мусора. Потом десятилетиями в интернете болтаются статьи, выпущенные в этот день, но читатели уже не обращают внимание на дату. Так становится больше слухов, искажений, непроверенных фактов и просто вранья, которое рождалось как шутка.
Особенно грустно, когда этим занимаются новостные издания, которым остальные 360 с гаком дней в году читатель привыкает верить.
Просто замечательно, когда авторы проекта продумывают шутку так, чтобы встретив её в любой другой день в году, посетитель догадаться бы, что это шутка, например, «Яндекс.Карты» сделали панораму Марианской впадины, это здорово (в специальном посте на «Хабре» собираются шутки со всего интернета).
Но моё сердце отдано картам «Гугла», эти ребята сделали карты в стиле старых «восьмибитных» игр, волшебно.

Ну а я первого апреля традиционно серьёзен, как стадо бизонов.
Мой прапрадед
У меня есть пока единственная фотография моего прапрадеда — Никанора Ивановича Литвинова. Судя по дате рождения его дочери, моей прабабушки, он родился
Фотография подписана им собственноручно (если я правильно понимаю) и я знаю, что
Согласно «Статистическому ежегоднику Россіи» за 1913 год, показатель грамотности для мужчин в России на 1897 год был 29,3. Это те, кто умели читать. Писать должно было уметь меньшее количество. Правда в крупных городах этот показатель был сильно выше, например в Питере аж 65,2%, но мой предок жил, судя по тому что я знаю,
Тем более вызывает уважение, что мой прапрадед умел писать, причём не каракулями, а нормальным почерком, то есть имел к этому привычку.
Что это было вообще?
После представления в самом большом , концертном зале Цюриха — «Корсо» о нем говорил весь город. Ассистент втыкал ему в грудь и спину кинжалы и рапиры, а он абсолютно не реагировал на это…
Вот как описал его выступление перед
студентами-медиками один из очевидцев: «Мирин Дажо, голый по пояс, молча стоит в центре комнаты. Ассистент очень быстро подходит сзади и вонзает в него80-сантиметровую рапирукуда-то в область почек. Гробовая тишина. Студенты и преподаватели сидят с раскрытыми ртами, не в силах поверить своим глазам.Сомнений нет: клинок прошел через тело, кончик торчит спереди. Самое удивительное — даже не невозмутимость Дажо, а то, что на его теле нет ни капли крови…»
Это цитата из описания другого ролика на «Ютубе» про него же.
Лингвистические открытия
Вчера услышал в аэропорту «договариваться надо на берегу, а на середине реки веслами махать». Не подозревал, что у этой фразы есть продолжение.
— Так же и пропащая душа, Саша Антипов, — сказала Сусанна. — Надеюсь, вы не имеете ничего против друг друга? Или, как теперь говорят, вы монтируетесь?
Из книги «Время и место» Юрия Трифонова, книга 1981 года. Не уверен, кто
Открытие старое, но запишу сюда тоже. Оказывается «байховый» не означает «взятый с бахчи», как думают многие (и как я думал):
Слово pekoe происходит от тайваньского слова 白毫,
пѐк-хо (бай хао), — «белый пух». Отсюда и русское слово «байховый». Таким образом, «пекой» — это чай из почек и листьев, на которых есть эти ворсинки.
Гоу вышел
Today marks a major milestone in the development of the Go programming language. We’re announcing Go version 1, or Go 1 for short, which defines a language and a set of core libraries to provide a stable foundation for creating reliable products, projects, and publications.
Появился релиз языка «Гоу». Это означает, что язык стабилизировался и обратную совместимость ломать больше не будут.
Ребус
Вот, ребус придумался. Поймёт
«Не держите его так»
В фирме, которая выпускает программный продукт «ВИПнет» (сертифицированный, защищённый VPN, с алгоритмами ГОСТ) рассказали, что пытались договориться с «Эпл», чтобы встроить свой продукт в «Айпад» или распространять его для корпоративного сектора
Думаю, никому не надо рассказывать о важности защищённых каналов связи, о том, что корпоративному сектору нужно защищать свою информацию (а «ВИПнет» очень хорош как продукт с любой точки зрения).
Но в «Эпле» решили, что у клиентов необходимости в этой реализации VPN для «Айпада» нет.
Шутки про технологии
abeshkov: Знаю отличную шутку про UDP, но не факт что она до вас дойдет. :) n1313: про технологии шутим, да? Ну вот я знаю того, кто знает отличную шутку про DNS. bolk: n1313, но ты не уверен, правильно ли помнишь? n1313: чем дальше, тем сильнее, да. Но если что, я переспрошу.
Кабинетный портрет
Я
На фотографии никаких надписей, но на картонке, на которую она наклеена, написано «Cabinet Portrait». Я надеялся, что это название ателье, оказалось всё проще.
«Cabinet Portrait» («кабинетный портрет») — распространённый
Кабинетные портреты впервые появились в Англии, в 1866 году, затем в США и постепенно распространились по всему миру.
Лого на картонке, как правило, относилось к её производителю. Впрочем иногда там бывали и реквизиты ателье, а некоторые известные фотографы клеили фотографии на именные паспарту.

Мне повезло меньше — у меня стандартное паспарту