С первым апреля!

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

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

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

CSS sprites, data URI

CSS sprites, data URI+mhtml, склейка CSS с JavaScript. Что ещё придумают веб-мастера, чтобы добиться от браузера простой вещи: грузить ресурсы единым куском? Производителям браузера давно пора обратить на это внимание, а не заниматься всякой ерундой, типа раскрашивания бордюров (камень в огород WebKit).

Например, в FireFox есть прекрасно подходящий для этого протокол «jar» (а в Internet Explorer немного похожие на него «mhtml» и «res»). Этот протокол стал известен массам в основном благодаря уязвимости, которая работала через него.

URL выглядит как «jar:http://sample.org/file.jar/folder/file.png», где «http://sample.org/file.jar» — путь до JAR-файла, «folder/file.png» — путь внутри JAR. JAR — это просто ZIP-архив. Внутри него, как в любом ZIP-архиве, могут быть папки и файлы. Хорошо было бы засунуть ресурсы в такой архив и подключать их по пути внутри архива.

К сожалению, FireFox сейчас сделать так не позволит, а жаль (так они залатали уязвимость).

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

Тёма — виртуал Воробья?

У меня в последние пару недель ощущение, что Тёма взял в соавторы своего дневника в ЖЖ умницу Анатолия Воробья. Потому что, кроме обычного тёминого стрёмного гонева и поливания гамном, стали появляться вежливые посты, оформленные совсем другим языком. А два предпоследних поста вообще про программирование и шахматы, что для Воробья более, чем характерно.

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

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

eGo Helium

eGo Helium (12.01КиБ)

Где-то под Новый год купил через «Амазон» жене жёсткий диск от iomega — eGo Helium. Внутри — какой-то «Самсунг», но корпус красивый и стильный, размер небольшой, внешнего питания не требует и скорость — честный USB 2.0.

Мы довольны. Хотя скрепка на фото с сайта производителя в несколько раз больше обычной канцелярской.

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

Псевдофакты: сердце слева

Где сердце? (10.92КиБ)

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

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

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

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

Теперь вы знаете куда надо класть руку, когда «колит сердце».

P.S. Сподвигла меня на написание этого поста картинка на сайте студии Лебедева в разделе «Понос».

P.P.S. Уже после написания я подумал, что не все смогут найти сердце, если никогда не видели его рентгена. Сердце — белый мешочек, начинающийся с перекрестия, и «лежащий» на белом большом внизу фото.

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

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

Про технологии и чудеса

Отличный ролик про отношение к технологиям. На английском, но с русскими сабтитрами. Смотреть обязательно!

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

«//» в ссылках

Как известно, в вебе, в подавляющем большинстве случаев, для адресации ресурсов применяются HTTP или HTTPS протоколы. Как вы понимаете, я не Капитан Очевидность, так что за этим последует какая-то интрига.

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

То, что я скажу дальше NDA не является, например, об этом рассказывал Олег Оболенский на РИТ-2007: все сервисы состоят из кусочков, кусочки грузятся с какого-то сервера. На практике это означает, что часть CSS и картинок, которые используются в нашем интранет-хозяйстве лежат на другом сервере и их ковыряют совсем другие люди.

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

Как это реализовать? Как менять протокол, в зависимости от протокола страницы, если CSS, который грузится статичен и менять пути внутри него не получится? Делать два отдельных CSS?

Есть способ проще.

Откуда я о нём узнал, я не помню. Что-то смутно вспоминаю, что, кажется, прочитал у Кукуца много лет назад, с тех пор и использую. Впрочем, память меня тут, вероятно, подводит, потому что до моего прихода в «Яндекс» способа там этого, похоже, не знали.

Способ заключается в том, чтобы не указывать протокол. Выглядит такой URL вот так: «//example.net/picture.jpg» и описан в RFC 1738 как «Common Internet Scheme Syntax»:

While the syntax for the rest of the URL may vary depending on the  particular scheme selected, URL schemes that involve the direct use of an IP-based protocol to a specified host on the Internet use a  common syntax for the scheme-specific data:

//<user>:<password>@<host>:<port>/<url-path>

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

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

Ксения Возняк

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

Яблочники — это вообще гламурные кисо в мире ИТ…

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

Я, вот, до сих пор не знаю всех новых клавиатурных комбинаций в Windows 7 (хотя работаю на ней не первый месяц), да и весь объём нововведений не представляю. Но будьте уверены, как только у «Эппл» выйдет новое кошачье (тут я какбэ намекаю на названия Mac OS X, для тех кто не в курсе), они заучат все новые комбинации, в деталях разберут все новые возможности и расскажут всем про все няшные плюшечки.

А так, по отдельности, они нормальные ребята, ага.

Ну, и чтобы два раза не вставать…

iTunes — гавно, гавно, гавно, пользоваться iTunes — стыдно! Стыдно! Пользоваться iTunes — стыдно! (надеюсь, сработает).

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

Windows 7: repair screen

Ну, раз так, давайте я что-нибудь про Windows 7 расскажу, тем более повод есть: сегодня мой ноут вдруг резко вырубился, с ним такое бывает, а после включения «Винда» сказала, что загрузиться не может. После чего, немного почесала винтом и показала repair screen, там пару десятков минут что-то делала и запустилась. Один из экранов я сфоткал.

Repair screen (44.72КиБ)

Кардинальное различие в том, что когда раньше Windows из NT-ветки (т. е. NT, 200x, XP, Vista) у меня падала, она, либо выводила диагностику («нет такого-то файла, ничего не поделаешь») и останавливалась, либо требовала установочного или восстановочного диска.

Видимо, сейчас (по крайней мере, если физически всё исправно и загрузочный сектор винта цел) ничего такого не надо. Ура.

P.S. Чтобы не гадали из-за чего вырубается у меня комп, я скажу сразу, так как причину знаю. Я случайно сломал USB-разъём (пластмастка выпала), но иногда, по привычке, туда что-то включаю, устройство работает, но иногда коротит питанием на корпус, у компа срабатывает защита.

Мне интересно, что бы мне потребовалось сделать, если бы у меня сломался (единственный) USB-порт на Mac Air? Тут я просто забил — у меня ещё четыре исправных есть, а там?

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

Век живи, век учись, от нехватки памяти умрёшь

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

Есть модуль, внутри него происходит fork — внутри потомка изолируется libmapi, у которой нещадно течёт память. Модуль используется внутри программы, которая перехватывает все exceptions (!). Знаю, что это неправильно, но она это делает в режиме отладки, для отладки и используется.

Загвоздка в том, что процесс-потомок выходил при помощи sys.exit. Если вы уже знаете в чём проблема, можете начинать хохотать. Я не знал и убил тестовую машину — кончилась память. Ваня Сагалаев тоже не знал.

sys.exit пораждает иключение и выходит с его помощью. Если где-то это исключение блокируется, то потомок, натурально, не может умереть. Решение простое — выходить надо по os._exit.

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

Libmapi: размер поля

распечатка рекуррентного события (81.80КиБ)

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

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

P.S. Пока тесты не падают. Значит размер поля ReminderSet в структуре ExceptionInfo действительно 32 бита (это структура внутри PidLidAppointmentRecur).

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

О5 25: JavaScript — не Java!

Ллео, +1, зачетно обосрал JS ))) Ненавижу javascript, а еще заточку на кроссбраузерность, где код JS вырастает раза в 3 из-за разных браузеров. Говно это. Кастрат Java. Долой JS!

Пишет у Каганова в блоге какой-то чудик об одном из самых гармоничных языков современности.

В 21-м веке есть люди, который до сих пор считают, что JavaScript «кастрат Java». Если кто до сих пор не знает — JavaScript и Java не родственники, название языка — маркетинговый ход, хотя первоначальное название языка («Mocha») было не лучше.

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

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

Teamicide — командтоз?

Они вбивают клинья между членами коллектива, часто из-за зависти, что ДеМарко (DeMarco) и Листер (Lister) называют непереводимым термином teamicide (team — команда, а teamicide — созвучно suicide — самоубийство): непреднамеренный развал ранее сплочённых команд

Из перевода статьи Джоеля Спольски «О вреде премирования».

Такой уж и непереводимый? Я его предлагаю перевести как «командтоз». Достаточно очевидно или надо расшифровать?

P.S. Кстати, хорошая, на мой взгляд, статья про премирование (у Спольски всё-таки художественный рассказ, а не анализ) есть на Management.Com.Ua.

P.P.S. Смирнов убивает лулзы!

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

Часть правды о бытовой химии

Цитирую целиком, ибо мне это кажется достаточно важным:

  1. Шампунь по составу мало чем отличается от геля для душа, поэтому они легко заменимы.
  1. Страна производитель — важный показатель качества. Fructis российского производства и французского — разные шампуни. Для развивающихся стран используются более дешевые ингредиенты в меньших количествах (все остальное — вода), производства EU находится под более строгим контролем (меньше риск, что в бадью с вашей любимой помадой упадет бидон с казеиновым клеем, что случается), в Европе строже стандарты качества. Другими словами, для EU делают более дорогой и густой шампунь, чем для российского рынка. Поэтому покупайте то, что сделано в Европе для европейской компании.
  1. Читайте этикетки. Состав продукта перечисляется по убыванию массы ингредиентов. Например, если написано: «Состав: вода, сода, соль… какие-то непонятные слова….масло виноградных косточек точка», это значит, что на 99% ваш шампунь состоит из воды. Масло виноградных косточек туда тоже попало, но в виде трех капель на мегатонную бочку. Если описание состава вашего любимого крема для рук начинается со слов «вазелин, парафин», то выбросьте его в форточку и купите банку вазелина. Скорее всего, кроме этих двух ингредиентов и пары отдушек, закодированных в латинские названия, там ничего нет. Да, кстати, как это ни прискорбно, бомбочки для ванн LUSH на 99,9% состоят из соды, поэтому их себестоимость — порядка 30 центов (при цене 300 рублей). Там есть еще пару капель эфирных масел и отдушки, но проще сделать такие бомбочки самим.
  1. Уважаемые родители, стиральные порошки «Аистенок» и «Ушастый нянь» сделаны в России (читайте второй пункт). «Ушастый нянь» сделан на фабрике «Невская косметика», что, вообще-то, уже лет 30 как не внушает доверия, «Аист» сделан на неизвестном российском производстве. По составу эти порошки ничем не отличаются от «взрослых порошков» — это все простой маркетинг. Покупайте для своих детей жидкие концентраты, сделанные в Европе.
  1. Любой стиральный порошок на 80% состоит из балласта, чтобы радовать покупателя большой коробкой. И, кстати, вот эти синенькие и красненькие точечки в стиральном порошке — тоже балласт, а вовсе не какие-то мифические активные вещества. Покупайте жидкие концентраты — это экономичнее, они не так вредны для природы как порошки, которые попадают в водоемы и рушат экосистему.
  1. Ополаскиватели для цветного и белого белья по химическому составу идентичны. Различаются только этикетками.
  1. Самый большой обман в том, что стиральные машинки ломаются от накипи и поэтому надо покупать Calgon. Не верьте! Машинки от этого не ломаются, а стиральный порошок Calgon ничем не отличается от других.
  1. Грустная новость для российских защитников животных: если на товаре написано, что он не тестировался на животных, это не значит, что в России не пострадал ни один кролик. Дело в том, что для выхода на российский рынок любой косметический продукт должен пройти миллионы СанПинов, которые были придуманы в 70-80х гг. в СССР, в том числе, пробы на животных. Их никто не отменял даже для Green Mama и Body Shop. Другое дело, что компания может не проводить эти тесты самостоятельно, а отдать свою тушь российскому подрядчику, который и будет закапывать эту тушь в глаза кролику, пока его сетчатка не покраснеет.

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

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

В домашнем интранете кто-то неправ!

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

— Марин, я уже кушать хочу! — Солнце,… я кушать хочу больше тебя, (с угрозой) ты хочешь со мной об этом поспорить?

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

Python 2.4 не освобождает память

Как я уже не раз говорил, libmapi нещадно течёт. Я сейчас работаю с версией из транка, 921-й комит, это довольно старая версия (текущий коммит — 1303), но утечки находят до сих пор и впереди их немало. Память течёт быстро и при получении больших объёмов данных утекает раньше, чем данные удаётся получить.

Поэтому я изолирую libmapi в отдельном процессе, получаю данные, пока могу и отдаю их «наверх» — родителю, потом делаю новый процесс и получаю следующую пачку. Для того, чтобы отдать данные родителю я использую os.pipe, а данные туда можно передавать только строкой. Так как данные у меня сложные, я их сериализую при помощи cPickle, а для сериализации нужна память.

Где взять память, если всё, что было доступно процессу, съела libmapi? Я пытался выделать память при помощи list(range(20 * 1024 * 1024)), а перед сериализацией удалять, но это не работало. Сегодня я узнал почему. Оказывается Python до версии 2.5 никогда не освобождает память. У меня как раз Python 2.4, приехали.

P.S. Чтобы предотвратить вопросы для чего я делаю list(range(…)), расскажу сразу: для совместимости с Python 3.0, на который мы все когда-нибудь перейдём. Там range возвращает итератор.

Добавлено позднее.

Я сейчас немного поисследовал, сделал замеры и выяснил, что если обращаться к аллокатору памяти Python напрямую (например, через ctypes), то память возвращается:

from ctypes import *

mem = pythonapi.PyMem_Malloc(c_size_t(100*1024*1024))

pythonapi.PyMem_Free(mem)

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

libmapi: насколько всё запущено

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

Однако к MAPI это отношения не имеет

Цитата из книги «Основы MAPI» Ирвинг де ла Круз, Лес Талер, вырванная из контекста.

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

Opera и document.all

«Опера» в одно время пыталась притворяться Internet Explorer’ом — копировала его user-agent, эмулировала его свойства и так далее. В частности, в «Опере» есть document.all, как часть поддержки так называемых «коллекций», которые были разработаны и использовались в стародавние времена. Один из популярнейших методов определить «а не IE ли это» заключался в проверке существования document.all, иногда — исключения «Оперы»:

var isIE = document.all && self.opera

Впрочем, на Западе «Опера» не популярна, поэтому «Оперу» не исключают и считают её разновидностью IE.

Так вот, в последние годы «Опера» пытается открестится от своего «иешного» прошлого, например, где-то по дороге с 8-й версии в 9-ю user-agent перестал притворяться Internet Explorer’ом. А вот в 9-й версии (в 10-ке это тоже так) изменения начались, на мой взгляд, какие-то довольно печальные: ломают логику языка JavaScript.

В новых «Операх» конструкция alert(document.all ? 1 : 0) выдаст «0», тогда как alert(document.all) — «[object HTMLCollection]». Сделано понятно для чего: обратная совместимость не ломается, но проверка «не IE ли» теперь уже выдаёт false.

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

Госпожа Бовари смотрела много голливудских фильмов

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

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

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

Так вот: не Голливуд виноват. Это всегда было. И Донцову не надо обвинять. В конце концов, не она же эти книги пишет, да и покупает у себя их не она.

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

Доступ по паролю

Большое заблуждение, считать, что http://user:password@example.org/ и http://example.org/user/password/ сильно различаются. Ничего подобного. Единственное различие между ними, что если набрать второй адрес руками, то он останется в истории браузера. Для AJAX’а более пригоден второй путь — «logout» делать сильно проще.

Необходимое замечание: речь, конечно же, идёт о basic-авторизации. Digest мало кто пробует (а три года назад оно сильно ещё глючило, наверное, сейчас получше должно быть), NTLM по-чёрному глючит в «Опере» (в чём я убедился, работая в «Яндексе»).

Итак http://example.org/jfdhfjhrtjktjkfhdjht/ это вполне себе парольный доступ.

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

Интранет-вики

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

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

Определение UTF-8 на чистом Perl

У нас сейчас смена админов: отдел переходит из ведомства одних админов к другим. Соотвественно, все задачи выполняются сильно медленее. Задача по установке модуля к Perl висит уже несколько дней. Вот и пришлось мне написать на чистом Perl функцию, определяющую UTF-8 это или нет.

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

sub detect_utf8($) {
    my $str = shift;
    my %exclude = map { $_ => undef } (0..191, 194..244);  # RFC 3629

    for (my $i = 0, $l, $len = length $str; $i < $len; $i++) {
        $code = ord substr($str, $i, 1);

        return 0 unless exists $exclude{$code};

        for ($l = 0; $code & 128; $l++, $code = 0xFF & ($code << 1)) {}

        $i += $l - 1 if $l;

        return 0 if $i > $len or $l > 4; # broken
    }

    1;
}

Что можно улучшить: проверять, чтобы дополнительные байты имели старшие биты «10».

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

Уточка №4

Уточка — грузинский космонавт (25.23КиБ)

Не могу не попе*арить прекрасный блог, который радует меня по утрам: «уточка №4». Особенно хороши картинки-загадки, типа этой, которую я утащил в свой блог.

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

I � Unicode

Давайте я вам про Unicode ещё раз расскажу?

Как известно, в памяти компьютера числа представлены битами, которые группируются в байты. Один байт может хранить одно из 256 значений (поскольку состоит из восьми бит, каждый из которых может хранить одно из двух). Следовательно, числа, значения которых > 255 хранятся в больше, чем одном байте.

Например, числа до 65535 можно уместить уже в двух байтах: в так называемом старшем записывается сколько раз полных 256 содержится в числе, а в младшем — остаток: старший × 256 + младший.

В зависимости от типа процессора, порядок, в котором записаны в памяти старшие и младшие байты, различается. Собственно, мне хорошо известны только две системы: младший записывается первым (как в процессорах Intel) и старший записывается первым (в процессорах ARM, которые стоят в смартфонах). Есть ещё смешанная, но с ней я не сталкивался. Системы эти носят имена: little-endian и big-endian (системы со смешанным порядком называются middle-endian и термин не указывает на то как именно «мешается» этот порядок). Краткая запись названий — LE и BE.

Есть ещё системы, которые умеют переключать порядок (те же ARM) и называются bi-endian.

Термины little-endian и big-endian пришли к нам из «Приключений Гулливера» и на русский переводятся как «тупоконечный» и «остроконечный». Те, кто читали, те помнят (война по поводу того с какой стороны разбивать яйца). Информатика тут какбэ намекает. Хотя у каждой системы есть свои достоинства и (не удержался) мне ближе LE.

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

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

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

Система кодирования Unicode, где выделяются два байта, называется UTF-16 (16 бит на символ), там где четыре байта — UTF-32 (32 бита). Название UCS-4 (четыре байта) является синонимом UTF-32, а UCS-2 (два байта) подмножеством UTF-16. UCS-2 отличается от UTF-16 отсутствием так называемых «суррогатных пар» (которые появились только в Unicode 2.0, вы не хотите знать что это) и является устаревшим стандартом, можете про него забыть.

Так как способов хранения чисел, не умещающихся в памяти у нас несколько, то системы подразделяются на UTF-16BE, UTF-16LE, UTF-32BE и UTF-32LE. Отсюда видно, что UCS-4LE это тоже, что и UTF-32LE. Если порядок байт не указан, то принято считать, что используется big-endian.

Первого апреля 2005-го года были предложены шуточные «стандарты» UTF-9 и UTF-18, отношения к рассматриваемой проблеме они имеют. Для телеграфа и прочего слоновьего гуано, разрабатывались UTF-5 и UTF-6, но о их судьбе мне ничего не известно. Так же есть UTF-7, который в стандарт не вошёл, но реально применяется (в модифицированном виде) внутри почтового протокола IMAP4, про него я рассказывать не буду, мне он стал известен из-за оригинального способа его использования для XSS-атак в IE (в частности, решением этой проблемы я занимался в PEAR PHP классе HTML_Safe). Можно упомянуть ещё UTF-1, но с ней я не сталкивался в работе.

BOM. BOM расшифровывается как «byte order mark» (признак порядка байт) и ставится внутри файлов упомянутых двух- и четырёхбайтных кодировок. Если BOM внутри файла не встретился, принимается порядок big-endian. У BOM есть значание. В UCS-2 это 65279 (для программистов — FEFF), для UCS-4/UTF-32 — это 4278124544 (FEFF0000). Число выбрано так, чтобы старшие и младшие байты у них не совпадали и по их порядку можно было бы определить какой порядок байт используется. К сожалению, BOM не даёт возможности определить использутеся двух- или четырёхбайтная кодировка.

Теперь непрограммистам будет трудно.

Пока всё было достаточно просто, но человечество придумало ещё одну кодировку — UTF-8, с плавающим размером. Хорошие новости заключаются в том, что порядок следования байт тут определён и никаких LE и BE рядом с UTF-8 не ставится. Соотвественно и BOM тут не нужен. Он может использоваться только для того, чтобы указать программе, что это именно UTF-8 и имеет номер 15711167 (EF BB BF). Откуда можно сделать вывод (дорогие писатели редакторов), что использование в UTF-8 BOM от UTF-16 — ошибка.

Трудность в том, что UTF-8, по сути это ещё один способ записи многобайтовых чисел (а каждая буква в стандарте Unicode — многобайтовое число). У системы есть целых два плюса (ирония!): старая однобайтовая кодировка совместима с UTF-8, а значит буржуинам не нужно переделывать свои программы, если они не используют в них буквы и других языков (например, на любом старом англоязычном сайте как бы уже используется кодировка UTF-8), второй плюс — латиница записывается компактнее (в один символ). Минусы — чисто программисткие: работа с кодировкой требует больше ресурсов из-за плавающего размера.

Итак. Каждый символ в кодировке занимает от 1 до 4-х байт. Вообще, формат устроен так, что можно было бы взять и более длинные цепочки, но в Unicode нет столько символов, чтобы записывать их более длинными последовательностями.

Тут надо вспомнить что такое биты. Бит — единица информации, мельче не бывает, у него всего два значения — 0 или 1. Байт состоит из 8 битов, биты очень удобно записывать в позиционной двоичной системе: 00001011. «Позиционная» тут означает, что значение числа зависит от его позиции. Кстати, это привычная нам система. В числе «22» две двойки, но у первой значение в десять раз больше, чем у второй. Это десятичная позиционная система. В двоичной, каждая более левая однёрка будет больше в два раза своей соседки.

Таким образом число 1011 расшифровывается из двоичной как 1 × 23 + 0 × 22 + 1 × 21 + 1 × 20 = 1 × 8 + 1 × 2 + 1 × 1 = 8 + 2 + 1 = 11 в десятичной системе.

UTF-8 устроен следующим образом. Пусть, мы двигаемся по строке, содержащей два байта: 208 и 159. В битах это 11010000 и 10011111. (Немного осталось, потерпите).

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

У нас в примере количество бит до первого нуля — два. Значит, буква записана двумя символами — первый это тот, на которым мы находимся и второй — который следует за ним. Каждый байт в UTF-8 разбит на две части — до первого нулевого бита. Первая часть — общая длина байт последовательности, а оставшаяся — значение. Биты из значения записывают последовательно (у нас это 10000 011111) и смотрят какое число получилось (у нас это — 1055, это номер буквы «П» в Unicode).

Могу рассказать про UTF-7 и UTF-1, если интересно. Или про суррогатные пары.

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

Знаете ли вы JavaScript

У Дмитрия Барановского (это автор Raphaël — JavaScript-библиотеки для построения диаграмм) в бложике нашёл чудесный тест на знание JavaScript, привожу его здесь полностью. Попробуйте, я прошёл его довольно посредственно.

Итак, что выведет каждый кусок кода?

if (!("a" in window)) {
    var a = 1;
}
alert(a);
var b = function a(x) {
    x && a(--x);
};
alert(a);
function a(x) {
    return x * 2;
}
var a;
alert(a);
function b(x, y, a) {
    arguments[2] = 10;
    alert(a);
}
b(1, 2, 3);
function a() {
    alert(this);
}
a.call(null);

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

Девид Блейн, раскукож мой Samsung

Samsung выпустили забавный рекламный ролик обращающий внимание на HD-камеру, встроенную в новый телефон этой фирмы (модель HD i8910).

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

На «Хабре» довольно быстро заподозрили, зеркала никакого нет и в нём стоит просто брат-близнец. Именно поэтому столько слов «HD-camera» и разговоров про детали в ролике — предлагается обращать внимание на мелочи, различающиеся в «зеркале» и в комнате. Я, например, заметил, что зонтик за «зеркалом» не так стоит.

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

Фокус с телефоном Samsung (43.98КиБ)

Дополнение от 16 апреля 2009 13:22: мне в комментариях подсказывают, что необходимости в брате-близнице нет, достаточно одеть второго человека в ту же одежду. Действительно — когда снимающий отражается в чайнике, он старательно прикрывает лицо камерой.

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

Повторенье — мать ученья

Простите, наболело. Многие товарищи как-то вольно трактуют поговорку «повторенье — мать ученья». Как будто любое повторение чему-то учит. Ну вот вам повторение:

while True: pass

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

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

Поколение твиттера

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

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

Я легко могу понять почему так популярны блоги: для сознания клипового типа так проще. Почему стал популярен твиттер, я уже тоже начинаю понимать. Рождается новое сознание «стриповое», для которого текст на два абзаца сложен.

Это значит, что поток информации ещё более увеличился за последние годы и люди не успевают её перерабатывать. Наверное, немаловажна и обратная сторона — авторская. В «микроблог» можно писать быстрее, более сыро, на ходу и чаще. Но эту сторону я рассматривать не хочу, не интересно. Хотя, именно этим мне «Твиттер» не нравится — негде развернуться, да и туземная краткость талантом блещет редко.

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

Если вас утомил предыдущий абзац, у вас «стриповое» сознание.

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

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

«Спасибо за покупку»

Мир перевернулся. Меня родители воспитали в том духе, что это продавец должен говорить «спасибо», что я у него купил товар, а я ему должен ответить «пожалуйста». Косвенно эту точку зрения подтверждают чеки, на которых до сих пор пишут «СПАСИБО!» или «СПАСИБО ЗА ПОКУПКУ!».

Спасибо! (21.15КиБ)

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

P.S. Кто-нибудь мне объяснить тягу анекдотичных блондинок и маркетологов к верхнему регистру?

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

Определить начало дня в Python

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

import datetime

currentdate = datetime.datetime.today()
print currentdate.replace(hour=0, minute=0, second=0, microsecond=0)
import datetime

currentdate = datetime.datetime.today()
print currentdate.combine(currentdate.date(), currentdate.min.time())

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

Обезболивающее и жаропонижающее

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

У меня температура около 37,5°, то есть сбивать её не нужно и даже вредно, голова болит со вчерашнего вечера и хочется уже облегчения.

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

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

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

Кстати, интересно, что «температура тела» — условность. Когда градусник под мышкой показывает 36,6°, в вашей печени температура может достигать 38°, а кончики ног могут быть охлаждены до 24,4°. Если вы пробежались, мышцы могут поднять температуру на 5—7°.

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

Дополнение от 18 апреля 2009 23:41: мне в комментариях подсказывают, что все доступные обезболивающие обладают жаропонижающим эффектом.

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

Сборки FAR 2.0 alpha

Читатели подсказали (потерял уже кто и где), что на googlecode выкладываются свежие сборки FAR 2.0 alpha. Судя по тому, что выкладываются не каждый день, человек проверяет их на стабильность. Я пользуюсь уже несколько недель, полёт нормальный.

Кстати, блогер Iceman делает собственные сборки FAR 2.0, причём аж двумя компиляторами — gcc и VC9. Пеарю.

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

Torrents & Rapidshare

«Торрент» (точнее — BitTorrent), это сеть для обмена файлами между пользователями сети через интернет, «Рапидшара» или «Рапида» (Rapidshare) — классический хостинг файлов большого размера.

Я попробовал то и другое и хочу сказать, что пользоваться «Рапидшарой» мне понравилось больше. Достоинства и недостатки каждого способа скачивания файлов я написал ниже.

Rapidshare

Минусы: чтобы пользоваться без ограничений, нужно заплатить (от €1,50 до 15 центов в день, в зависимости от срока подписки); скорость скачивания может оказаться меньше возможностей вашего канала; для скачивания желательно пользоваться специальными программами, так как файл бывает разбит на 10—15 кусков.

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

BitTorrent

Минусы: нет какого-либо единого, удобного поиска; скорость скачивания сильно зависит от множества факторов, на которые вы не можете повлиять (один файл у меня качался 4 недели); может случиться так, что вы не докачаете свой 30 гигабайтный архив на 99% из-за того, что все раздающие его у себя стёрли; файл лучше не удалять после скачивания, так как теперь его будут скачивать и у вас тоже, как следствие — забит обратный канал. Для скачивания необходима специальная программа. Ещё минус — новичку сложно разобраться.

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

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

«Книга постоянств» Императора Пхп

Около года не читаю жежешный ru_php, а он всё не меняется, оказывается:

Вырисовалась проблема — при var_dump ($класс), var_dump, как последний предатель, выдает все private переменные класса… — так должно быть или это глюк? Не хотелось бы при гипотетической краже скрипта, обработанного Zend Encode что бы отвардампили все пароли и ключи оплат.

Я подумываю о том, чтобы добавить это сообщество в свой RSS-ридер, чтобы с утра поднимать себе настроение.

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

Почему разработчики браузеров не внедряют CSS3?

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

Чтобы чётко понимать чем стандарт отличается от черновика, прочитайте черновик CSS 3, а особенно места, помеченные красным. Фразы там звучат примерно такие:

— А может назовём свойство blah-blah иначе? Например foo-foo! — А давайте возьмём свойства a, b и с и… объединим их в одно с именем abc? — …и так далее.

И что в итоге? Каким образом производителям браузеров внедрять свойства, которые ещё до конца не описаны? Нет, конечно есть модули, которые близки к статусу рекомендаций, но над большинством вещей ещё думать и думать. В частности, на мой вопрос про border-radius, разработчики Opera ответили, что оно уже реализовано в экспериментальных билдах, но вокруг него крутится столько нюансов, а Mozilla делает так, а Webkit иначе… как же поступать Opera? Вот и тормозит внедрение новых классных фич…

Поэтом заявление MS о том, что, мол, мы не поддерживаем CSS 3, пока черновик не превратится в финальную спецификацию, звучат вполне резонно. Как бы это ни было грустно.

В общем, меньше фанатизма и больше читайте спецификации ;)

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

Валюты разных стран

Валюты разных стран (60.29КиБ)

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

Слева направо: интренет, Белоруссия, Мальдивы, Украина, Китай.

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

PDF417

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

Оказывается, это PDF417:

Двумерный штрих-код переменной длины для кодирования буквенно-числовых данных. PDF417 очень похож на DataMatrix и предоставляет немного больше возможностей, требуя, соответственно, больше места. Используется для общего применения, включая ярлыки на багаже, маркировку различных частей и на удостоверениях личности

Есть специальное SDK для распознавания и онлайн-сервис для кодирования и декодирования.

Вот как выглядит PDF417 с фразой «This is PDF417 sample for bolknote.ru»:

PDF417 (0.50КиБ)

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

В социальных сетях черствеют

Учёные Университета Южной Каролины предупреждают: если плотность потока информации, поступающей через СМИ и интернет, останется прежней, человек перестанет различать категории добра и зла.

Проведенный ими тест мозговой активности показал, что реакция при виде физической боли наступает почти мгновенно, а вот сопереживание моральному страданию запаздывает на 6—8 секунд. «Если при этом мы продолжаем получать поток все новой и новой информации, эти чувства могут не возникнуть, что обязательно скажется на моральном облике человека», — считают ученые.

Их коллеги из Университета Огайо винят во всем Twitter и другие социальные сети со стремительным потоком сообщений длиной 140 символов: беглый взгляд на них не позволяет сформировать мнение и дать оценку. Кстати, об оценках: по статистике средние баллы студентов, пользующихся Facebook, ниже, чем у их сверстников.

Пишет газета «F5» (№9 за апрель 2009). Говорил я, что «Твиттер» — это плохо! А бесчеловечный PDF, в котором газету «F5» предлагается просматривать — это вообще вселенское зло.

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

Каждый день по фильму

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

  • «Дедовщина в школе» — фильм Первого канала с говорящим названием. Кажется, стоит посмотреть. В моей школе всё обстояло так же.
  • «Люди Икс. Начало: Росомаха» — история Росомахи с самного начала. Фильм ужаснейший.
  • «Девственность» — российский фильм о том как девочки пытаются «завоевать» Москву, есть сюжет про Карину Барби
  • «Типа крутой охранник» — комедия о парне, который Делает Свою Работу. Я не оценил.
  • «Адреналин-2» — ооооооооооаааааааоаоаоаоаоаоаоаооооооооо!!!!
  • «Только секс» — история о том как две девушки решили встречаться с парнями только для секса и как это переросло в любовь
    Дальше не помню. Естественно, я совершенно не помню смотрел я какой-то фильм или нет только по названию (имён режисёров и актёров я не запоминаю, мне есть чем забивать голову кроме этого).

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

Спектруму 27 лет!

«Спектрум» был вторым компьютером в моей жизни (первым был «Радио РК-86»), но первым и единственным, который я знал от и до — полностью всю программную и аппаратную часть. Сегодня компьютерам этой серии исполняется 27 лет.

Всё утро ностальгируя, я нашёл на одном сайте все (!) выпуски «ZX Форум» и «ZX Ревю» и в первом же номере «ZX Форума» наткнулся на свою фамилию:

Но  особенно приятны нам письма, в  которых читатели делятся своими несколькими первыми (но, конечно  же, не  последними) POKES, найденными самостоятельно после того, как они начали активно изучать машинный код. Большинство из них пишут, что им очень помогли в работе наши книги по  программированию в  машинных кодах. Это Селифонтов Михаил из  г. Углич Ярославской обл., Степанищев Е.В. из  Лениногорска […]

Правда, я писал, кажется, в «ZX Ревю», а не «ZX Форум» и, к тому же, писал вместе с братишкой. Надо будет пошарить по архиву 94-го года, попробовать найти что мы там отсылали. Кажется, чинили игры, которые не шли на нашем с ним клоне «Спектрума».

Добавлено 23.04.2009 11:27: вот ещё:

ИФК: Степанищев Е.В. из г. Лениногорска (Татарстан) пишет: КОРР: Недавно обнаружил неприятную особенность MONS-3: попробуйте выполнить в пошаговом режиме команду HALT — и он зависнет.

MONS-3 — это был такой ассемблерный отладчик для «Спектрума».

Добавлено 23.04.2009 11:32: И ещё:

А пока приводим информацию Степанищева Е.В. из Лениногорска (Татарстан) — результаты «лечения» игр, не идущих на «Компаньоне» всё по той же причине — неправильная обработка прерываний второго рода. […]

«Компаньон» — это как раз тот клон «Спектрума», который был у нас с братишкой.

Добавлено 23.04.2009 13:13: Из «ZX Ревю» №3 за 1995 год:

Таинственный любитель адвентюр и творчества Булгакова, проживающий в Воркуте, и подписавший свое письмо так: «FLAT 50, MESSIR», отвечает на ряд вопросов из  «Перекрестка». В частности, Степанищеву Е.В. из Лениногорска: В ADVENTURELAND, чтобы избежать проблем с  медведем, надо дать команду HOLLO (кричать).

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

Соединённые Штаты Веспуччии

Новые страны и континенты не разу не называли в чью-либо честь по имени, а только по фамилии!

А Америка названа в честь зажиточного купца из Бристоля — Ричарда Америка! Р.Америк финансировал 2-ю экспедицию Джона Кабота, который в мае 1497-го на корабле «Мэтью» достиг берегов Лабрадора, став первым европейцем вступившем на американскую землю — на 2 года раньше Веспуччи. Он первый и составил карту побережья Сев, Америки (в которой кстати Веспуччи вааще не бывал, токо в Южной..) Так и возникла запись в честь главного спонсора экспедиции: «…в день св. Иоанна Крестителя (24 июня 1497г.) найдена земля Америка купцами из Бристоля…»

В школе нам врали!

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

Кроссплатформенная среда: ZX Spectrum

Прочитав в «Википедии», что ZX Spectrum — самая эмулируемая платформа, я подумал — а есть ли эмулятор на JavaScript? Скорости должно уже хватать (там процессор Zilog Z80, 3,5 МГц и видеопамять несколько килобайт). Оказывается, есть, называется JSSpeccy. Можно посмотреть online и даже запустить 10 игр.

«Яве» и прочим кроссплатформенным языкам такая переносимость и не снилась.

Everyones a Wally (11.38КиБ)

Кстати, очень хорошая возможность потестировать браузеры на производительность (там 644 килобайта ядрённого JS-кода). Лучше всех себя показал Safari4 beta 528.16, похуже — Opera 10 alpha 1413, ещё хуже — FireFox 3.0.9, совсем плохо — Google Chrome 1.0.154.53. Под Internet Explorer эмулятор не пошёл (JSSpeccy заточен под Canvas). К сожалению, последней беты FireFox 3.5 у меня нет, но можете попробовать сами потестировать.

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

ZX Recoloring

К дню рождения «Спектрума» на «Хабре» был анонсирован интересный проект — ZX Recoloring. Идея простая до зевоты: эмуляторы «Спектрума» существуют для чего угодно, кроме, разве что, кофеварок, игр для «Спектрума» — вагон, есть просто шедевры, но нюанс: графика, по нынешним временам, просто ужасная.

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

Идея неплохая, но в таком виде годится только для совсем простых игр. Даже если взглянуть на скриншот игры «Everyones a Wally» из моего предыдущего поста, сразу станет видно, что спрайты там пересекаются: справа скамейка перекрывает дерево, а скамейку закрывает фуксиновый мужик.

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

Snoopy (5.46КиБ)

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

Хотя, в эту игру я и сейчас, не морщась, могу сыграть.

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

«Надо уколоть палец, чтобы кровь перестала идти»

Стоит с московскими курильщиками заговорить о курении, как попадаешь в «Зазеркалье». Помните?

— Ах, нет, я никуда не хочу попасть! — сказала Алиса.  — Мне и  здесь хорошо. Очень хорошо! Только ужасно жарко и пить хочется!

— Этому горю помочь нетрудно, — сказала Королева и вынула из  кармана небольшую коробку. — Хочешь сухарик?

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

— Я совершенно не порчу лёгкие — говорят московские курильщики — в Москве и так воздух плохой.

Надо будет спросить едят ли они сухарики, когда хочется пить.

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

У создателя сети «ФИДО» не было собаки

Известно лишь, что один из потомков по кличке Fido попал к Тому Дженнингсу, основавшему впоследствии одноименную сеть FIDO, ставшую прообразом интернета.

Пишет Леонид Каганов в своей статье «Космонавтика родилась в собачей конуре», тогда как у Тома не было никакой собаки:

Сегодня в соседней деревушке (Mountain View, CA) в компьютерном музее выступал основатель фидонет. Рассказывал полтора часа как все создавалось (кстати, вопреки красивой легенде о собаке Fido он сказал что название для новой сети он позаимствовал с визитки какой-то компьютерной конторы).

Добавлено 27 апреля 2009 9:47: вот чем опасно читать только начало и только конец статьи, я правда подумал, что статья Леонида о каких-то исследованиях. Когда ж возьму себе за правило либо читать статью целиком, либо не читать её вовсе?

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

«XHTML», что значит «Хороший HTML»

Обсуждаем с Вегедом как прикручивать корпоративные XSLT-шаблоны к Django:

— Пусть у тебя на входе плохой HTML — говорид Вегед и пишет, вероятно по привычке, «XHTML»
— «Х» от слова э… «плохой»? — интересуюсь я.

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

Блог Виктории Григорьевны

Наткнулся на «Хабре» на блог Виктории Григорьевны. Не напрягайте память, это не очередная лобковая звезда, меня блог заинтересовал тем, что женщине 71 год и она ведёт блог в интернете. Посмотрите, кстати, на средний размер поста — куда больше 1—2 абзацев (намёк понятен да?).

Внуки, если вы будете это читать, то это у вас там, в будущем, пруд пруди дедушек и бабушек с бложиками, а у нас тут это явление удивительное.

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

Canvas в разных браузерах

Сегодня с утра, порадовавшись выходу Mozilla Firefox 3.5beta4, решил погонять её на JS-эмуляторе «Спектрума», о котором я упоминал. По скорости выходит где-то на уровне или впереди Safari4beta.

Canvas (3.77КиБ)

Плохо то, что Firefox, как оказывается, сильно размывает Canvas. Когда я играл на эмуляторе в одну из игр, мне казалось, что у меня что-то со зрением — до того размытая картинка. На скриншоте видно (слева направо): Opera 10 alpha 1456, Safari 3.2.2, Firefox 3.5beta4.

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

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

Проект засекречен, учёные могли и не знать

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

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

На каком же расстоянии от приёмника пела Пугачёва?

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

Puzzle

Собери две машины (32.37КиБ)

Сфотографировал около офиса.

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

libmapi: почему так долго?

Вчера один из моих читателей вскользь поинтересовался — неужели с libmapi так сложно работать.

Для примера, чтение данных переговорок (включая рекуррентные встречи), занимает сейчас у меня в «Пайтоне»: 1275 строк основного файла модуля, 647 строк файла описаний структур MAPI, 4046 строк констант MAPI, плюс 457 строк файла данных для Pid-свойств.

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

Лечу в Казань

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

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

Первый телеэфир моей жены

Женщина в сером худи сидит за столом с канцелярскими принадлежностями, работает с бумагами на фоне панорамных фотографий городских пейзажей и архитектуры.
Моя жена в телевизоре

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

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

Добавлено 30.04.2009 9:49: видео выложил к себе на «Яндекс.Видео».

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

← сюда туда →