«Ё» и «ять»

Ёлка (219.80КиБ)

В кафе, куда я часто езжу обедать, увидел книжку И. Деркачева, 1885 года выпуска (Москва, издание А. Д. Ступина), это даже не книжка, а скорее брошюра, называется «Ёлка. Сборник в прозе и стихах», третье издание.

Один из странных аргументов противников буквы «ё» является её похожесть на своего родителя — букву «е» (почему-то тот же аргумент не работает в отношении «й» и «и», ну да ладно), а в тексте «Ёлки…» я заметил, что буква «ё» во всей книге игнорируется (как и в названии, это я сам её поставил).

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

Кстати, не исключаю возможности, что в 1885 году это слово произносилось именно через «е».

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

Римский нож

ш̶в̶е̶й̶ц̶а̶р̶с̶к̶и̶й̶ Римский нож (30.62КиБ)

В 1891 году Карл Элзенер, который владел тогда компанией по производству хирургического оборудования, обнаружил, что ножи для швейцарской армии, поставляет Германия.

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

Как мы видим на снимке, идея привинтить к ножу ещё что-нибудь реализована была задолго до 1891 года, на снимке римский «швейцарский» нож, датируемый 201—300 годом.

В дополнительных «лезвиях» римского ножа видно ложку, вилку и несолько загадочных для меня ковырялок, думаю, связанных с курением трубки или ремонтом оружия.

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

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

Закон о защите верующих

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

Поэтому я взял таблицу принятых правок к закону и быстренько её проштудировал.

В результате, у нас значимо меняются две статьи — №148 УК и статья 5.26 Кодекса об административных нарушениях. Причём, изменения вступают в силу 1 июля 2013.

Что новенького? Рассмотрим статью 148. Самая расплывчатая формулировка, которую считают самой опасной такова: «публичные действия, выражающие явное неуважение к обществу и совершенные в целях оскорбления религиозных чувств верующих».

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

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

Часть третья статьи 148 рассматривает «воспрепятствование деятельности религиозных организаций или проведению богослужений, других религиозных обрядов и церемоний». Попытались сорвать проведение религиозного обряда? Получайте штраф до дохода за два года, общественные работы или арестом на срок до трёх месяцев.

Часть четвёртая рассматривает то же самое, но с использованием служебного положения, либо с угрозой или применением насилия, почитайте сами.

Переходим к статье 5.26 административного кодекса.

В ней две части. Первая прекрасна и грозит штрафом до 30 тысяч (для должностных — до 100), я вам её процитирую:

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

У вас всё перед глазами: если вам кто-то запрещает быть атеистом, этот кто-то будет оштрафован на 30 тысяч рублей. Не очень большая сумма, но чувствительная между тем.

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

Мой личный вывод: не так страшен закон, как его малюют СМИ.

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

Игра «Candies»

Candies (150.85КиБ)

Прекрасный текстовый квест увидел в ЖЖ Анатолия Воробья, я вообще люблю текстовые игрушки. Я её уже прошёл, но захотелось пройти ещё раз в «суперрежиме». Если откроете консоль и напишите там следующую строку

$.getScript("http://pastebin.com/raw.php?i=QN7K40Nn")

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

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

SVG-спрайты

Вчера ночью, эксперементируя с различными способами внедрения картинок в ХТМЛ, я понял, что уже все браузеры (кроме «Оперы Мини»), понимают СВГ прямо в коде страницы. А это значит, можно отказаться от CSS-спрайтов в пользу того, что можно назвать «SVG-спрайтами»:

SVG-спрайты (162.51КиБ)

Принцип, в общем-то, тот же: большая картинка, из которой показывается фрагмент, только фрагмент задаётся не через ЦСС, а прямо в ХТМЛе.

Думаю, всем понятен код: в теге svg задаются размеры кусочка спрайта, в image обязательно нужно указать полные размеры картинки (для Ретины можно указать их в два раза меньше, если спрайт подготовлен к этому типу экранов), при помощи параметров x и y позиционируем в каком именно месте спрайта расположена наша картинка.

В комментариях спрашивают зачём это всё надо, чем это лучшее спрайтов в ЦСС.

Ну, во-первых, это семантичнее. Понимаю, для многих это не аргумент, поэтому у меня есть два других. Итак, во-вторых, браузеры стараются фоновые картинки (в спрайтах ЦСС используются именно они) грузить в последнюю очередь, это логично — как правило, они менее важны. В-третьих, фоновые картинки часто не отображаются при печати (у некоторых браузеров в настройках печати есть возможность вывести на печать с фоном, но по-умолчанию это отключено).

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

«Яндекс.Фотки» и Ретина

Мне нравятся «Яндекс.Фотки». Не за архаичный дизайн и вёрстку таблицами, конечно, а за отсутствие ненужных мне сервисов и безразмерное (действительно безразмерное) хранилище.

Не нравится только, что я на Ретине не могу выдеть свои фотографии в том качестве, в каком мог бы. Я сейчас болею, кашляю, чтобы никого не будить, ушёл на кухню и сделал userjs для браузера «Сафари», который меняет дизайн «Фоток» и просмотр фотографий так, чтобы им было приятнее пользовать на Ретине.

Может ещё кому-нибудь пригодится:

// ==UserScript==
// @name      Retina Yandex Fotki
// @include   http://fotki.yandex.ru/*
// ==/UserScript==
(function () {
    function $(sel, attrs) {
        var os = typeof sel == "object" ? [sel] : document.querySelectorAll(sel);
        for (var e = 0, l = os.length; e < l; e++) {
            var o = os[e];
            for (var i in attrs) {
                if (attrs.hasOwnProperty(i)) {
                    if (typeof attrs[i] == 'number') {
                        attrs[i] *= o[i] || document.defaultView.getComputedStyle(o, null)[i];
                    }
                    o[i] = o.style[i] = attrs[i];
                }
            }
        }
        return os[0];
    }
    var img = document.querySelector(".js-img-link img");
    if (img) {
        $(".js-img-link img", {
            marginLeft: 1280 - img.width * 2 + 'px',
            zoom: '.5',
        });
        $(".b-preview__size_xxxl", {
            width: Math.max(640, img.width / 2) + 'px',
            height: img.height / 2 + 'px',
            overflow: 'hidden',
        });
    }
    $(".b-head-logo__img", {
        src: 'http://yandex.st/morda-logo/i/logo.svg',
        width: '89px',
        height: '60px',
        marginBottom: '-30px',
        position: 'relative',
        zIndex: '-1',
    });
    $(".b-head-menu .an-upload", {
        width: '80px',
        height: '17px',
    });
    var img = $(":-webkit-any(.user100, .b-userpic-small) img", {
        width: '40px',
        height: '40px',
        float: 'left',
    });

    if (img && img.src.substr(-6) == '-small') {
        img.src = img.src.substr(0, 84) + 'normal';
        $(img, {
            width: '20px',
            height: '20px',
        });
    }
    $(".b-round", {
        display: 'none',
    });
    $(":-webkit-any(.b-preview, .b-foto-actions, .b-foto-listing-i)", {
        borderRadius: '0px',
        webkitBorderRadius: '0px',
        backgroundColor: 'inherit',
    });
    var imgs = document.getElementsByTagName('img');
    for (var i = 0, l = imgs.length; i < l; i++) {
        imgs[i].src = imgs[i].src.replace(/S$/, 'M').replace(/XM$/, 'S').replace(/XS$/, 'S');
    }
})();

Сложнее всего было что-то сделать с тем, что часть атрибутов элементов на экране рассчитывается «Фотками» через ДжаваСкрипт, минимум в одном месте — показе большого фото, пришлось серьёзно подумать.

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

Недокументированные правила «Игры престолов»

В «Битве королей» Большой и Малый Уолдеры играли с винтерфелльской ребятней в игру под названием «лорд переправы», популярную в Близнецах. По правилам этой игры, водящий — «лорд» — стоит на бревне, перекинутом через ручей или пруд, и препятствует всем желающим пройти. Другие игроки должны разговаривать с «лордом», который задает им вопросы, требует клятв и тому подобное. Данную клятву нужно обязательно соблюдать, но слова «может быть» (mayhaps), будучи прибавленными к клятве, делает её недействительной и ни к чему не обязывающей, так что игрок, ввернувший эти слова в свою речь так, чтобы «лорд» их не заметил, получает возможность вопреки фальшивой клятве скинуть «лорда» в воду.

В русских переводах Виленской mayhaps в описании игры было переведено как «чур-чура», а в речи лорда Уолдера Фрея, обращенной к Роббу, и вовсе опущено.

Разговаривая с Роббом сразу после прибытия Короля Севера в Близнецы, Уолдер Фрей намекнул на игру и ее правила, сказав, что уже давал Роббу переправиться через реку в начале войны, и Робб не сказал «может быть» (You wanted crossing and I gave it to you, and you never said mayhaps).

После этого, когда Кейтилин заговорила о еде — что было правильно понято обеими сторонами как напоминание о священных законах гостеприимства — лорд Фрей немедленно отреагировал, предлагая снедь: «Каравай хлеба, кусок сыра, может быть, колбасу?» (в переводе Виленской: «Хлеб с сыром и колбаса вас устроит?»). Робб, не знавший об игре в «лорда переправы», не обратил внимания на выглядящие вполне естественно слова Уолдера.

Учитывая правила игры в «лорда переправы», оставшиеся незамеченными слова «может быть» сделали негласно даваемое Уолдером Фреем обещание гостеприимства и непричинения вреда недействительным и дали ему возможность «столкнуть» Робба, то есть убить.

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

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

Церкви и храмы верхнеуслонского района

Сегодня решили сделать вылазку по заброшенным церквям и храмам, а то уже давно этим не занимался, душа требует. Съездили в четыре места, в одном из них, в Русском Бурнашеве вместо храма мы нашли лишь кучу досок и табличку, что храм Святоникольский, Ильинский и всех скорбящих радостей, 1761 года постройки находился на территории, которая является культурно-историческим памятником начала 18 века.

Почему территория является памятником, а храм — нет (иначе зачем бы его снесли), мне неведомо, но теперь от старинного храма одни воспоминания и старые фотографии:

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

В первый раз мы проехали мимо, в Юматово и просто подумали, что храма не нашли, не поняли, что это его остатки.

В Юматове находится церковь Преображения Господнего 1823 года (по другой версии — 1725, скорее всего эти источники имееют ввиду какую-то более старую постройку), построена была на средства Е. П. Геркен, с восточной стороны церкви захоронены предки Геркен-Боратынских, где-то там же покоятся дети Е. А. Боратынского: Лев, Зинаида, Александра, Мария.

Разрушенная кирпичная церковь с колоннами и колокольней на фоне голубого неба, перед ней — поле с желтыми цветами.
Фрагмент древних фресок на своде церкви с изображением сосудов и архитектурных элементов под деревянным потолком с балками.
Полуциркульная арка с золотистым орнаментом и голубой полосой, ведущая к деревянной стропильной системе под обвалившейся штукатуркой.

Признаться, могилы мы не нашли, правда и искали не очень тщательно — в этом месте очень высокая трава. Зато оценили саму церковь, в очень хорошем состоянии, правда росписей почти не видно, только наверху, под самым потолком что-то уцелело.

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

В окне второго этажа видно надпись «не видь», на другом — «оставь меня», внутри дома — «прости» и «сочись», все надписи сделаны чем-то красным (не кровью). Есть ещё другая, очень длинная надпись в окне первого этажа, написанная явно изнутри дома, если развернуть её зеркально и поиграть с контрастом, можно прочесть:

(много неразборчиво) извини меня Валя (?).

Прощай дорогой Михаил (?) писала тебе Валя (?) я любила тебя так не …был… (неразборчиво) в своей любви… (неразборчиво) (неразборчивая подпись)

Я любила тебя люблю дорогой.

Чья-то история любви и безумия.

Двухэтажное деревянное здание с повреждённой крышей и забросанным двором, окружённое высокой травой и кустарниками под голубым небом с облаками.
Разрушенная комната с облупившейся краской на стенах, деревянными конструкциями и окном, через которое проникает свет.
Потолок с зелёной краской и лепниной, частично разрушенный, обнажающий деревянную обрешётку, в заброшенном помещении с облупившейся штукатуркой на стенах.
Потолок с облупившейся желтой краской и декоративной розеткой в центре, видны трещины и оголенные участки штукатурки.
Разрушенная комната с облупившейся синей краской на стенах, обвалившимся потолком, кучами кирпича и мусора на полу, старым шкафом и разбитым окном.

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

Последний объект — в селе Тихий Плёс, церковь Ризоположения Господня, построенная в 1877—82 гг. на месте более старой, красивейшее здание, к сожалению, внутрь не попасть, всё закрыто, так как её начали потихоньку восстанавливать, но из окон внутренности хорошо видно. Внешне церковь очень хорошо сохранилась, внутри даже есть кое-какие фрески.

Храм построен в основном на средства казанского купца Павла Александровича Прибыткова.

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

Рядом с церковью совершенно нежданно обнаружилось надгробье, спасибо жене, она догадалась промыть его водой, иначе я бы не смог прочитать, что на нём написано: <

Погребённый в храме, умер 25 февраля 1914 года, 52 лет, прах его покоится здесь.

Там похоронен Инарх Фёдорович Самуилов, священник этой церкви, сын Фёдора Николаевича, священника из церкви Михаила Архангела, соседнего Татарского Бурнашева.

На могиле, собственно, так и написано: «Іерей ИНАРХЪ ѲЕДОРОВИ… …АМУИЛОВЪ …онч. 25 февр. 1914 52 лѣтъ». Миръ праху твоему. Дорогой супругъ. И родитель».

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

Malbolge

«Программа» на Малболже (70.54КиБ)

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

Когда я увидел текст этой программы, конечно, сразу загорелся посмотреть что там выводится, но оказалось, что это даже не программа, а просто фрагмент «Hello, world.», да ещё и с несколькими опечатками (первые две ошибки — символы №№ 9 и 15):

('&%:9]!-}|z2Vzwv-,POqponl$Hjig%eB@@>}=<M:9wv^WsU2T|nm-
,jcl(I&%$#"^CB]V?Tx<uVtT^Rpo3Nlf.Jh++Fdbc=CBA9?!

Жаль, можно было бы что-то интересно закодировать. Шерлок из сериала, кстати, говорит, что во всём мире несколько человек умеют программировать на этом языке (что, по всей видимости, правда) и отличают его от случайного текста (что вряд ли, так как глазу зацепиться тут не за что).

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

Магия с сенсором освещения

Помимо сенсора внезапного движения многие новые «Макбуки» оборудованы сенсором освещённости, он едва заметно располагается рядом с видеокамерой.

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

Фокус

По-моему, довольно эффектно смотрится — блокировка экрана магическим пассом.

Код на Си получился чуть более ста строк и на этот раз я распознаю шаблон поведения, он задаётся в подстановке «+vvv000-^^^», что означает «сначала идёт положительное отклонение от среднего, потом в последовательности не менее трёх, отклонение должно уменьшаться, потом не менее трёх раз должно встретиться нулевое отклонение от среднего, потом отрицательное отклонение, потом отклонение должно увеличиваться».

При сканировании чисел с датчика я всегда рассматриваю десять значений от которых считаю среднее и каждое значение рассматриваю как отклонение от этого среднего, собственно, вот код:

// Магические пассы, улавливаемые через датчик освещённости
// Written by Evgeny Stepanischev Jun 2013
// gcc lightlock.c -framework IOKit -framework ApplicationServices -O3 -o lightlock

#include <IOKit/IOKitLib.h>
#include <CoreFoundation/CoreFoundation.h>
#include <ApplicationServices/ApplicationServices.h>
#include <unistd.h>

#define WINDOWSIZE 10
#define GESTURES "+vvv000-^^^"
#define UPDATEINTERVAL .01

const kGetSensorReadingID = 0;
int makeReaction(uint64_t current);
static io_connect_t port = 0;

void macLock () {
    CGSCreateLoginSession(NULL);
}

void updateTimerCallBack(CFRunLoopTimerRef timer, void *info) {
    IOItemCount osize = 2;
    uint64_t values[osize];

    kern_return_t ret = IOConnectCallMethod(port, kGetSensorReadingID,
    NULL, 0, NULL, 0, values, &osize, NULL, 0);

    if (ret == KERN_SUCCESS) {
        if (makeReaction(values[0])) {
            macLock();
        }
    }
    else if (ret != kIOReturnBusy) {
      mach_error("IOConnectCallMethod: ", ret);
      exit(-3);
    }   
}

int main() {
    io_service_t service = IOServiceGetMatchingService(
        kIOMasterPortDefault, IOServiceMatching("AppleLMUController")
    );

    if (service == kIOReturnNoDevice) {
        fprintf(stderr, "Cannot find Ambient Light Sensor\n");
        exit(-1);
    }

    kern_return_t ret = IOServiceOpen(service, mach_task_self(), 0, &port);
    IOObjectRelease(service);

    if (ret != KERN_SUCCESS) {
        mach_error("IOServiceOpen:", ret);
        exit(-2);
    }

    CFRunLoopTimerRef timer = CFRunLoopTimerCreate(
        kCFAllocatorDefault,
        CFAbsoluteTimeGetCurrent() + UPDATEINTERVAL,
        UPDATEINTERVAL, 0, 0, updateTimerCallBack, NULL
    );
    CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopDefaultMode);
    CFRunLoopRun();

    exit(0);
}

int checkMask(char mask, const int64_t diff, const int64_t prevdiff) {
    switch (mask) {
        case '+': return diff > 0;
        case '-': return diff < 0;
        case '0': return diff == 0;
        case 'v': return prevdiff > diff;
        case '^': return diff > prevdiff;
    }

    return 0;
}

int makeReaction(uint64_t current) {
    static uint64_t window[WINDOWSIZE];
    static uint64_t prevdiff = 0;
    static gesturepos = 0;

    uint64_t average = current;
    int i, notzerocnt = 1;

    for (i = WINDOWSIZE-1; i > 0; i--) {
        if (window[i] = window[i-1]) {
            average += window[i];
            notzerocnt++;
        }
    }

    window[0] = current;
    average /= notzerocnt;

    int64_t diff = average - current;
    if (checkMask(GESTURES[gesturepos], diff, prevdiff)) {
        gesturepos++;
    } else {
        if (!gesturepos || !checkMask(GESTURES[gesturepos-1], diff, prevdiff)) {
            gesturepos = 0;
        }
    }

    prevdiff = diff;
    return gesturepos == sizeof GESTURES - 1;
}

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

Ну и традиционно, если кто-то что-то понимает в Си, поругайте код. Заранее спасибо!

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

Иду на Вы

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

Для меня «Вы» более… притяжательное что ли. Позвольте пример. Буквально сегодня я отвечал на письмо:

Письмо (28.56КиБ)

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

В первом случае, «Ваше письмо», письмо принадлежит самой Оксане, поэтому «письмо» «Ваше», это её личное письмо, во втором, «ваша компания», компания Оксане не принадлежит, это просто компания в которой Оксана работает.

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

Понятна мысль? А вы как два эти два слова воспринимаете? Так же? Или сама мысль о таком различии кажется вам нелепой?

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

Эксплоит для Windows Phone?

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

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

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

Любопытная деталь — на прикосновения к экрану реации не было, но это не относится к трём софт-клавишам внизу экрана (там кнопки «назад», «домой» и «поиск»).

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

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

Ок, глаз

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

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

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

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

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

Фотоаппарат, понятное дело, совсем иначе устроен, не нужно наверное, объяснять как. Было бы просто, если бы глаз устроен был устроен точно так же — сняли бы кадр и записали в память, но нет, придётся довольствоваться тем что есть — маленьким пятном чёткости.

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

В общем, в этом месте есть проблема и это я ещё не перешёл к широкоугольной съёмке и съёмке с увеличением. Разве что глаза заменять, но это совсем другая история.

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

Мы стали более меньше курить

31 мая был Всемирный день отказа от курения. В этом году эта дата вышла ироничной, так как с первого июня этого года (т. е. со вчерашнего дня) вступил ФЗ №15, запрещающий курение в новом ряде мест.

На самом деле новых запретов не так уж и много, впрочем, так кажется, наверное, только не курящим.

Самое важное, что теперь борцам с курением в подъездах теперь можно будет оперировать не СНиПами, которых никто не боится, а Федеральным законом (частью 10 статьи 12). Так же некурящих порадует запрет на курение в медицинских и санаторно-курортных учреждениях (статья 12, часть 2), на детских площадках и в границах пляжей (статья 12, часть 11).

Приятно ещё, что теперь запрещено курить внутри и возле железнодорожных и автовокзалов, аэропортов, портов и станций метрополитена, это теперь можно делать не ближе 15 метров от входа в них (статья 12, часть 4). Особо обратите внимание (если я правильно понимаю закон) — эти уродские кабинки для курения в аэропортах теперь вне закона.

Курилка в старом казанском аэропорту (45.98КиБ)

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

Интернет теперь необъятный и наверное нужно объяснять какой мем лёг в основу заголовка, да? Это намёк на фразу ставшей знаменитой Светы из Иванова.

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

А давайте увеличим этот снимок ещё в 1000 раз…

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

Сейчас будет много текста и рассуждений, напрягитесь.

Жена спросила правда ли такое возможно, на что я ответил «конечно нет», но сам вспомнил свой давний умственный эксперимент.

968 ВМК (5.17КиБ)

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

Мысленно откроем этот файл в редакторе и уменьшим раз в пять, так чтобы он стал нечитаемым, пусть не полностью, а в большинстве деталей. Уменьшаем каким-то известным алгоритмом, это же графический редактор. Собственно такое преобразование — это функция, которая преобразует одно изображение (набор точек и информацию о цвете каждой из них) в другое, что-то вроде: image = F(IMAGE) (переводим большую картинку в маленькую).

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

А, впрочем, зачем нам уменьшать мысленно, давайте я это в редакторе просто сделаю:

Уменьшенный номер (4.90КиБ)

И вот мы смотрим на получившееся изображение и понимаем, что это автомобильный номер, даже некоторые цифры различаем, но не понимаем какой. Можем ли мы что-то сделать, чтобы улучшить изображение?

Или вы думаете, что и так, без труда разбираете что там написано? Если так, то это заблуждение. На нём — В960НУ, а не В968МК, как на первом. Вот, посмотрите, разница между этими двумя уменьшенными номерами:

Разница (4.81КиБ)

Нет ничего невозможного в том, чтобы «развернуть» функцию уменьшения изображения — придумать F’(IMAGE), которая бы давала обратный результат, только с одним «но». Думаю, достаточно очевидно, что функция уменьшения теряет часть информации, то есть обязательно найдутся минимум два изображения, которые дадут одинаковые уменьшенные картинки: image = F(IMAGE₁) и image = F(IMAGE₂).

Таким образом обратная функция вернёт нам не одно изображение, а набор изображений, из который наша F могла сделать уменьшенное изображение. Это было бы проблемой, если бы мы не знали на что мы смотрим. Однако, в данном случае нам дан контекст — это российский автомобильный номер.

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

Посмотрите ещё раз на разницу между уменьшенными изображениями номеров В960НУ и В968МК, на этот раз я увеличу изображение ещё в три раза:

Разница (16.67КиБ)

Даже такие слаборазличающиеся номера достаточно заметно разнятся после уменьшения, что даёт надежду, что потери информации при уменьшении не столь значительны, чтобы потерять её вовсе.

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

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

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

Многозначная логика в действии

Это прекрасно чуть более, чем полностью, друзья!

random()>0.1 (15.26КиБ)

На скриншоте 213-я строка джавовского драйвера для Монги, внутри класса ConnectionStatus, метод update.

Мне ещё сама реализация нравится. Это же надо обладать таким сломанным мозгом, чтобы так написать. Ну почему вот так не сделать?

if (!_ok && Math.random() <= 0.1) {
    return res;
}

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

Точка отсчёта

Китайское слово Тай-е буквально переводится как «самый дальний дедушка» (прадедушка). Такой титул присвоен в семье моей жены ее деду по отцовской линии. Когда мы ездили в Китай летом 2001 года, нашей первейшей обязанностью было навестить Тай-е. Семья бесконечно им гордится, ибо он дожил до 97 лет в добром здравии и с ясной головой. «Ему девяносто семь лет! — говорили мне все. — Вам непременно надо встретиться с ним!» Я и встретился с ним — бодрым, располагающим к себе Буддой в цветущем человеческом воплощении, с румяным лицом и по-прежнему острым умом. Однако вопрос о том, правда ли ему 97 лет, довольно интересен.

Тай-е родился на третий день двенадцатого лунного месяца лунного года и сы по традиционному летосчислению, принятому в поднебесной. По западному календарю это было 28 декабря 1905 года. Поскольку мой приезд пришелся на начало июля 2001 года, возраст Тай-е по современному западному исчислению в тот момент составлял 95¹⁄₂ лет и несколько дней. Так почему же все говорили, что ему 97 лет?

Потому что по старому китайскому стилю, которого и придерживался Тай-е, возраст его при рождении составлял один год, и к этому добавлялся год всякий раз, как наступал Новый год по лунному календарю — каковой случился 24 января 1906 года по нашему календарю, через 27 дней после его рождения. Он не прожил еще и месяца в этом мире, а ему уже было два года! Таким образом, когда наступил лунный Новый год в 2001 году (что случилось также 24 января, хотя вообще-то лунный Новый год может выпасть на любую дату между 21 января и 20 февраля), Самый Дальний Дедушка отпраздновал свое 97-летие.

«Простая одержимость». Бернхард Риман.

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

Интэ́л

Я всю жизнь говорил «И́нтэл» и все окружающие меня люди произносили название этой корпорации именно так. Возможно, кто-то мне и говорил, что так неправильно, но я думал, что человек ошибается и не придавал значения. Сегодня не успел пропустить рекламу на «Ютубе» и услышал «Интэ́л», полез в «Википедию» разбираться, действительно «Интэ́л».

И от рекламы есть польза!

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

Бумага о рождении в СССР

Бумага о рождении (183.46КиБ)

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

Кстати, у меня ещё один вопрос — что такое длина «53-36», почему два числа? (гусары, молчать!)

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

MacGreener C#

MacGreener C# (36.34КиБ)

Переписал МакГринер с Си на Си#. Основной код более-менее повторяется, но код получился более чем в два раза длинее.

Весь код разбит, преимущественно, на три класса — основной класс, где выполняется приложение, класс IOKit — низкоуровневые и чуть более высокоуровневые биндинги для библиотек МакОСи и IOKitMotionSensor — ещё более высокоуровневая обёртка над куском кода для опроса датчика.

Есть ещё два вспомогательных класса — IOKitException, класс кидаемых исключений и IOKitObject — класс всех ресурсов, которые требуется высвобождать (он следит за своевременным их высвобождением при помощи блока using).

Не знаю какую версию я буду дальше развивать (и буду ли), но версия на Си# более прожорлива — из-за фреймворка Mono, который требуется для исполнения программ на этом языке. Версия на Си# занимает в памяти 6,2Мб (+49,8Мб виртуальной), на Си — 840Кб (+18,6Мб виртуальной).

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

Оставить комментарий