«Одноклассники»
Сайт «Одноклассники» сменил дизайн и теперь явно рекламирует браузер Google Chrome, так как это единственный браузер, под котором эта роскошь не тормозит. Так как Chrome мне не нравится, то я выплесну его вместе с новым ребёнком Попковых.
JavaScript split
Азат Разетдинов подкинул хорошую ссылку на сайте XRegExp по поводу особенностей реализации метода split
HTML5: события offline и online
На сайте JavaScript.ru появилась статья о новых событиях в JavaScript — offline и online (реализованы в Firefox 3.5 и Internet Explorer 8.0). Цитирую выводы:
Эти события никак не связаны с подключением к сети интернет и к сайту.
Они триггерятся при переходе по клику пользователя в автономный режим и обратно.
Они также триггерятся, когда отключаются все сетевые адаптеры, или подключается хотя бы один. При этом не важно, ведет ли он в реальный интернет.
Firefox глючит, в отличие от IE
Штанга: 95,5кг
Обычно я не беру новые веса в понедельник, но тут
GIF plain text extension
В формате GIF89 есть забавное поле — «plain text extension», заброшенное и никем не используемое. Настолько заброшенное, что для него делали специальное соответствующее поле в формате PNG, для совместимости, но потом объявили его «deprecated».
Как будет в точности выглядеть GIF с этим полем мне неизвестно, думаю, зависит от программы. По идее, оно должно выводить моноширинный семибитный (никакого Unicode) текст.
Насилу нашёл редактор, который умеет создавать GIF с таким полем, но, увы, ни один из браузеров не умеет правильно показывать содержимое такого GIF. Некоторые браузеры не умеют показывать его даже неправильно — выводят пиктограмму ошибочно загруженной картинки (например, IE, Opera 8.xx/9.xx, Safari и другие).
Понятно, что extension совершенно бесполезный,
P.S. Для тестирования браузеров я использовал сервис BrowserShots.
Добавлено 6 октября 2009 14:40: почти все браузеры показывают изображение в котором есть ещё хоть
Книга: всё идёт по плану
Вчера мы с Глебом внесли последние авторские правки в свои главы, дописали последние куски, а Коля скомпилировал это в книгу версии 1.1. Далее уже будут редакторские правки. Поскольку многие задают одни и те же вопросы, то выкладываю небольшое FAQ по теме:
В: Какой будет тираж книги? О: Пока точно не известно, порядка 2000—3000 экземпляров.
В: Какое издательство выпускает книгу? О: «Открытые системы» (aka «Интуит»)
B: Когда она выйдет? О: В декабре этого года появится электронная версия книги, в феврале следующего книга будет продаваться. Текущую версию можно скачать уже сейчас.
B: Каков объём книги? О: Почти 500 тысяч знаков (вместе с пробелами), это примерно 12,5 авторских листов.
B: Сколько авторов? О: Трое: Мациевский Николай, я (Евгений Степанищев) и Глеб Кондратенко.
В: А сколько ты написал? О: По объёму знаков — чуть больше четверти книги, по количеству страниц — около 30%.
И снова Москва ✈ Казань
С ночи
Волосы и ногти
Читаю «Книгу всеобщих заблуждений» Стивена Фрая.
Данным заблуждением человечество во многом обязано Эриху Марии Ремарку и его классическому роману «На Западном фронте без перемен»
Может быть человечество евросоюза и обязано этим заблуждением роману 1929 года, но я сразу вспоминаю горячо любимого в детстве Гоголя и его «Вечера на хутор близ Диканьки»:
Казалось, одни только кости поднялись высоко над землею. Борода по самые пяты; пальцы с длинными когтями вонзились в землю. Страшно протянул он руки вверх, как будто хотел достать месяца, и закричал так, как будто
кто-нибудь стал пилить его желтые кости…
В детстве я сильно увлекался чтением сказок и былин, тема мертвецов с длинными ногтями и волосами там, что называется, «раскрыта». В общем, в России дело скорее в местной литературе и семейных верованиях, чем романе известного немецкого писателя.
P.S. Если прояндексировать интернет, то можно обнаружить, например, что Аристотель искренне считал, что волосы и ногти у мёртвых
Cherchez la femme
Но сначала Ленин попытался проявить самостоятельность. Ему нравилась красивая девушка из Казани Елена Ленин. Она обещала поехать с ним в ссылку, в Сибирь, но обещания своего не сдержала. Но память о ней он оставил для себе на всю жизнь: взял её фамилию в качестве главного партийного псевдонима — Ленин.
К. и Т. Енко «Частная жизнь вождей — Ленин, Сталин, Троцкий».
Какая новая (для меня) точка зрения на псевдоним Ульянова! Высказала её, оказывается, писательница Лариса Васильева, которая долгое время занималась «кремлёвскими раскопками». До этого момента я знал только две версии. Первую, про реку Лену, рассказала мне и всему классу в детстве учительница русского языка и литературы, вторую, про паспорт Николая Ленина я прочитал много позднее в «Википедии».
Последнее фото Ленина

В корейской «Википедии» нашёл последнее фото Ленина (сделано в 1924 году).
Б if В else А
Я удивляюсь.
Есть ситуация «А», которая перешла в «Б». Я считал (и продолжаю надеяться), что это произошло по субъективной причине «В», но есть причина «Г», которая гарантированно переводит «А» в «Б». Пишу пост в блоге: «А» перешла в «Б», потому что «В». Получаю комментарии, что есть «Г» и комментарий от человека, что «В» невозможна, потому что в его опыте «А» в «Б» не перешла. Рассказываю тому про «Г», тот отвечает «ну вот, я же говорил что это
Не понимаю. Получается что? Приведённый опыт — неправда? А зачем его было приводить? Цель?
Штанга: 98 кг
Ура! Взял 98 кг четыре раза (какими усилиями я выжал четвёртый, знаю только я). Свой вес колеблется в пределах 70,8—71,2 кг.
P.S. Тем кто беспокоится, что свой вес у меня не растёт, но растёт поднимаемый, напишу, что мне рассказали знающие люди: хорошим результатом считается поднимать 1,5 своего веса. Я поднимаю сейчас 1,38.
Repcached — memcached с репликацией
Понадобилось реплицировать memcached, балансер ставить — слишком дорого для нашей задачи, в поиске нашёлся repcached, будем пробовать. Это патч для memcached 1.2.x. Асинхронная репликация multi master.
Инч
Я тут слегка приболел и лежал вчера вечером в кровати, так как глаза требовали немедленно погасить свет, а душа —
Что я хочу сказать. Уважаемые переводчики, пожалуйста, переводите все эту фунты, пинты, дюймы, футы и прочие мили в привычные нам единицы. Я не в состоянии сообразить насколько высок человек, если он ростом
Сколько клавиш одновременно можно нажать на вашей клавиатуре?
На «Хабре» довольно унылая история вылилась в интересное обсуждение устройства клавиатур, например, интересное:
Скорее всего, это действительно был не брак данной клавиатуры, а её нормальное (т. е. соответствующее её исполнению) поведение.
Дело в том, что есть такое понятие — «rollover» (Keyboard (Control processor), Rollover) — возможность клавиатуры обрабатывать одновременное нажатие нескольких клавиш. Стандартом
де-факто является отработка нажатия минимум 3 клавиш сразу. Однако на практике — 3 клавиш не любых, так как есть ещё такая проблема как «фантомное нажатие», когда к трём нажатым приплетается приблуда. Поэтому у дешёвой клавиатуры обработка некоторых троеклавиший может быть не предусмотрена либо умышленно (чтобы исключить нежелательные фантомные срабатывания), либо элементарноиз-за отсутствия возможности обеспечить поддержку такой функции при данной используемой технологии.Проблема заключается в том, что в случае отсутствия «навороченного»
n-rollover’а, производители не предоставляют дополнительных сведений, выполняя при разработке клавиатуры минимальные требования (производителя ОС, например).Забавная история — один в один как у ТС, только с клавиатурой от Logitech — описана вот здесь (англ.): http://www.tomshardware.co.uk/forum/page-50454_10_0.html, с подробными объяснениями (в т.ч. и от сотрудника Logitech).
У меня на домашнем ноуте (Fujitsu Lifebook N6420) можно зажать только две буквенные клавиши, на третью реакции уже нет, но если жать строго через одну, то предела я не обнаружил (пальцы кончились). На внешней Samsung Pleomax срабатывают четыре клавиши подряд.
Уязвимость WackoWiki
На прошлой неделе нашёл
iPhone: USB Drive

Как известно пользователям iPhone, у этого телефона есть раздражающая особенность: он не умеет работать как флешка. Было бы очень удобно, чтобы его файловая система была видна как обычный диск при подключении к компьютеру. Это пока дело будущего, сейчас существует такое решение: часть памяти iPhone можно уже сейчас использовать как флешку.
Вам понадобится джейлбрейкнутый (jailbreak) телефон и программа USB Drive (доступна
Режимы работы программы: «Drive+iTunes» (подключается как диск, но распознаётся iTunes, режим пока глючит в Windows, не работает PTP), «Drive Only» (работает как флешка) и «Default» (работает как обычный iPhone).
Диски создаются по пути /var/Volumes и не удаляются после деинсталляции (нужно, либо удалить их до деисталляции, либо удалить их потом вручную). Файловая система — FAT.
В будущем программа будет платной. Срок действия этой беты истекает первого ноября.
О велосипедах
Замечаю, что многие люди не знают истинного значения иносказательной фразы «изобретать велосипед». Им, похоже, кажется, что это общий отрицательный эпитет, которым можно наградить что угодно в качестве готового ярлыка для высмеивания.
Хочу заметить, что запросы, в данном случае, могут быть весьма разнообразными: простота использования, быстродействие, удобное API, наличие документации, лицензия, русификация, платформа, на которой работает продукт и так далее.
Наверное, тонкой гранью в «изобретениях велосипеда» является решение нужно ли дорабатывать существующий продукт или написать новый. Я тут пользуюсь очень простым правилом: если доработка существующего сложнее, чем написание нового, то я напишу новый. «Сложнее» тут так же следует понимать крайне широко, как трату любых ресурсов.
Opera 10.x и border-radius
Вадим Макеев упомянул в «Ярушке» интересное о новых версиях «Оперы»:
Opera будет поддерживать
border-radius уже в 10.x версии, очень вероятно, чтогде-то в начале будущего года (…)Я уже давно тестирую версию, которая работает
с border-radius, border-image, box-shadow, transform… и ещё десятком вещей из черновика CSS 3, что интересно — без префиксов. Это всё будет в движке Presto 2.4, который сейчас встроен во внутренние беты с индексом 10.x.Ничего прямо вот так обещать не могу, но некоторую вероятность высказал выше, имея в виду финальные стабильные версии.
На эту тему я уже, кстати, давал цитату.
Лепражепка

Купил себе серебряный лепрозначок. Выглядит отлично.
99 бутылок: PowerShell
45. Windows Powershell.
Язык просто изучается, имеет понятную структуру и широкие возможности. Я посмотрел первую версию языка, но уже доступна вторая версия оболочки.
Программа, выводящая песню о пиве (beer.ps1)
# Написал Евгений Степанищев aka BOLK
function bottles([int]$beer) {
switch ($beer) {
0 { "no bottles" }
1 { "1 bottle" }
default { "$beer bottles" }
}
}
99..1 | ForEach-Object {
$bottles = (bottles $_) + ' of beer'
$bottles + ' on the wall, ' + $bottles + '.'
'Take one down and pass it around, ' + (bottles($_-1)) + " of beer on the wall.`n"
}
'No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.'Микрософт отпущения
Из комментариев на «Хабре»:
— Ждём клон от MS и стопицот «убийц
магия-мышки» ))— MS еще месяц назад представила свои прототипы мышек которые будут выпущены с win7, включая мышь с сенсорной поверхностью и поддержкой мультитатчев.
— Вот пока майкрософт лепит сотый по счёту прототип, и размышляет, когда такое надо выпустить, эппл уже выпускает решение на рынок.
Странно, но как не поверни, но всё виноват Microsoft. Apple выпустила? Значит плохой Microsoft сделает клон. А, Microsoft ещё раньше сделал прототип? Тогда плохой Microsoft плохой, потому что не выпустил мышь раньше.
Windows Powershell
Вчера ночью смотрел на Windows Powershell. Красивый, мощный, удобный язык командной строки («песню о пиве» я уже написал). Очень понравился, изучается очень быстро, позволяет многое. Основная идея — конвееры, по которым ходят не строки (как в Linux/Unix), а объекты. То есть вы можете получить список процессов, отфильтровать их не как текстовые строки, а как набор объектов — по свойствам, дальше, ну, к пример, отсортировать
Очень хорошо называются командлеты, например,
Язык слаботипизированный, но можно и жёстко задавать тип (например, в параметрах функций), если хочется.
Кардинально решена проблема с безопасностью (язык мощный, сразу спровоцирует написание вирусов) — файлы этого языка (расширение — .ps1) не запускаются, а открываются в блокноте. Запуск команд возможен или из оболочки руками или довольно нетривиальными способами (простой юзер не справится).
Устал
На этой неделе новый вес брать не буду: всю первую половину проболел, вторую — не высыпаюсь, сегодня, как варёный. Куда уж там брать новый вес. Ещё работа вымотала, вроде ничего особенного, но бьюсь третью неделю над той же задачей: как не меняя код (только шаблоны) сделать ЧПУ в Testlink. Приходится много пробовать и откатываться назад, такое всегда выматывает. Ничего, победа будет за мной.
Сжатие исходящего трафика в браузере
Артель BrowserPlus выпустила плагин к браузеру («Опера», как обычно, не поддерживается, Linux — тоже), который позволяет использовать в браузере TAR и алгоритм сжатия LZMA.
TAR позволяет собрать несколько файлов в один, LZMA — упаковать их. Таким образом, файлы (или другие данные) на сервер можно отсылать уже упакованными. Ценно для заливки больших хорошо сжимаемых (например, текстовых) файлов.
Вообще говоря, работа с TAR и LZMA не единственное, что плагин позволяет делать, там очень много интересных возможностей, лучше посмотреть на сайте производителя. Тенденция,
Я был бы рад увидеть браузерное хранилище от Google во всех браузерах, вместо зоопарка, который мы сейчас имеем, тем более, что этот зоопарк по возможностям сильно не дотягивает до того, что придумали в Google (по правде говоря, я был бы рад увидеть
Инч би бэк
Выношу в отдельный пост комментарий хорошо иллюстрирующий мою точку зрения на перевод единиц в книгах на близкую читателю систему мер:
Читаю сейчас «Террор» Дена Симмонса. Про полярников
19-го века, вмерзших в лед на три года за полярным кругом.800 страниц дюймов, футов, пинт, галлонов, лье, миль и еще уж даже и не помню каких единиц длины, площади, массы и объема. И они там на каждой странице. Это просто разрыв мозга.
При этом, обычно, очень хочется понять:
—убегать от медведя три полных мили — это далеко или нет? —прыжок с тороса, высотой 12 футов — это опасно или нет? —по четверти пинты грога в день — это много или нет? —меньше старого фунта еды на троих — это сколько? —спать до двух склянок — это до скольки? — на пару углов левее — это куда?
Перевод всего этого в уме в метрическую систему ну очень сильно тормозит чтение. А некоторые единицы вообще без справочника непонятны. При этом никакой «игры слов» основанной на цифрах, типа «дюймовочки», там нет. Один только геморрой.
Lexx
Гори в аду, попсовый доктор Хаус! Осуществляю мечту детства — смотрю полностью «Lexx». Уже посмотрел 13 серий, сериал такой же сумасшедший, каким я его помню с детства.
Сумасшедший, но,
«Консультант» и IE
Вчера на «Хабре» люди в очередной раз подняли тему сайта «Консультанта» и Internet Explorer — первый, своей интересной частью, работает только на втором. Как я и ожидал, код завязан на особенности Internet Explorer, браузер богатый на возможности, на сайте использовано их немало. Впрочем, всё, если вдуматься, переводится и на более стандартные рельсы.
У меня давно руки чесались разобраться поподробнее как устроены userjs в «Опере» и посмотреть на отличия реализации
По результатам появился userjs, который позволяет увидеть две первые страницы базы «Консультанта» в «Опере», если
Текст userjs помещаю под кат.
// ==Userscript==
// @name Make Consultant base works
// @namespace /
// @description Make Consultant base works in non-IE browsers.
// @include http://base.consultant.ru/*
// @version 1.0
// @licence MIT
// ==/UserScript==
(function(){
/* TODO
saveCard — это behavior userData, сделать эмуляцию
VBArray — одна из переменных использует этот специфический массив
isBaseVisible, ForEachRow — убрать заглушку, сделать нормальную функцию
showModalDialog — дописать с передачей параметров (например, через window.name)
*/
document.addEventListener('load', function (e) {
showModalDialog = window.open;
return true;
}, false);
DOMParser.prototype.loadXML = function (text) {
return this.parseFromString(text,"text/xml")
}
opera.addEventListener('BeforeScript',
function(e){
if (e.element.getAttribute('for')) {
var script = e.element.text
var id = e.element.getAttribute('for')
var ev = e.element.getAttribute('event')
e.element.text = ''
document.addEventListener('load', new Function('',
'document.getElementById("' + id +
'").attachEvent("' + ev +
'", function () {'+ script + '})'
))
}
var repl = {
'document\\.body\\.attachEvent' : 'document.attachEvent',
'document\\.all\\.fieldsXML\\.XMLDocument\\.transformNode': 'document.transformNode',
'document\\.all' : 'document.getElementsByTagName("*")',
'document\\.frames\\(' : 'document.getElementsByTagName("iframe").item(',
'\\.XMLDocument\\.text' : '.textContent',
'document\\.body' : 'document.documentElement',
'\\.parentElement' : '.parentNode',
'\\.XMLDocument\\.documentElement': '',
'\\.XMLDocument' : '',
'basesRow\\.all\\.basesTable' : 'document.getElementById("basesTable")',
'\\.all\\.tags\\(' : '.getElementsByTagName(',
'\\.all\\.([^\\.;\\s]+)' : '.getElementById("$1")',
'\\.all\\(' : '.getElementById(',
'\\w+\\.getElementById' : 'document.getElementById',
'p\\.type\\.' : 'p.getAttribute("type").',
'\\.isEnabled\\s*=([^;]+)' : '.setAttribute("isEnabled", $1)',
'\\.isEnabled' : '.getAttribute("isEnabled")',
'(\\w+)\\.loadXML' : '$1=$1.loadXML',
}
for (var re in repl) {
e.element.text = e.element.text.replace(new RegExp(re, 'g'), repl[re])
}
}
,false);
opera.defineMagicFunction('writeInsertion', function () {});
opera.defineMagicFunction('getBasesTable', function (a, b, tDivRow) {
var basesRow = tDivRow && tDivRow.id ? document.getElementById("bases_" + tDivRow.id) : null;
return basesRow == null ? null : document.getElementById('basesTable');
})
opera.defineMagicFunction('forEachRow', function (a, b) { return true })
opera.defineMagicFunction('createXMLStylesheet', function (a, b, url) {
var r = new XMLHttpRequest()
r.open('GET', url, false)
r.send(null)
if (r.status == 200) {
var xml = new DOMParser()
return xml.parseFromString(r.responseText, "text/xml")
}
return null
})
opera.defineMagicFunction('isBaseVisible', function (a, b, code) {
return true
})
HTMLElement.prototype.transformNode = XMLDocument.prototype.transformNode = function (style) {
var xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(style);
if (typeof this == 'HTMLElement') {
var resultDocument = (new DOMParser()).parseFromString(this.innerHTML, 'text/xml');
} else {
var resultDocument = xsltProcessor.transformToDocument(this);
}
var xmls = new XMLSerializer();
return xmls.serializeToString(resultDocument);
}
HTMLHtmlElement.prototype.selectSingleNode = HTMLInputElement.prototype.selectSingleNode = function (path) {
var xpe = new XPathEvaluator();
var nsResolver = xpe.createNSResolver(this.ownerDocument == null ? this.documentElement : this.ownerDocument.documentElement);
var results = xpe.evaluate(path,this,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
return results.singleNodeValue;
}
ActiveXObject = function (str) {
return new ({
'Microsoft.XMLDOM': DOMParser,
'Microsoft.XMLHTTP': XMLHttpRequest,
'Scripting.Dictionary': Array,
})[str]
}
})()
Кстати, «Опере» нужно не забыть сказать, чтобы она маскировалась под Internet Explorer (правая клавиша мыши, «Настройки сайта», закладка «Сеть»).
Обращаюсь к тем, кто читает RSS и трансляцию, текст userjs по ссылке на исходный пост.
iPhone и снимки с GPS
iPhone, который, не спрашивая, записывает в снимок информацию с GPS, чувствую, доставит ещё немало лулзов в интернетах. Одна тётечка, сфоткавшись обнажённой, уже спалилась — координаты есть, дом на Google Maps видно, тем более, что он частный. И это только начало.
Подводная река

Красиво — фотография Анатолия Белощина, сделана под водой, в Мексике, на глубине 28 метров, «река», над которой видно дайвера — это течёт сероводород (обязательно посмотрите оригинал).
Когда летим?

Экран выбора дня вылета и класса обслуживания сайта авиакомпании «Трансаэро», угадаете с первого раза в какой день вылет? Вы уверены?
Batch-запуск
Пока писал книгу, часто приходилось пропускать по нескольку сотен, а то и тысяч картинок через различные
Я пользовался для этой цели Windows Script Host, описывал что нужно жать на языке JScript. Вот, например, обрабатываются 492 изображения программой «A Smaller GIF 1.22»:
with (WScript.CreateObject("WScript.Shell")) {
AppActivate("A Smaller GIF 1.22")
for (var command, j = 0; j<492; j++) {
WScript.sleep(100)
for (command = '^O+{TAB}{DOWN}{UP}', i = 0; i<j; i++) {
command += '{DOWN}'
}
SendKeys(command+'{ENTER}^S')
WScript.sleep(100)
SendKeys('{ENTER}')
}
}Всё понятно,
Какой Минск
Смотрел билеты в Минск

Штанга: стоп, машина
Решил одуматься и остановить погоню за весом. Сейчас я без выпученных глаз и льющейся крови из ушей могу взять 100,5 кг, но это вряд ли можно назвать рабочим весом. Остановлюсь. Решил тренировать выносливость, увеличивать число подъёмов, а не вес, потренирую суставы, кости и сердце.
Сегодня три раза за день играл в «лесенку», последний раз выглядит вот так (с минимальными паузами): 68×6, 98×2, 88×2, 78×2, 68x6, 68×6, удерживание 68 кг — 40 секунд, удерживание 68 кг — 40 секунд, 68×6, 68×6.