А давайте увеличим этот снимок ещё в 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 комментария

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

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

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

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

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

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

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

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

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

Ок, глаз

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Иду на Вы

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

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

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

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

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

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

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

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

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

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

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

Фокус

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

Код на Си получился чуть более ста строк и на этот раз я распознаю шаблон поведения, он задаётся в подстановке «+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 комментариев

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 комментариев

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Не нравится только, что я на Ретине не могу выдеть свои фотографии в том качестве, в каком мог бы. Я сейчас болею, кашляю, чтобы никого не будить, ушёл на кухню и сделал 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 комментария

SVG-спрайты

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

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

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

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

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

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

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

Игра «Candies»

Candies (150.85КиБ)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Римский нож

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

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

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

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

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

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

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

«Ё» и «ять»

Ёлка (219.80КиБ)

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

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

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

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

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

Неонилла

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

Хочу доложить. Хобби не забросил, на данный момент в дереве 1752 человека, это, конечно, в основном, «в ширину». Если считать меня нулевым поколением, то все ветви уже достигли пятого поколения, некоторые (уже в приличном количестве) — шестого.

Появилось новое интересное имя — Неонилла (от греческого «Νέος», «новый») (как утверждает «Википедия») имя редкое, родственное ему хорошо нам знакомое имя Неля.

Неонилла Ивановна Старостина — моя вероятная прапрапрабабушка (пока это выясняется).

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

Конец Гугл Ридера

Первого июля Гугл закапывает очередной полезный проект — Гугл Ридер. Если кто вдруг не знает, это читалка РСС. Я этим проектом пользовался с момента появления, каждый день по многу раз. Не забудьте положить цветочек на виртуальное кладбище продуктов Гугла.

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

Я так ничего и не смог выбрать взамен. Есть идеи куда переходить после первого июля?

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

При царях Горохах

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

— А по-моему, они должны враждовать между собой. — Вот именно! Предположим, был бы только один. (…) Если он чувствует силу, то отбирает у своих подданных всё — жён, сыновей, имущество. В общем, делает что хочет. А посмотри, как у нас? Если бы один из наших правителей попробовал так вести себя, мы тут же переметнулись на сторону второго. Так что они даже не пробуют.

Джин Вульф. «Воин тумана».

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

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

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

ReactOS/Windows *CriticalSection API → Linux

Вчера портировал часть «РеактОС» под Линукс, пришлось разобраться что делает небольшой фрагмент АПИ Виндоуз («РеактОС» — это операционная система, совместима с Виндоуз).

Функции оказались небольшими, но вдруг кому-то время сэкономит:

#include <pthread.h>

inline void InitializeCriticalSection(CRITICAL_SECTION *cs)
{
    pthread_mutexattr_t mAttr;
    pthread_mutexattr_settype(&mAttr, PTHREAD_MUTEX_RECURSIVE_NP);
    pthread_mutex_init((pthread_mutex_t *) (void *) cs, &mAttr);
    pthread_mutexattr_destroy(&mAttr);
}

inline void DeleteCriticalSection(CRITICAL_SECTION *cs)
{
    pthread_mutex_destroy((pthread_mutex_t *) (void *) cs);
}

inline void EnterCriticalSection(CRITICAL_SECTION *cs)
{
    pthread_mutex_lock ((pthread_mutex_t *) (void *) cs);
}

inline void LeaveCriticalSection(CRITICAL_SECTION *cs)
{
    pthread_mutex_unlock ((pthread_mutex_t *) (void *) cs);
}

После этого все другие обращения к структуре CRITICAL_SECTION нужно, конечно, убрать, иначе код будет падать.

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

Лучше сова в руках, чем жаровонок в небе

В Твиттере интересуются моими «экспериментами» по преобразованию меня в «жаворонка».

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

Напоминаю чем отличается «сова» от просто ленивого человека: если «сова» встаёт раньше положенного, то почти всё утреннее время она будет тупить. В моём случае совсем всё плохо, самое плодотворное у меня время — после 8 вечера, а в десять мне уже желательно лечь спать.

Второе — вставать очень тяжело.

От утреннего тупняка мне никуда не деться, а чуть-чуть облегчить жизнь со вставанием по утрам получается. Совета всего три: режим, плотные шторы, утренний душ.

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

7:00 — подъём (никаких вторых и третьих будильников, встаю сразу) 7:05 — лёгкий завтрак 7:15 — душ (в моём случае — ванна, душ я не люблю, ванну — люблю, вода почему-то помогает чуть проснуться) 7:30 — конец водных процедур 7:35 — чтение новостей, утренней почты 7:45 — вызываю такси, собираю сумку, делаю мелкие вещи по дому, одеваюсь 8:00 — выхожу из дома к такси (тут время варьироваться может, в зависимости от такси)

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

Плотные (совсем не пропускающие свет) шторы мне посоветовал кто-то из читателей. Спасибо, я приобрёл. Засыпать стал лучше, это помогает лучше высыпаться.

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

Пятничная загадка для PHPшников

В ЖЖ увидел прекрасное — загадку про ПХП.

Те, кто знает этот язык, скажите, почему этот код не выдаёт ошибок или предупреждений (все ошибки, конечно, включены):

<?php
//bolknote.ru
?>

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

Павел Степанович Стрелков

Удивительно. В одну из поездок к родителям я посетил кое-какие кладбища, где могли лежать мои предки. В том числе был в Старом Исакове Бугульминского района, там я нашёл могильный камень некого Шулешкина Александра Трофимовича, который умер 1 мая 1901 года. Я его даже сфотографировал:

Погребальный камень с надписью «Здесь погребено тело жены моей Елены Ивановны, умершей 15-го мая 1845 года, в возрасте 30 лет
Могила Шулешкина

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

В бумаге об аренде за 1900 год Шулешкин зачёркнут и вписан Анечкин Валерий Иванович, который так же упоминается в бумаге за 30 июля 1900 года как помещик Ново-Исаково и некоторых других деревень.

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

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

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

Историк, который для меня изучает архив, считает, что в 20-30-е мои предки сменили фамилию на «Стрелковы», говорит такое часто случалось, правда в моём случае причина не ясна.

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

AR.Drone 2.0 фирмы Parrot

Я, как знают постоянные читатели, люблю ездить по заброшенным храмам и фотографировать. Меня привлекает очарование старых зданий, их атмосфера, которую я часто не могу почувствовать там, где толпятся люди. Кроме того, часть заброшенных цервей рушится или намеренно разрушается. И мне хочется сохранить их хотя бы на фотографиях.

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

И я с завистью смотрел на ребят, запускающих любительские модели, поднимающие в воздух камеры. А недавно узнал о существовании AR.Drone 2.0 фирмы «Паррет». 2.0 — это номер версии, от первой отличается улучшенной фрональной камерой (1280×720 против 640×480), наличием компаса, барометрического альтиметра и характеристиками моторов.

AR.Drone 2.0 фирмы Parrot (399.68КиБ)

В комплекте идёт два корпуса (для полётов внутри помещений и на воздухе, последний меньше весит, а значит время полёта чуть больше), сам летательный аппарат и аккумулятор. Покупку мы делали в «Медиамаркте». Поскольку я в интернете при менеджере нашёл такой же аппарат, но продающийся в «М.Видео» дешевле, то мне ещё подарили запасной корпус для полётов внутри помещений (он 2,5 тысячи стоит).

В полёте (63.72КиБ)

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

Я управляю (197.01КиБ)

Аккумулятора хватает минут на 15 полёта, так что вместо запасного корпуса надо было брать запасной аккумулятор, зарядка занимает примерно 1,5 часа. Дальность — примерно 50 метров, послав дрона далеко вперёд, легко его больше не найти — теряя сигнал он снижается и если вы летали надо полем пшеницы, то вряд ли его найдёте, я в траве искал минут 10. Так что устройству отчётливо нехватает СОС-маяка.

Пока хорошо управлять им я не научился, на высоте дуют другие ветра и там его всё-таки сносит, но уже несколько фотографий сделал, две лучшие выкладываю:

Фото купола (154.13КиБ)

Это, если кому-то интересно, кстати церковь Иоанна Златоуста 1732 года, которая находится в селе Ивановское Верхнеуслонского района Татарстана.

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

Второе фото купола (117.75КиБ)

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

В общем, устройство интересное, но нужен второй аккумулятор, иначе хватит его только на полёт над одним-двумя объектами, не больше, а мы иногда выезжаем на 3—5.

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

X10: управление домом

Неспешно смотрю протокол Икс10 и аналоги. Кто не знает — это управление всяческой техникой по проводам электрической сети. Если кто занимался этим вопросом, подскажите, пожалуйста.

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

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

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

AR01-220 IP20

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

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

Датчик (74.76КиБ)

В общем, задумался я об автоматизации процесса заботы о здоровье. Китай, как не странно, меня не выручил — найденная масса датчиков оттуда, либо просто бессильно пищит на дым, либо обладает оптореле на что-нибудь низковольтное, а у меня вертилятор, питающийся от 220В.

Нашёл пару российских фирм, выпускающее то, что мне нужно — датчик сигаретного дыма с регулировкой чувствительности, который умел бы управлять устройствами, питающимися от 220В. Первая фирма не работает с физическими лицами, потому отвалилась, вторая НПП «Эконикс» проблему в этом не увидела и я банковским переводом в 5,5 тысяч оплатил средство сделать жизнь лучше. Доставка в Казань обошлась всего в 250 рублей.

Датчик питается от сети в 220В, что очень хорошо — не нужен отдельный блок питания, крепится на ДИН-рейку (у меня сейчас просто лежит сверху на водонагревателе, поближе к вентиляции) и имеет два управляющих выхода — неинтересное мне оптореле (100В, 0,15А) и «механическая» релюха (220В, 10А), которую я подрядил на управление вентилятором.

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

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

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

Пост ругани на S7

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

Все 3,5 часа приходилось ловить сотрудников компании и выпрашивать у них информацию — почему задержка, что случилось, когда полетим (на табло вылетов все 3,5 часа высвечивалось «информация ожидается»)?

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

Всё оставшееся время я ловил сотрудников «С7» и объяснял, что пассажирам всё равно есть ли там питание, если выбор — его загрузка в течении часов или вылет немедленно. Пилотов я обещал накормить за свои деньги.

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

Так вот, я считаю, что сотрудники компании «С7» повели себя тут как пидорасы в плохом смысле. Надо было выйти к пассажирам, объяснить ситуацию, предложить вылететь вовремя без обедов, а деньги за стоимость обеда — вернуть.

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

← сюда туда →