Не все кнопки одинаково полезны

Клавиатура в банке (54.64КиБ)

Это не «клавиатура для блондинок» (надпись на втором ряду — «ненужные кнопки»), это клавиатура на рабочем месте банковских работников в «Альфа-банке»

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

Бардак: Motion JPEG (M-JPEG) и тег VIDEO

С утра, складывая носковый пасьянс (не сошёлся, три (!!!) разных носка) — жена постирала чёрное, я задумался о формате M-JPEG. Если коротко, это формат видео, каждый кадр которого — JPEG. Очень простой формат, достаточно распространённый и его поддерживают основные браузеры — «Firefox», «Сафари», «Хром», «Опера», не поддерживает только Internet Explorer (даже девятый).

M-JPEG (51.09КиБ)

Таким образом, вопреки всем разговорам, у нас уже есть единый потоковый видеоформат, de facto, причём есть давно. Правда, плохенький (напоминаю — каждый кадр целый JPEG) и проигрываемый немного по-разному (обредший нового адепта «Хром», тормозит меньше всех). Впрочем, чтобы как-то обелить формат, у него есть и достоинства — каждый стоп-кадр у него довольно качественный, потому M-JPEG любят в камерах охраны.

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

Воспроизводится M-JPEG через тег IMG, я даже небольшой пример накидал за 15 минут (нажмите круглую блямбу справа внизу картинки для воспроизведения).

При помощи тега CANVAS, M-JPEG и метода «stop» у окна можно даже сделать плеер, плохой, но работоспособный. Я попробовал, но результат мне не понравился. В частности, потому что тег IMG не умеет управлять видеопотоком, стоп-кадр нужно делать при помощи CANVAS, а сделать его можно только после остановки видеопотока (метод «stop» у окна нам в этом поможет) и плеер между остановкой видео и появлением стоп-кадра секунду не показывает ничего.

Можно, кстати, вспоминить, что Internet Explorer с какой-то бородатой версии поддерживает DYNSRC у тега IMG, причём там-то этот тег имеет богатое API для управления видео, в котором есть всё, что сделать полноценный плеер.

Ещё более кстати, что этот плеер будет поддерживать видео в формате AVI и кодеки установленные в системе, так что если у вас в системе есть кодек для M-JPEG, можно просто гнать видео в этом контейнере, IE его должен понять. То есть, можно и Internet Explorer обучить понимать Motion JPEG.

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

Rape-Axe

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

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

У меня только два вопроса — как проводили испытания и что будет, если насильник будет на адреналине или на наркоте. Я помню, что на карате, когда в крови много адреналина, некоторые очень сильные удары воспринимаются совсем иначе.

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

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

with в JavaScript и VBScript

Одной из бесполезных конструкций языка JavaScript называют «with». Неспроста, эта конструкция непрозрачна и потенциально может создать непростые проблемы. Небольшой код:

with (MyObject) {
    width = '100px';
    height = '200px';
    display = 'block';
}

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

С языком VBScript я знаком с тех пор как программировал, используя технологию ASP. В дальнейшем, я иногда использовал его, чтобы программировать что-то для Internet Explorer, всё-таки некоторые вещи для этого браузера было проще делать в нём.

Этот язык я, в общем-то, не люблю (в отличие от JavaScript), но вот конструкция «With» устроена в нём разумнее:

With MyObject
    .width = "100px"
    .height = "200px"
    .display = "block"
End With

Заметили точки впереди? Они говорят о том, что используются не просто переменные, а свойства (ну или методы) объекта, указанного в «With». Вот так просто решается куча проблем.

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

Прощай, «Опера»

Прощай, «Опера», мне было хорошо с тебой, но это невыносимо. С версии 10.50 ты обрастаешь багами, как баржа ракушками. Сегодня я увидел, что на твоём FTP лежит релиз версии 10.60, а в нём три критичных для меня бага, два из которых делают жизнь в нашем интранете для меня труднее. Я терпел, сколько мог, но больше не могу.

Научите меня пользоваться «Хромом», ещё лучше — «Хромиумом», он, говорят, быстрее развивается, что немаловажно для молодого браузера. Что ставить? Откуда скачать уже собранные версии «Хромиума»?

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

Секс-дружелюбие

Автор блога, ее зовут Эмили Нагоски, приводит несколько найденных ею в Сети определений секс-дружелюбия:

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

«убеждение: секс — это удовольствие, это хорошо и весело»;

«свободная от стыда радость здоровой сексуальности»;

«взгляд на сексуальность как нечто хорошее — а не плохое и даже не нейтральное».

Наста_Ящая из F5 предлагает переводить «sex-positive» как «секс-дружелюбный». Это точно лучше, чем «секс-позитивный», но всё же недостаточно хорошо. Ну-ка, попробуем. Я — секс-дружелюбный. FFFUUUUUUUU-

Кстати, в F5 вокруг английских слов английские кавычки. Какой стыд.

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

Про состояние российской разведки

Свежая смешнина со вкусом Родины — недавно в США поймали российских шпионов разведчиков, в ЖЖ smartnik800 некоторые особенности нашей разведки:

Российские шпионы пользовались стеганографией (интеграция текста в невинные по содержанию картинки), но при обыске ФБР нашло бумажку, где было написано «alt, control, e» и записан пароль открытым текстом (именно такими напоминалками обклеены мониторы у российских бухгалтеров!).

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

Там ещё несколько пунктов с подобным содержанием.

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

Никто ещё не выпустил пиво Python?

Сейчас сижу на кухне, а перед глазами стоит соседская литровая банка пива, подумалось, что если бы кто-нибудь выпускал пиво «Пайтон», то «1L» на нём смотрелось бы очень гармонично.

Не все знают Пайтон, поэтому придётся разъяснить шутку. «1L» — так в Пайтоне записывается число «1» типа «long» (антизанудская мантра: знаю, long — это класс-объект), так что для пайтонистов такое сочетание вполне узнаваемо.

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

DEFENDER в favicon

DEFENDER (2.86КиБ)

Трюк с подменой favicon используется в вебе довольно редко, впрочем, этому есть причина: он не работает в Internet Explorer (даже в 9-й версии). Я его использовал в первый раз года четыре назад — в таск-менеджере, который мы писали для внутренних целей в фирме L., он использовался для того, чтобы сигнализировать, что на вкладке таск-менеджера есть срочная задача.

Но есть способы использовать его более впечатляющим (хотя и более бесполезным) способом — дать возможность играть внутри favicon в игры. Существуют несколько таких игр, одна из них, например — DEFENDER.

Работает в «Опере» 9.2+ и Firefox 2.x (в FF 3 проблемы). Под WebKit работает выборочно, новые версии (где реализован метод CANVAS API «toDataURL()») игру поддерживают, правда, в шестом «Хромиуме» тормозит безбожно.

Управление простое: «N» — новая игра и стрелять, «WASD» (или клавиши курсора) — управление корабликом, «Enter» — чтобы выбрать куда вывести игру (на страницу или favicon).

P.S. На сайте с этой игрой есть ещё несколько таких игр.

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

Хороним XBM

Помимо GIF, JPEG, PNG и SVG в браузерах есть ещё один «общий» формат графики — XBM. Не сказать чтобы сильно полезный, скорее забавный. Формат текстовый и очень простой, как раз его использует Wolf5k для отображения графики.

Несколько лет назад его поддержку прекратил браузер IE, с версии IE6.0SP1 XBM больше не поддерживается. Причина проста — IE падал, если подсунуть ему неправильно сформированную картинку. Поэтому поддержку формата просто отключили (сделали ключ в реестре («BlockXBM»), если очень хочется, поддержку можно вернуть). В общем-то, правильно, формат совершенно гиковский и его использование большая редкость (хотя и встречается).

И вот сегодня я, поставив Firefox 4.0b2pre, увидел, что в нём нет поддержки XBM. Стал разбираться. Оказывается его поддержку выключили в версии 3.6:

It doesn’t seem like anyone uses XBMs on the web these days (microsoft dropped support for them in ie6), and we no longer use them anyone in the platform. Each additional image decoder makes it more time consuming to maintain imagelib, because changes have to be replicated. Thus, unless somebody has a reasoned opinion to the contrary, I’ll remove XBM support in a week or two.

Увы. Из исходников выкинули совсем, никакого ключа в реестре.

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

Снова про кроссбраузерные скруглённые уголки

Решение проблемы скруглённых уголков через VML есть в статье Льва Солнцева «Кроссбраузерные закруглённые уголки» (без JavaScript). Проблема заключается в следующем:

В VML есть предопределённая фигура: прямоугольник с закруглёнными углами roundrect. […] Но у этой фигуры есть один значительный недостаток: радиус кривизны задаётся через отношение к большей стороне, что делает результат непредсказуемым и неподходящим для многих случаев.

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

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

Контекстная реклама такая контекстная

Но милиционеры умнее (intel) (18.39КиБ)

Из статьи «Письмо Яне Яковлевой: „Как меня пытаются посадить“».

Милиционеры умнее «Интел» или у них «Интел инсайде», потому они и умнее?

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

Google Native Client

Поиграл немного с Google Native Client — это плагин для браузера (поддерживаются Firefox, «Опера», «Сафари» и «Хром» и платформы Windows, Mac и Linux на x86, x86-64 и ARM).

Это плагин, который умеет исполнять скомпилированный бинарный (!) код в браузере. В каком-то смысле это напоминает ActiveX. Вы пишете бинарный код, компилируете его в специальной версии gcc, а потом просто встраиваете в браузер тегом EMBED.

Меня интересовало как тут соблюдается безопасность. Коду многое запрещено (по сути, всё, что разрешено — это эффективное использование процессорного времени, за остальным нужно обращаться в браузер через NPAPI или SRPC (Simple RPC)), но разработчики много говорят о том, что допускаются ассемблерные вставки.

Как так?

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

Не знаю как там в процессорах ARM, а в x86 команды могут иметь разную длину, какая-нибудь «PUSH AX» занимает байт, «MOV AL,41» — два, « MOV AX,[BP+8]» — три и так далее. Если сделать переход не на первый байт команды (а, например, на второй байт команды «MOV AL, 41»), то окажется, что оставшаяся последовательность (возможно с байтами, которые идут дальше) тоже что-то означает (в случае «MOV AL, 41» второй байт будет «41», это команда «INC CX»).

Это даёт возможность замаскировать внутри команды любую запрещённую команду и выполнить её, сделав переход не на первый байт. Как Google Native Client защищает нас от этого? Очень просто.

В Ассемблере есть специальная команда — «NOP» (в x86 занимает один байт, её код — «90»), она не делает ничего. Все команды вашей программы выравниваются до 16 байт этой командой. То есть «MOV AL,41» будет дополнена 14-ю командами «NOP», а все переходы разрешаются только на границу этих 16-ти байт. Для этого у адреса перехода всегда отрезаются несколько младших бит.

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

Интересно, что код, контролирующий безопасность и реализующий SRPC, получился очень небольшой, в ролике на YouTube разработчик говорит то о 6000 строк, то о 6000 байт. В любом случае, то и другое — немного. Там же (в ролике) показывали интерпретатор Ruby, работающий в браузере. Это интересно, но не более, интереснее то, что код на Си (или там C++, неважно) пришлось менять очень мало, чтобы перекомпилировать его в Google Native Code.

Мне кажется, это интересный проект.

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

Буйство эмуляторов на JavaScript

Существуют эмуляторы на JavaScript следующих платформ: GameBoy, ZX Spectrum, Радио-86РК (мой первый компьютер, между прочим), Nintendo NES, Commodore 64.

Естественно, нужен какой-нибудь хороший браузер, например, «Хром» или «Опера» 10.60 и выше.

Есть где поностальгировать. Думаю, лет через 5—10 появится эмулятор PSP на JavaScript с использованием WebGL, мощностей как раз хватит.

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

Wolf 5k strikes back

Забавная была игрушка «Wolf5K». Это игра на JavaScript, занимающая пять килобайт (!). Был такой конкурс когда-то — «The 5K», цель — уместить что-нибудь толковое в 5 килобайт.

Скриншот интерфейса игры: слева — счёт (Score), в центре — количество оставшихся врагов (Enemies Remaining), справа — здоровье (Health).

Ребята произвели фурор тогда, они уместили в этот размер небольшую псевдотрёхмерную бродилку. Никаких CANVAS! Хитрость в том, что вся графика (кроме кровищи) делается в формате XBM и передаётся тегу IMG через схему «javascript». Игрушка работала в IE5, IE6, Mozilla 1.1+ и Netscape 4.77 для Мака.

Формат XBM — это текстовый формат чёрно-белых картинок (я даже когда-то делал библиотеку для PHP Image::XBM). Его удалили из IE в SP2, работает ли это до сих пор в Gecko-браузерах я не знаю (у меня сейчас не установлен FF, а ставить лень), а «Опера» не читает графику через схему «javascript», так как никогда не делает попыток угадать контент по содержанию. Только по MIME-типу.

В общем, захотелось мне почему-то вспомнить эту игрушку, а она у меня не работает. Ну, делов-то. Заменить схему «javascript» на чуть доработанную «data». Вот патч, нужно открыть окно игры, скопировать его в строку браузера и нажать «Enter»:

javascript:void(eval(X.toString().replace(/"j.*?;"/, '"data:image/x-xbitmap," + encodeURI(im)')))

В IE по-прежнему работать не будет (в нём нет XBM), в «Хроме» тоже не должно, в «Опере» — заработает. Если у кого-нибудь установлено что-то ещё, попробуйте и скажите получилось ли.

Добавлено утром: читатели сообщают, что в «Сафари» тоже работает.

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

Пуш-ап в плавках

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

— И с пушапом есть… — Чего? С чем-чем? — С пушапом. Вот. Изволите видеть…

И протягивает мне зелененькие трусики в облипочку. А внутри…э-э-э, как бы это…ну, на самом вот на этом месте укреплена такая будто бы чашка от бюстгальтера из толстого поролона, обшитого мягкой тряпочкой.

— Это, —указывает молодой человек наманикюренным пальчиком, — в целях эстетического впечатления. Понимаете? Так, получается цельно, аккуратно, объемно. Пушап, в общем. Некоторые девушки…

Цитата из чьего-то ЖЖ. Ну что, скоро мужики будут, в притворном непонимании, восклицать — «ну что такое! она весь вечер смотрит на мои плавки!».

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

Короткий способ определения IE через JavaScript в IE9 не сработает

Из блога IEBlog:

var len = [1,2,3,].length; 
alert(len); //should be 3, IE8 says 4

В IE9 поправили застарелый баг — Internet Explorer добавляет ещё один элемент в массив, если в конце перечисления элементов массива есть запятая. На этом основан самый короткий способ проверки на IE через JavaScript. По стандарту последняя запятая игнорируется. IE9 теперь следует стандарту.

Не будет работать и проверка через «\v» (цитата из того же блога):

alert("\v"==="v");//IE8 said true, should be false 
alert("\v"==="\u000b"); 
    //IE8 said false, should be true

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

if (/*@cc_on!@*/0) {
    // IE
}

P.S. А вот найденную мной… особенность метода split в IE9 так и не поправили.

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

В журнале «Xakep» написано, что XOR эффектиный криптоалгоритм

Ответ очень прост — нужно вспомнить алгоритмы шифрования. Самым простым и одним из самых эффективных (при правильном использовании) криптоалгоритмов является так называемое XOR-шифрование.

Цитата из журнала «Xaxep». OMG! XOR назвали «эффективным криптоалгоритмом».

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

Вакансии программистов в «Яндексе»

Ребята, у меня в группе появилось несколько вакансий программиста на Пайтоне. Основные требования — Python, MySQL, чтение HTML/CSS. Большим плюсом будет знание Django, плюсом — знание Perl или PHP, умение работать с SVN или представление о том, что такое системы контроля версий.

Напишите о себе мне на почту или в комметариях к этой заметке (только не забудьте сказать как с вами связаться).

Работать придётся на внутренними сервисами компании «Яндекса», это (например) наша внутренняя Вики, «Ярушка», система для саппортов, архив рассылок и так далее.

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