JavaScript: баг с замыканием в FireFox

Какой alert должен показать следующий JavaScript в браузере?

<html>
<head>
<script>
/* When are functions defined? */
function really() { alert("Original"); }
if (0) {
    alert("No");
    function really() { alert("Yes, really"); }
}
really();
</script>
</head>
<body>Really</body>
</html>

Поведение тут зависит от браузера, FF выведет «Original», а остальные браузеры — «Yes, really».

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

Using MySQL as a filesystem

With MySQLfs you can store a filesystem inside a MySQL relational database. MySQLfs breaks up the byte content of files that you store in its filesystem into tuples in the database, which allows you to store large files in the filesystem without requiring the database to support extremely large BLOB fields. With MySQLfs you can throw a filesystem into a MySQL database and take advantage of whatever database backup, clustering, and replication setup you have to protect your MySQLfs filesystem.

Using MySQL as a filesystem! OMG, LOL!

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

Кризис: насколько всё плохо?

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

У меня оставались какие-то иллюзии… Теперь они разрушены.

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

«Минитаг-2»: империя наносит ответный удар

Сайт, посвящённый разоблачению устройства «Минитаг», о котором я писал, закрыт, вот цитата из комментария к моей заметке от самого автора сайта:

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

Целиком цитируемый текст можно увидеть в комментариях к моей заметке об упомянутом сайте.

Там же есть адреса зеркал сайта, на которых (блок в конце) можно увидеть скан письма, которое отправило ЗАО «Лидо» на хостинг «Народ.Ру», где размещалась первая версия сайта.

Интересно всё закручивается…

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

Русские — нацменьшинство в 30 регионах России

Во время обсуждения выяснилось, что русские сами уже стали нацменьшинством почти в 30 субъектах федерации. Кроме того, с января по сентябрь население России сократилось на 116 тысяч и составило 142 млн человек. Поэтому без притока иностранной рабочей силы государству дальше развиваться невозможно. Об этом в четверг заявил замминистра внутренних дел Евгений Школов

Пишет газета «Газета». Парадокс, конечно, чисто умозрительный. Ну, типа, раз Россия, значит русские. На деле «русские» такая смесь народов и народностей, что национальность «русские» — фикция.

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

JavaScript: преобразование в integer

Читая исходники плагина autocomplete для jQuery (документация описывает не всю функциональность плагина), нашёл замечательный небольшой паттерн. Обычный короткий способ преобразовать объект другого типа в число — прибавить к нему ноль или умножить на 1. Но есть способ лучше, оцените:

var extraParams = {
    timestamp: +new Date()
}

Просто добавляем знак перед объектом. Просто и изящно.

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

Шутка

Придумал шутку: «top10 робких».

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

С Днём рождения!

Мишка (37.80КиБ)

Жена, поздравляю тебя с Днём рождения и дарю вот этого цветочного мишку! Я тебя очень люблю, родная!

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

Легенда об ассемблере

Я смотрю об ассемблере (вероятно речь идёт про ассемблер для Intel x86) легенды слагают:

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

Стек в ассемблере есть — команды PUSH/POP, вызов функции — CALL, возврат — разнообразные RET. Никакой имитации.

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

Умножение и деление: MUL и DIV (есть ещё IMUL и IDIV), умножать и делить можно 32-битные числа, если нехватает, идёт к математическому сопроцессору, он встроен со времён 80486.

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

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

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

«Обычное PHP-приложение»

Читаю Django Book (книга о Python-фреймворке Django):

In contrast, other Web development platforms couple the URL to the program. In typical PHP (https://www.php.net//) applications, for example, the URL of your application is designated by where you place the code on your filesystem.

Может мне кто-то расскажет что такое «обычное PHP-приложение», в котором «URL вашего приложения определён местом,где размещён код в вашей файловой системы»? Даже веб-мастера блогами забытых сайтов знают о существовании mod_rewrite (если говорить про Apache), а интернет уже много лет содержит тысячи (если не сотни тысяч) рецептов по работе с ним, а так же альтернативные способы.

В итоге «обычные» (т. е. «встречающееся чаще других») «PHP-приложение» это, напротив, то, что отвечает принципам ЧПУ (это в России так REST называется, впрочем REST придуман по другому поводу).

P.S. ещё лингвисизм по отношению к PHP из той же книги:

If you’re experienced in another Web development platform, such as PHP or Java, you may be thinking, “Hey, let’s use a query string parameter!”, something like /time/plus?hours=3, in which the hours would be designated by the hours parameter in the URL’s query string (the part after the ?).

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

Акын: блоки

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

Частые паттерны — скрыть целый блок разметки или повторить его несколько раз, решается в «Акыне» одной конструкцией: описанием блока. Что именно будет происходить с блоком, шаблон «не знает». Блок идентифицируется своим именем и описывается следующим образом:

<:имя>
Значение переменной: <b>{$var}</b><br />
</:имя>

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

Пусть блок, описанный выше, нужно повторить три раза, заменяя «var» каждый раз на определённый текст, вот как это выглядит в коде:

$t = rt::t('template');

for ($i = 0; $i<3; $i++) {
    $t->var = $i;
    $t->iterate('имя');
}
echo $t;

Чтобы просто показать содержимое этого блока можно вызвать $t->show(’имя’). Вложенные секции работают точно так же: нужно сначала проитерировать вложенную секцию, потом внешнюю. Уровень вложенности неограничен.

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

<$+шаблон>
<$+шаблон секция>

Конструкция предпроцессорная (обрабатывается первым проходом), т. е. все блоки, переменные и прочее будут включены в шаблон из которого она вызвана.

В следующий раз опишу actions, а так же дальнейшие планы. На этом описательная часть закончится, если по этой части не потребуются разъяснения.

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

Blok и комментарии: часть IV

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

  • Gravatar — централизованный сервис юзерпиков
  • favatar — использование favicon сайта в качестве аватара
  • pavatar — формат для аватара сайта
  • аватары из «Ярушки»
  • аватары из «ЖЖ»
  • аватары, указанные в hCard
    Надо бы до конца «Акын» описать что ли…

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

Настоящее название города Бангкок

Полное официальное название города Крун Тхеп

กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยามหาดิลก ภพนพรัตน์ ราชธานีบุรีรมย์ อุดมราชนิเวศน์ มหาสถาน อมรพิมาน อวตารสถิต สักกะทัตติยะ วิษณุกรรมประสิทธิ์ или

Крун Тхеп Маханакхон Амон Раттанакосин Махинтараюттхая Махадилок Пхоп Ноппарат Ратчатани Буриром Удомратчанивет Махасатан Амон Пиман Аватан Сатит Саккатхаттийя Витсанукам Прасит —

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

Говорит нам википедия про Оливковую деревню (так переводится Бангкок).

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

Плагины Thunderbird

Два дня писал плагин к Thunderbird (почтовый клиент на Gecko), получил level up. Документация скудная, разбросана по куче сайтов, часто приходится читать XUL-исходники интерфейса Thunderbird. А я ещё ругал документацию на Python…

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

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

Забытый тег: KEYGEN

Реализация парсеров HTML различных браузеров содержит массу забытых тегов, о существовании которых помнят единицы, да и тем уже незачем их использовать. Один из таких тегов — KEYGEN, придуман, если не ошибаюсь, компанией Netscape для своего браузера (ещё до того как Netscape стал использовать Mozilla), содержит два атрибута — name и challenge и используется в составе форм (FORM).

Под Windows тег поддерживается всеми основными браузерами (с разным успехом) и не поддерживается альтернативным (вплоть по версии 8.0 beta2). В настоящий момент тег почти не используется. Прошло много лет и члены комитета WHATWG (основное детище который — куча браузеров и стандарт HTML5) вспомнили об этом теге.

Использование вкратце:

<form>
   <keygen name="pubkey" challenge="случайная строка">
   <input type="submit" value="Сгенерировать">
 </form>

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

Сервер, получив сертификат, готовит специальный файл подписывает его и отсылает назад браузеру с заголовоком «application/x-x509-user-cert», вся процедура подробно описана в соответствующем письме из рассылки WHATWG.

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

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

Position: fixed и IE

Но то, что в этом режиме простое обращение к document.body.filters волшебным образом прекращает дрожание (как background-position:fixed в рецепте от студии Лебедева) — похоже, открытие. Больше того, по моим наскоро проведенным опытам, аналогичный эффект дает и такая бессмысленная (как и вышеприведенный скрипт!) запись в CSS:

body { _filter: true; }

Способ «background-position: fixed» знают многие, а вот такие трюки с filter — что-то новенькое.

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

Копроэкономика

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

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

Альтернативное прекрасное в журнале 2k: «Копроэкономика. Краткое введение в экономику говна».

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

«Минитаг»

минитаг (9.37КиБ)

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

Технически прибор «Минитаг» устроен следующим образом: блок питания понижает сетевое напряжение с 220v до 20v, без выпрямления, газоразрядная неоновая лампа питается через повышающий умножитель, причем ее яркость модулируется с периодичностью 15..20 секунд по сигналу от PIC-контроллера. […]

С технической точки зрения, прибор «Минитаг» эквивалентен обычной неоновой лампочке, вроде тех, что применяется в подсветке бытовых выключателей.

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

Асоциальное поведение: кол за фото

Такая история: на сайте «Одноклассники.ру» вскрыли аккаунт автора цитируемого поста, это там не редкость, только я знаю четверых, у кого аккаунт «увели» (что наводит на размышления). Завладевший аккаунтом начал ставить из-под него плохые оценки за фото всем подряд. Реакция людей, попавших под раздачу колов, оказалась совершенное неадекватной, я процитирую несколько штук:

ты чего то попутал с оценкой?

Ты где находишься щас?????????????????

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

ты чё такой убогий?

Ты мне испортил оценку за что я не знаю!!! я в ответ ты извени!!! конечвно!!!!но я человек отвыкший от ужастного обращения к себе

ЧТО ПОБУДИЛО ВАС ВЫСТАЛЯТЬ МНЕ КОЛЫ? СТОЛЬ ЮННЫЙ ВОЗРАСТ ???

ах ты мерзкий фашиствующий ублюдок!!!да как ты посмел поставить моей фотки еденицу!!!да я твоё шдп знаеш где вертел)))ну всё!!будь аккуратней выходя из подъезда и оборачивайся на улицах!!!

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

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