210 кг

Пока еду в такси в Казань, расскажу смешную историю, которая в отеле на конференции случилась.

Решил я в спортзал сходить, штангу пожать. Давненько не занимался, решил посмотреть остались ли силы. За день до этого там были два парня, которые выставили 60 килограмм и довольно легко их выжимали, но и парни были достаточно рослыми. Я пожал вместе с ними и удивился как легко 35 раз я выжал этот вес. Наверное какое-то нелепое самолюбование помешало мне в прошлый раз почувствовать подвох.

А сегодня я зашёл в тот же спортзал с мыслью посмотреть сколько же я смогу выжать. Попробовал 70 — очень легко, 90 — легко (тут я уже начал что-то подозревать), 130 — выжимаю (это несколько больше, чем я в норме выжимал когда-либо), замахнулся на максимум, который там был — 210… и выжал. Ошалелыми глазами посмотрел на эту цифру и вышел из зала, ничего не понимая.

Догадался я на пути к лифтам — скорее всего (там не совсем штанга, а тренажёр для жима лёжа) шкала весов на тренажёре проградуирована в фунтах (примерно 0,454 килограмма), то есть поднял я около 95 килограмм. Не сказать, чтобы очень мало, но гордиться особо нечем.

9 комментариев

Кураж-бамбей

Фестиваль «404» по версии Кураж-бамбей (62.17КиБ)

Любители сериалов «Теория большого взрыва» и «Как я встретил вашу маму» наверняка что-то слышали про Кураж-бамбей. Я слышал, но думал, что это какие-то ребята, которые дома, в кустарных условиях изготавливают переводы сериалов. Для меня было сюрпризом, что, во-первых, переводами занимается профессиональная студия, а во-вторых, все голоса, которые мы слышим в этих сериалах — это один и тот же человек — Денис Колесников. Когда он сказал какую-то фразу голосом Шелдона из «Теории», а потом — голосом другого персонажа, я сначала не поверил своим ушам.

На фестивале Денис читал один из докладов — «Озвучено по версии Кураж-Бамбей», про то как он начал заниматься озвучкой, что из этого получилось и каким образом им удаётся работать со всей Россией, находясь в Тольятти. Интересно было послушать и про историю успеха (началось всё для озвучки пары серий для мамы Дениса), и про опыт удалённой работы с переводчиками и заказчиками.

Я очень редко фотографируюсь с сюжетом «я и…», а тут я так обрадовался, что вижу воочию человека, работа которого приносит мне столько радости, что не удержался.

11 комментариев

Радар vs. антирадар

Какое-то время назад я удивлялся, что (кажется) не существует видеорегистраторов скорости, которые использовали бы принцип бинокулярного зрения — определяли скорость движущегося объекта по разнице в картинке с двух ракурсов. «Антирадары» такую камеру не фиксировали бы. Понятия не имею какая была бы точность, но мне кажется, что в этом подходе что-то есть.

В Казани поступили хитрее:

При въезде и выезде с моста «Миллениум» установили два регистратора, которые фиксируют факт проезда и время, за которое автомобиль преодолел «Миллениум». Эти сведения передаются на сервер, который, зная длину моста, ловко пользуется знакомой всем со школьного детства формулой и вычисляет среднюю скорость транспортного средства.

25 комментариев

Ты, уважаемый!

Раздвоение личности у «Мегафона» (36.54КиБ)

Маркетологи «Мегафона» не могут разобраться — то ли они хотят сильно уважать уважаемого Абонента, которого они сильно уважают и высказывают Ему всяческое Уважение, то ли быть молодёжными, дерзкими и «тыкать» тебе, абонент «Мегафона».

21 комментарий

Жизнь удаётся

Что-то не спится.

Не понимаю я выражение «жизнь удалась». Мне кажется, что этого глагол в таком виде может быть применён к действию, которое уже кончилось. Ну, песня удалась, выступление, картина, ночь в клубе. Удалась ли жизнь можно сказать, когда она кончилась. Такой эпиграф к некрологу.

Увидел онлайн «Вконтакте» бывшую однокурсницу, спросил как у неё дела. Ответила «жизнь удалась» и отключилась. Померла что ли?

29 комментариев

Гоу версия 1

Язык программирования «Гугл Гоу» наконец-то стабилизируется:

We propose to issue a Go release early next year that will be called “Go version 1”, Go 1 for short, that will be the first Go release to be stable in this way. Code that compiles in Go version 1 should, with few exceptions, continue to compile throughout the lifetime of that version, as we issue updates and bug fixes such as Go version 1.1, 1.2, and so on… Go version 1 will be a stable language with stable libraries. Other than critical fixes, changes made to the library and packages for versions 1.1, 1.2 and so on may add functionality but will not break existing Go version 1 programs.

Наконец-то. Это означает, что устранят один из существенных недостатков «Гоу» — постоянные изменения в языке и стандартных библиотеках.

4 комментария

Фестиваль «404» в Самаре

Группа людей стоит на крыше здания, рядом с ними видны строительные материалы и оборудование.

Меня тут все спрашивают, как прошёл фестиваль «404» в Самаре. Отлично прошёл, друзья мои! Но у меня совершенно не было времени хотя бы удалить дубли фотографий и выложить оставшееся. Поэтому предлагаю взглянуть на фестиваль в маленькое (66×44) окошко моего импровизированного телевизора. Скорее всего читателям трансляций (в ЖЖ, «Ярушке» и так далее) не будет видно самого телевизора, только картинку, так что заходите на сайт.

4 комментария

MJPEG, MPNG, MGIF, MSVG

Я вчера показывал вам «телевизор» про фестиваль в Самаре. Сделано очень просто — уменьшил все сделанные там снимки до 66×44 и сконвертировал их в анимированный ГИФ. Мелковато, конечно, но что делать — ГИФ не очень-то предназначен для фотографических изображений и размер анимации сильно растёт с увеличением размера кадра. Для фотографий в интернете принято использовать формат JPEG.

У JPEG есть свой формат анимации, если так можно выразиться, а точнее — скорее простенький формат видео, так как формат анимации, в моём представлении, помимо кадров должен содержать себе какую-то метаинформацию о кадре, например, задержку перед появлением следующего кадра. Этот формат — разновидность MJPEG (motion JPEG).

Мне давно хотелось посмотреть что у этого формата внутри, сегодня наконец посмотрел. Всё оказалось крайне просто.

В данном случае, MJPEG — формат стримминга (потоковой подачи) видео. Собственно, это даже не формат, а простое соединение JPEG и специального заголовка «multipart/x-mixed-replace», которым может применяться для стриминга чего угодно. Можно, например, подавать не JPEG, а PNG и «изобрести» формат видео MPNG, а то и M(JPEG+PNG+GIF), картинки разных форматов можно перемешивать в любых пропорциях.

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

Content-type:  multipart/x-mixed-replace;boundary=СТРОКАРАЗДЕЛИТЕЛЬ

--СТРОКАРАЗДЕЛИТЕЛЬ
Content-type: image/jpeg
Content-length: 232311

…бинарное содержимое первой картинки…

--СТРОКАРАЗДЕЛИТЕЛЬ
Content-type: image/jpeg
Content-length: 47474

…бинарное содержимое второй картинки…

СТРОКУРАЗДЕЛИТЕЛЬ надо выбирать так, чтобы она не встретилась в бинарных данных изображения.

Браузерам этот заголовок достался от фирмы Нетскейп, которая когда-то (ещё в версии 1.1) добавила её поддержку в свой браузер. «Микрософт», будучи конкурентом «Нетскейпа», поддержку заголовка в браузер не внедрила. Остальные браузеры заголовок понимают, но каждый немного по-разному.

Например для «Оперы», нужно выдавать данные с задержкой, то есть показали один кадр, ждём пару секунд, ничего с сервера не отдаём, потом следующий. Иначе, «Опера» «хитрит» — показывает следующий кадр, не дожидаясь загрузки предыдущего. Если канал хороший, то мы увидим только последний кадр.

«Файрфокс» единственный, кто хорошо справляется с тем, что кадры могут быть разных размеров — он отображает их правильно, «Опера» масштабирует по первой картинке, «Хром» и «Сафари» глючат — иногда пропускают кадр, иногда ничего не показывают, иногда показывают нормально.

Самое приятное в этом формате — что все современные браузеры считают его картинкой, то есть тег IMG его преспокойно показывает.

Любопытно, что браузеры позволяют сжимать содержимое всего файла и даже каждого кадра отдельно, то есть можно в заголовке кадра поставить «Content-encoding: gzip» и сжать кадр гзипом. Это полезно, если захочется сделать MSVG, например. Ведь SVG-изображения хорошо сжимаются.

Так что, если вы задумались сделать аналог какого-нибудь хостинга анимированных ГИФ и вам наплевать на «Эксплорер» (я посмотрел, девятая версия не поддерживает), сделайте ещё и поддержку MJPEG/MPNG.

11 комментариев

Невероятно плохо

Невероятно! (59.37КиБ)

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

Фотография сделана в третьем роддом города Казани, с одного из плакатов около какой-то кафедры, где учат студентов.

21 комментарий

Поддержка MJPEG в «Опере»

Как я уже писал, «Опера» иначе показывает MJPEG, не как остальные браузеры. Если открыть какую-нибудь веб-камеру, использующую этот формат, в десятой версии, то «Опера» сначала задумается, потом покажет какой-то кадр, 11 и 12 версии показывают ещё хуже — подобие потоковой передачи уже есть, но кадры лепятся один на другой и ничего разглядеть невозможно.

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

Вдохновившись библиотекой добавляющей нативную поддержку APNG в браузер, я подумал, что я ничем не хуже и смогу добавить поддержку MJPEG в «Оперу». Получился небольшой userjs, который я, естественно, выложил на «Гитхаб».

Идея такая — находим картинку во всех тегах IMG, у которой расширение «mjpg». Через XHR получаем с сервера видеопоток, копим кадр, подменяем найденную картинку и так далее.

Работает начиная с 12 версии браузера, которая ещё не вышла (кстати, в позавчерашней сборке сломали userjs напрочь) — в предыдущих версиях XHR слабоват по возможностям для этого.

Больше всего я бился с декодированием бинарных данных. Последняя версия «Оперы» поддерживает тип ответа arraybuffer (а вот blob не поддерживается), но если его выбрать, то данные в цикле почему-то перестают накапливаться, вероятно какой-то баг браузера. Я долго мучался, прежде чем придумал следующий хак — если сделать overrideMimeType(’image/jpeg’), то данные приходят в двухбайтовой кодировке UCS-2, которую несложно декодировать.

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

В общем, получился довольно небольшой код — 94 строки.

Посмотреть код.

// ==UserScript==
// @name        MJPEG+Opera - Add to Opera MJPEG support
// @author      Evgeny Stepanischev aka Bolk
// @version     1.00
// @namespace   /files/opera-mjpeg.js
// @modified    2011-10-09
// @include     *
// ==/UserScript==

opera.addEventListener('BeforeEvent.DOMContentLoaded', function() {
    if (opera.version() < 12) return;

    var BolkMJpeg = function (url, img) {
        var req = new XMLHttpRequest(); 
        img.src = 'about:blank'; // Сброс картинки, чтобы прекратить передачу

        // Асинхронно забираем кадр при помощи XHR, нам придёт видеопоток
        var start = function (url) {
            req.open("GET", url, true);
             // Свежепридуманный хитрый хак, позволяет получить данные в UCS-2
            req.overrideMimeType('image/jpeg');
            req.send(null);
        }

        // Хитрыми путями восстанавливаем порядок байт в reponse, там сейчас UCS-2,
        // получаем просто последовательность байт
        var reqbytes = function (n, l) {
            return escape(req.response.substr(n, l)).
                replace(/([^%]|%[^u].|%u....)/g, '<$1>').
                replace(/<%u(..)(..)>/g, '%$2%$1').
                replace(/<%(..)>/g, '%$1%00').
                replace(/<(.)>/g, '$1%00');
        }

        // заменяем картинку на бинарные данные
        var draw = function (bin) {
            img.src = 'data:image/jpeg,' + bin;
        }

        // На изменение состояние входных данных собираем по частям JPEG
        req.onreadystatechange = function () {
            // состояние «3» — данные пошли, но ещё не кончились
            if (req.readyState === 3) {
                var hnd = setInterval(function () {
                    // по заголовку получаем размер данных
                    var header = unescape(reqbytes(0, 300)).toLowerCase();

                    var idx = header.indexOf('content-length:');

                    if (idx > -1) {
                        // 15 — длина заголовка
                        var len = parseInt(header.substr(idx + 15), 10);
                        var headend = header.indexOf("\r\n\r\n");

                        // дожидаемся конца заголовка
                        if (headend > -1) {
                            var resp = reqbytes(0, len);
                            // умножаем всё на три, так как reqbytes даёт esc-последовательность
                            // вида %XX%XX…
                            len *= 3;
                            headend = (headend + 4) * 3;

                            // если собрали весь JPEG, обрываем соединение
                            // и начинаем новый цикл. Мы могли бы собирать кадры и дальше, но
                            // это съест всю память со временем
                            if (resp.length >= len + headend) {
                                req.abort();
                                resp = resp.substr(headend, len);

                                draw(resp);
                                clearInterval(hnd);

                                start(url);
                            }
                        }
                    }
                }, 100);
            }
        }

        start(url);
    };

    // ищем картинку, у которой расширение mjpg
    var imgs = document.getElementsByTagName('IMG');
    for (var i = 0, len = imgs.length; i<len; i++) {
        if (/\.mjpg$/.test(imgs[i].src)) {
            BolkMJpeg(imgs[i].src, imgs[i]);
            break;
        }
    }
}, true);

Если вы не в курсе как устанавливаются скрипты userjs, то это очень просто. В интернете есть много инструкций на эту тему. Только напоминаю, что «Опера» нужна двенадцатая, причём в сборке за седьмое октября userjs сломаны.

7 комментариев

Теория относительности

Сейчас много разговоров о том, что в одном из экспериментов скорость нейтирино оказалась выше скорости света. Якобы, это ставит под сомнение теорию относительности Эйнштейна.

Чтобы вспомнить что такое теория относительности, рекомендую научно-популярный фильм 1964 года, снятый режисёром Семёном Райтбуртом. В одной из ролей, кстати, снимается ныне покойный Георгий Вицин. А в роли физика снялась Алла Демидова, я её и не узнал.

16 комментариев

Санскрит

Спасибо Илье Бирману за ссылку на потрясающую лекцию академика Андрея Анатольевича Зализняка про санскрит «О языке древней Индии». Я, кстати, пребывал в заблуждении, что санскрит — прадедушка большинства европейских языков, тех что называют индоевропейскими. Оказывается, нет:

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

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

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

Вот почему в литовском (который очень близок к санскриту) часто слышно окончание «-ас», этот очень консервативный язык мало изменился:

Так вот, литовский занял бы первое место среди живых языков по сохранности древнего числа слогов. Он сохранил окончание именительного падежа -ас. Ростов будет по-литовски Ростовас. Почему? Потому что это -ас так же необходимо в современном литовском, как и три тысячи лет назад в санскрите.

11 комментариев

Оптимизиция шрифтов с «Гугл фонт АПИ»

Благодаря Мицголу невозбранно узнал о существовании у «Гугл фонт АПИ» параметра «text», где можно перечислить буквы, которые вы будете использовать в шрифте. Это сильно сокращает размер скачиваемого шрифта. Напоминаю, «Гугл фонт АПИ» — это специальное АПИ для браузеров, позволяющее использовать свободные шрифты из коллекции Гугла. Шрифты подготавливаются автоматически, в зависимости от того, что поддерживает браузер:

bolk@Bolk ~/Projects/Ttt/exp (master) $ wget -O - --user-agent='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' http://fonts.googleapis.com/css?family=Rock+Salt 2>&-
@font-face {
  font-family: 'Rock Salt';
  font-style: normal;
  font-weight: normal;
  src: url('http://themes.googleusercontent.com/static/fonts/rocksalt/v1/Q94aHXFHGip10K5uxi1jOPY6323mHUZFJMgTvxaG2iE.eot');
  src: local('Rock Salt'), local('RockSalt'), url('http://themes.googleusercontent.com/static/fonts/rocksalt/v1/Q94aHXFHGip10K5uxi1jOD8E0i7KZn-EPnyo3HZu7kw.woff') format('woff');
}

bolk@Bolk ~/Projects/Ttt/exp (master) $ wget -O - --user-agent='Opera/9.00 (Windows NT 5.1; U; en)' http://fonts.googleapis.com/css?family=Rock+Salt 2>&-
@font-face {
  font-family: 'Rock Salt';
  font-style: normal;
  font-weight: normal;
  src: local('Rock Salt'), local('RockSalt'), url('http://themes.googleusercontent.com/static/fonts/rocksalt/v1/Q94aHXFHGip10K5uxi1jOKCWcynf_cDxXwCLxiixG1c.ttf') format('truetype');
}

bolk@Bolk ~/Projects/Ttt/exp (master) $ wget -O - --user-agent='Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0' http://fonts.googleapis.com/css?family=Rock+Salt 2>&-
@font-face {
  font-family: 'Rock Salt';
  font-style: normal;
  font-weight: normal;
  src: local('Rock Salt'), local('RockSalt'), url('http://themes.googleusercontent.com/static/fonts/rocksalt/v1/Q94aHXFHGip10K5uxi1jOD8E0i7KZn-EPnyo3HZu7kw.woff') format('woff');
}

Для примера. Пусть у меня выбранный шрифт используется в двух фразах: «NEWS» и «ABOUT US», тогда строка запроса для этих двух заголовков будет выглядеть следующим образом (повторяющиеся буквы опущены, «%20» — это пробел):

http://fonts.googleapis.com/css?family=Rock+Salt&text=%20NEWSABOUT

Если сравнить размер шрифта без указания используемых букв и с ними, то разница выйдет более чем существенная:

bolk@Bolk ~/Projects/Ttt/exp (master) $ wget -O- `wget -O- 'http://fonts.googleapis.com/css?family=Rock+Salt' 2>&- | awk -F' '/http/{print $6}'` 2>&- | wc -c
  125136
bolk@Bolk ~/Projects/Ttt/exp (master) $ wget -O- `wget -O- 'http://fonts.googleapis.com/css?family=Rock+Salt&text=%20NEWSABOUT' 2>&- | awk -F' '/http/{print $6}'` 2>&- | wc -c
    6801

Как видно, размер файла сократился более чем в 18 раз!

12 комментариев

TOEFL

Сегодня прошёл письменный тест TOEFL («Paper-based TOEFL Test»), набрал 463 балла, что соотвествует примерно 50 баллам TOEFL IBT. Это немного, но я почти не сталкиваюсь с бытовым английским в жизни (только с техническим), для меня это неплохо. Тест был упрощённый — без «speaking», а то, мне думается, результаты были сильно хуже.

Заметил две вещи: мне сложно определять ошибки в фразе, я привык отталкиваться от того, что фраза написана без ошибок, и мне тяжело воспринимать американскую речь, которая была в тесте. Речь на английском ведущего нашего теста я воспринимал естественно и не задумываясь. Возможно, конечно, что он специально выбирал выражения попроще, но думаю, что всё дело в том, что она была просто «чистой» — он не склеивал слова и не «жевал» окончания.

8 комментариев

CSS hack for FireFox 6

Меня тут попросили сделать CSS-хак для шестого Файрфокса. Пожалуйста:

x::-moz-progress-bar, body {
    background: orange; /* FF 6.0+ */
}

@-moz-document regexp(".*") {
    body {
        background: orange; /* FF 6.0+ */
    }
}

Проверено на Firefox 6.0 и 7.0.1.

4 комментария

Ещё раз про 28:00

Как-то я написал короткую заметку «28:00», про то, что время в диапазонах не надо сбрасывать на ноль после 23:59. Более логично писать «08:30 — 24:10», чем «08:30 — 00:10». Оказывается, в России есть люди, которые так уже делают.

Например, на сайте «Мосгортранса» висит расписание автобусов (Дофин, спасибо за ссылку!), где, в частности, написано, что автобус №115 отправляется «от  к/ст. “Марьино” к 1-му микрорайону Братеева в 24 час. 08 мин».

А вот этот снимок я сделал, когда прилетел в Казань пару месяцев назад, это расписание справочной авиакомпании «Татарстан» в казанском аэропорту:

24:00 (41.43КиБ)

15 комментариев

Расширение для «Альфреда» для перевода текста

Решил перейти на «Альфред» — замену «Спотлайта» на «Маке». Мне его Вадим Макеев мельком показал на конференции в Самаре.

Главная причина — под «Альфред» легко писать расширения. Писать их можно на обычном Баше, Экшнскрипте или в Автоматоре.

Для этого я купил «Паверпак» (£12), который позволяет ставить и использовать расширения (сам «Альфред» бесплатный) и «Граул» ($1,99), позволяющий создавать собственные всплывающие нотификации в системе.

Скачать расширение можно по следующей ссылке: /files/en-ru.alfredextension, пользоваться довольно просто: набираем «tr» и слово или слова для перевода. Перевод возможен с русского на английский и обратно, направление выбирается автоматически.

en-ru (22.76КиБ)

Перевод делается через сервис «Яндекса». Результат показывается через «Граул».

Поставить расширение проще простого — в закладке «Extensions» есть поле, где написано «Drop to install», туда надо перетащить скачанное расширение и всё, дело сделано.

10 комментариев

Записались с женой в спортзал

Спортзал (39.34КиБ)

Ура! Записались с женой в спортзал на 15 месяцев (абонемент на год + три месяца в подарок). Спасибо жене — нашла и выбрала программу для нас, будем ходить. Записались в «Икс-фит», он в Казани находится в  Дворце единоборств «Ак барс», совсем недалеко от дома. Когда нас водили по залу, проводили экскурсию, мы попали в кадр одной из веб-камер спортивных объектов «Универсиады» (Дворец единоборств — один из таких объектов).

Если промотать до 15 октября, примерно до 18:50, можно нас там увидеть на нескольких кадрах — слева инстуктор, потом я, в центре жена, а дальше ещё одна пара, которой тоже показывали залы.

14 комментариев

Тач-интерфейс

Я тут задумался над русским аналогом к «тач-интерфейсу». «Сенсорный» не подходит, так как под «тач-интерфейсом» подразумевается интерфейс управления пальцем. Может, «пальцевый интерфейс»? Как вам?

50 комментариев

Sublime Text 2 (совет)

Поставил по совету коллег с прежней работы себе текстовый редактор «Sublime Text 2», всё хорошо, одна проблема — файлы с кодировкой CP1251 он открывает неправильно, приходится переоткрывать через «File → Reopen with Encoding → Cyrillic (Windows 1251)».

Покопался по настройкам, нашёл выход. Нужно зайти в настройки (на «Маке», как обычно — ⌘+,) и добавить между фигурными скобками вот такую настройку: «»fallback_encoding«: „Cyrillic (Windows 1251)“». Мой файл настроек сейчас почти пустой и выглядит вот так:

// Settings in here override those in "Default/Base File.sublime-settings", and
// are overridden in turn by file type specific settings. Place your settings
// here, to ensure they're preserved when upgrading.
{
    "fallback_encoding": "Cyrillic (Windows 1251)"
}

26 комментариев

ЭЦП

На конференции «Осенний документооброт-2011», где я сейчас, затронули интересный вопрос.

ЭЦП (электронная цифровая подпись) сейчас, фактически, используется не для того, для чего была придумана. Её назначение — кратковременное подтверждение подлинности переданного документа. К примеру, я получил письмо и мне нужно убедиться, что оно действительно пришло именно от того адресата, которые указан в поле отправителя. Стандартный протокол обмена письмами мне этой уверенности не даёт. А ЭЦП — пожалуйста.

Я открываю письмо, по подлинности ЭЦП убеждаюсь, что всё в порядке, дальше ЭЦП мне не нужна.

В электронных документооборотах не так. Там ЭЦП используется для подтверждения подлинности документа в долгосрочном периоде — годы, десятки лет, в перспективе, возможно, сотни (если речь идёт о долгосрочных договорах между государствами, например).

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

Но. Надёжность ЭЦП, фактически, основана на сложности математических задач, заложенных в алгоритм электронной цифровой подписи. Эти задачи выбраны таким образом, чтобы подделка подписи требовала огромных вычислительных ресурсов. Последнее с успехом может быть заменено использованием более скромных ресурсов какого-то значительного количества времени.

В чём проблема. Мы все с вами наблюдаем современные темпы развития техники, пройдёт пара лет и двух-, четырёхпроцессорные смартфоны уже не будут никого удивлять. Что будет стоять на обычных компьютерах через десять лет даже сложно представить.

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

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

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

Можно увеличивать длину ключа, (фантазирую) применять ключи, занимающие десятки килобайт. Шифрование будет крайне медленным, но для важных документов можно и потерпеть. Но вот вопрос — если через двадцать лет появятся квантовые компьютеры, которым такая длина ключей «на один зуб», что будем делать? Как видно, простого выхода из ситуации не существует.

43 комментария

Ночевал в Авиагородке

Если вы, как я вчера, опоздаете на самолёт и вам придётся искать ночлег в Домодедове, рекомендую — Галина Васильевна (+7 916 626 64 69). За две тысячи рублей (если вас двое — по 1500 с каждого) разместит вас у себя в квартире в Авиагородке на улице Туполева. Квартира чистая, правда с советским ремонтом, комната отдельная. Гостиница в аэропорту, для сравнения, стоит 6700 за обычный номер.

Такси до места (и обратно — в аэропорт) стоит 200 рублей, ехать — минут 10-15.

Авиагородок (бывший посёлок Востряково-1) — небольшой посёлок городского типа, возник как поселение для строителей, позже — работников аэропорта, сейчас является районом города Домодедово. Население — порядка 20 тысяч человек, я ехал ночью, уехал рано утром, поэтому мало что разглядел, но первое впечатление хорошее — много деревьев, мало домов.

Кстати, забавно — водитель такси, который вёз меня оттуда спросил «в аэропорт куда?». Авиагородок-то для лётчиков и прочего персонала (хотя сейчас сменилось поколение и кого там только нет), для них аэропорт — большая территория. Но это для них. Водитель, верно истолковав мой утренний скрип мозгов, спросил — «вокзал?», я кивнул.

17 комментариев

Моя Казань (видео)

Видео к торжественной передаче флага Международной федерации студенческого спорта от Китая России, которая состоялась в рамках церемонии закрытия Всемирных летних студенческих игр 2011 года. Мэр Казани Ильсур Метшин получил флаг из рук мэра Шеньженя (в 2013 году Казань принимает у себя «Универсиаду»).

8 комментариев

Иллюстрации из книги «Евгений Онегин»

У нас дома лежит книга «Евгений Онегин» Пушкина, издательство «Художественная литература» 1936 года. Жена перечитывает. А мне нравятся иллюстрации. Я сфотографировал некоторые из них, мне даже логотип нравится.

Логотип «JOSAM KAZAN» в виде открытой книги с надписью под ней на текстурированной бежевой поверхности.
Чёрно-белая гравюра: в лесу человек на лошади обнимает другого человека, внизу — фигура, лежащая на носилках или кровати.
Силуэт человека, читающего книгу на балконе с аркой и растительностью; внизу — круглая печать с надписью «Crown Books».
Страница книги с иллюстрацией «Les Amoureux» и стихотворением на французском и русском языках, включая строки: «Прощай, Онегин, мне пора...» и «Я не держу тебя...».
Страница книги с иллюстрацией камина и силуэтами, стихотворением «Деревня, где случился Евгений…» и рукописной надписью «Опыт скупала в деревне».

1 комментарий

Всякая мелочь одним постом

Девушка Лена, живущая в Японии три года описывает один свой день с утра до вечера. Много фото.

Дима Ромахин рассказывает всем полуночникам сказку о том, почему грифы лысые.

Некие ребята 20 дней ехали на джипах по Волге и делали пробы воды. Результаты можно посмотреть на специальной карте. В Казанке очень жёсткая вода и фторидов выше нормы.

У Татьяны Тихомировой, профессионального аллерголога-иммунолога и к.м.н в ЖЖ, в разделе «Санпросвет» куча интересных статей по медицине, написанных понятным языком. Некоторые из её постов стали основой для статей в «Комсомольской правде», с них можно начать знакомство.

На форуме «Города мастеров» есть подборка законов на тему нарушения тишины и покоя в ночное время, законы по республикам и областям (Татарстан и Москва присутствуют).

Казанский активист Олеся Балтусова в своём ЖЖ пригласила президента Татарстана прогуляться по Казани, чтобы наглядно показать в какой упадок приходят исторические памятники нашего города. Президент предложение принял, по результатам прогулки (которые уже стали регулярными) проведена масса разбирательств, остановлено незаконное строительство в центре города, а Олеся стала помощником президента республики Татарстан.

Оказывается в стандарте «Долби Диджитал» звуковая дорожка оптически кодируется прямо на ленту, с краю и туда где перфорация. В основном, такое кодирование напоминает гипертрофированный QR-код.

На сайте Вадима Макеева выложена презентация «Прокрустовы окна» к его докладу на самарской конференции «404», прошедшей в этом году. Конечно, по слайдам далеко не всё понятно, но кое-какие ключевые слова и начальное понимание о проблеме выудить можно.

11 комментариев

«Крестики-нолики» на HTML и CSS

Давно хотел попробовать сделать «крестики-нолики» только на HTML и CSS, без использования скриптов, вот — сделал.

HTML+CSS only tic-tac-toe (24.29КиБ)

Играет на уровне мастера, то есть пытается либо выиграть, либо свести к ничьей. Вычисления позиций проводил через реализацию «крестиков-ноликов» Стефена Остермиллера. Там на ДжаваСкрипте, я написал обвязку для перебора и запускал через «Ви8». Поскольку мне хотелось придать игре налёт винтажности, добавил лёгкий фон конца девяностых, шрифт курсивом и тень. Всё как в старые добрые девяностые, возможно только анимированного ГИФа какого-нибудь нехватает.

Кстати, несмотря на всю винтажность, от браузера требуется поддержка CSS3, включая трансформации.

Я сильно не тестировал, спать уже надо ложиться. Если будут ошибки, пишите, постараюсь поправить, если только они не относятся к недостаткам алгоритма Остермиллера. Всё-таки это скорее концепт, чем полноценная игра.

20 комментариев

Октябрь…

Стив Джобс — «Эпл», «Пиксар», «Некст». 24 феврая 1955 — 5 октября 2011.  Денис Ритчи — один из авторов «Би», «Си», «ЮНИКС». 9 сентября 1941 — 8-12 октября 2011.  Джон Маккарти — изобретатель «ЛИСПа», основоположник функционального программирования, исследователь ИИ. 4 сентября 1927 — 23 октября 2011.

R. I. P.

17 комментариев

Хитрость

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

А вот если в это отверстие засунуть палец, то работает за милую душу. Проверил уже в туалетах Домодедова и Шереметьева.

18 комментариев

Время «актуальности» телефонов под «Андроид»

По статистике с Мишеля ДеГуста, который записывает дату выхода всех основных смартфонов на «Андроиде» и даты выхода прошивок для них, получается следующее:

  • 7 из 18 смартфонов никогда не имели актуальной (т. е. последней) версии «Андроида»;
  • 12 из 18 имели актуальную версию «Андроида» всего несколько недель или меньше;
  • 10 из 18 отставали на две версии системы к тому моменту, когда подходил срок окончания их двухгодичного контракта с сотовым оператором;
  • 11 из 18 телефон перестали получать обновления менее чем через год после выхода;
  • 13 из 18 перестали получать поддержку еще в том момент, когда они еще продавались, или сразу же после;
  • 15 из 18 не получили обновления до версии 2.3 (Gingerbread), хотя она была выпущена в декабре 2010-го;
  • в течение нескольких недель после выхода «Андроида» 4.0 (Ice Cream Sandwic), все рассмотренные аппараты получат по минус одной версии ОС;
  • по крайней мере 16 из 18 рассмотренных аппаратов никогда не получат Ice Cream Sandwich официально.

11 комментариев

Перехода на зимнее время не будет

Все помнят, что перехода на зимнее время в ночь с этой субботы на воскресенье не будет? Переход отменён Федеральным законом Российской Федерации от 3 июня 2011 г. N 107-ФЗ «Об исчислении времени».

В этой связи нужно аккуратно проверить, что все ваши сервера, устройства и так далее, не перейдут на это время и не создадут путаницу. Если вы регулярно обновляете систему, то в большой вероятностью вам ничего не грозит, на «Хабре» есть довольно развёрнутая статья о том до какой версии нужно обновлять различные системы или какие обновления ставить (например, для всех актуальных версий «Виндоус», включая ЭксПи, существует обновление №2570791, проверить его установку можно, например, через «ПауэрШел», для «Мак ОС Икс» требуется обновиться до 10.7.2).

Всё плохо у «Андроидов», в большинстве устройств переход состоится даже в последних прошивках (2.3.6, 3.2.1, CyanogenMod-7.1), придётся исправлять это вручную. Например, мой «Нексус Уан» к переходу не готов, несмотря на «Андроид» 2.3.6, сам проверил. Я поэкспериментировал и переставил телефон на часовой пояс «Дубай, GMT+04:00», должно помочь.

Так же пострадают джейлбрейкнутые устройства на «айОС», версия 4 не имеет необходимого обновления (а пятая пока не поддаётся джейбрейку), но есть способ обновить зоны вручную, ну или выставить всё тот же «Дубай».

Смартфоны на «Симбиане», автоматические будильники, сотовые телефоны, скорее всего вас подведут, ищите где у них «Дубай» или галочку, контролирующую автоматический переход на летнее и зимнее. Подумайте какое сетевое оборудовние у вас имеет внутренние часы, нужно ли обновиться или скорректировать зоны вручную (например, у «Цисок» такая возможность есть).

Кстати, некоторые программы и языки программирования имеют собственные базы временны́х зон. Например, серверу почты «Эксченч» требуется отдельное обновление, а интерпретатору ПХП лучше выставить настройку зоны на что-нибудь нейтральное без сезонных поясов (я выставил те же «Asia/Dubai»), а ещё лучше, если есть возможность — обновить пакет временны́х зон.

82 комментария

Всякая мелочь одним постом-2

А не завести ли мне традицию каждую субботу сбрасывать в блог закладки, накопившиеся за неделю? Попробую этот формат.

На Григория Чхартишвили (более известного как Борис Акунин) некий бдительный человека написал заявление, Григорий обвиняется в оскорблении национального достоинства за фразу «Маса возражал, что русские таких тонкостей не заметят, они неспособны даже отличить удон от собы. Он, конечно, был прав» из книги «Весь мир — театр».

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

Два перекликающихся поста про ксенофобию. Про полезную ксенофобию внутри нас Стелазина и размышения о ксенофобии в литературе и кино Леонида Каганова.

Для ностальгирующих по «старому доброму Спектруму» наш соотечественник открыл проект «ЗетИкс-Арт», посвящённый авторской графике, созданной на «Спектруме» и его клонах. Если кто-то ещё знает как там кодировались картинки, наверное будет интересно вспомнить, что такое «флеш-эффект», узнать что такое «гигаскрин» и «мультиколор».

В Казани появился свой Хатико, собака уже второй месяц каждый день в восемь утра ждёт своего хозяина у дверей станции «Проспект Победы».

9 комментариев

Написание названий на русском

У меня в комментариях к заметке про отмену перехода на зимнее время внезапно началось рубилово на тему написания иноязычных марок на русском. Нужно ли писать «Дивчина» или «Дівчина» про сеть украинских магазинов женской одежды (сеть выдуманная, я реальных марок не знаю), нужно ли писать «Хёндай» или «현대», нужно писать «Майкрософт» или «Microsoft», «Бахетле» или «Бәхетле»?

Будем писать только на латинице и русском или затронем всё, что мы умеет потенциально читать — французский, немецкий, казахский, татарский, монгольский, украинский, белорусский и так далее? Если в Татарстане слово по-татарски может прочитать гораздо больше людей, чем слово на английском, должен ли я татарские марки и имена писать на татарском? Тут это второй государственный язык.

Должен ли я писать «Exchange», потому что «Эксчендж» режет глаз и режет ли глаз «Ястремжемский» и «Ястржембовский»? Нужно ли мне писать по-польски — «Jastrzębowski»?

Как писать марки российского происхождения, но маскирующиеся под зарубежные? Должен ли я знать их историю? Что если я вижу два варианта написания — латиницей и кирилицей? Могу выбрать любой? Встретив новую марку мне следует исследовать нет ли у неё второго написания? Как мне написать марку о которой я только слышал, но ни разу не видел написания?

С айтишниками вообще сложно спорить на эту тему, они уверены, что все вокруг знают английский и умеют читать эти буквы, хотя сами читают «character» как «чарактер», а «xeno» как «ксено».

28 комментариев

Ёперный театр :-(

«Опера» после очередного падения невосстановимо потеряла все мои 70 открытых вкладок, чем меня расстроила до такой степени, что я решил куда-нибудь перейти. Вариантов, в общем-то, немного — «Хром» или «Сафари». «Хром» — потому что быстрый и часто обновляется, «Сафари» — потому что хорошо интегрирован с системой.

Сначала попробую первый. Посоветуйте плагины? Это не «Опера», тут надо всё обвешать плагинами, чтобы начать работать.

Как группировать вкладки (у меня их бывает много, хорошо бы сворачивать в группы), есть ли нормальный «Спиддил» (в идеале — с горячими клавишами), чем блокировать «Флеш» и рекламу? Как из строки адреса искать в разных поисковых машинах? Я уже смирился с тем, что киллер-фича «Оперы» — «уместить страницу в ширину браузера» недоступна где-либо ещё.

75 комментариев

← сюда туда →