На блоге «SearchEngines» появились замеры — действительно ли так выигрышно пользовать Google Public DNS, как это утверждает Google. Основной вывод:
для среднего пользователя интернета с достаточно определенным кругом посещаемых сайтов никакого выигрыша в скорости при использовании внешних сервисов DNS не наступает. Большинство нужных ему доменов есть в кэше домашнего роутера или сервера провайдера, а необходимость сходить за некоторыми доменами выше ему, скорее всего, даже не будет заметна.
Расскажу о чём речь, если кто не знает. Google открыл публичный DNS на легко запоминаемом IP 8.8.8.8 (за что ему спасибо, иногда DNS провайдера отваливается и я использую 4.2.2.2—4.2.2.4), утверждается, что его использование увеличит скорость загрузки сайтов.
Как видно из тестирования, в некоторых случаях это действительно имеет место, но мы же все понимаем что на деле делает «Гугл» — уточняет историю наших посещений (плюс получает новый источник информирования о новых сайтах) и дело вовсе не в заботе о пользователе и желании поделиться какой-то супертехнологией, облегчающей нам жизнь.
Время от времени занимаюсь модификацией используемого внутри компании инструмента «TestLink». Сложная задача — приделать к нему ЧПУ (TestLink целиком на фреймах, у него не то что ЧПУ, обычных-то URL нет).
С задачей справился чуть менее, чем полностью — осталась пара мелочей, а в пятницу по половины одиннадцатого вечера боролся с деревом тест-кейсов. Всё просто — получили линк на test case, нужно раскрыть дерево на определённом узле. Дерево выполнено не на православном jQuery, а на сатанинском ExtJS (кстати, привет авторам ExtJS и вопрос — для чего вы делали собственные ID, но не потрудились сделать возможность привязаться к ним из select и get?).
Осложняется всё тем, что дерево снаружи недоступно (изолируется внутри функции), а менять JS-код продукта я не могу, это крайне нежелательно. Пришлось эмулировать события, чем я раньше никогда не занимался. Оказывается на эту тему есть весьма развесистые плагины (в том числе и для jQuery), я эмулировал вполне конкретное событие — клик мышью, поэтому сделал свою небольшую функцию, как водится, две ветки — для IE и всего остального. Запишу сюда, чтобы не потерять:
function fireEvent(element, eventname){
if (document.createEventObject){
return element.fireEvent('on' + eventname, document.createEventObject())
} else{
var event = document.createEvent("HTMLEvents")
event.initEvent(eventname, true, true)
return !element.dispatchEvent(event)
}
}
В итоге получилась дикая вещь — когда человек вводит этот самый понятный ему URL, браузер спрашивает у сервера путь по дереву, получает его, по таймеру долбит дерево в плюсики (дерево грузит каждый узер через AJAX), чтобы развернуть каждый узел по пути следования к test case, а когда добирается до цели, таймер тушится.
Такие развесистые клюквы там приходится программировать на каждом шагу. Зато все URL абсолютно понятны пользователю и роутинг правится очень просто.
Добавлено 8 декабря 2009 0:41: потом я переписал всё на чистом ExtJS, воспользовавшись getCmp, expandPath и внутренней реализацией fireevent, но код всё равно тут оставлю — пригодится.
Отличный инстурумент для коллективного редактирования заметок — Etherpad, куплен корпорацией зла и прекратит своё существование первого апреля 2010 года, разработчики вольются в команду Google Wave.
Если дверью хлопают, и прохода нету, значит боковушечка возле туалета. Это место проклято, передайте всем, не берите в кассах место 37
Хотели было с женой отправиться праздновать Новый год на Крайний Север, но передумали — будем в Казани всё-таки, уже традиция намечается — праздновать Новый год со всеми родителями, не будем рушить.
Думали поэкономить и на поезде поехать, но плацкарты не осталось, а билет в купе стоит как на самолёт, так что решили, что лучше полетим. 31-го будет в Казани, 9-го января — обратно в Москву.
Очень хочется, чтобы в Thunderbird появилась галочка, которой можно было бы отметить папку, где не может быть спама. У нас в «Яндексе» целая куча внутренних рассылок и мне часто в них приходится убрать пометку «спам», которой упорный дух Байеса, встроенный в «птицу», помечает спамовые, по его мнению, письма.
Начитавшись лебедевской «Дрюкенции» придумал вчера наушники «Свой дед» — представляют собой беруши, с излучателями на противоположных от ушей сторонах. Из излучателя должна доноситься генерируемам неразборчивая ритм-секция на высокой скорости — так как это обычно слышно из наушников всякой школоты.
Идея — школота, обманувшись такой «музыкой», примет любого дедка как своего.
На Web Standards Days увидел, наконец, новый движок «Оперы» — Presto 2.4 в действии! Новую «Оперу» показывал Вадим Макеев (он работает в этой компании), версия 10.50 (название кодовое) поддерживает border-radius и целую кучу других интересных вещей. Первые публичные сборки появятся, вероятно, уже в начале следующего года.
Кстати говоря, Presto 2.4 уже работает в Opera Mobile 10 beta, которую можно скачать, но, к сожалению, эти самые интересные вещи (и border-radius тоже) в ней отключены.
По мотивам предыдущего поста. Чтобы Opera 9+ (а так же 3.5—6.05), Firefox 3.6+, Chrome 3.0.191.0+ и Safari 4.0.1+ позволили выбрать несколько файлов в диалоге загрузки файлов, нужно написать вот такой код:
Я указал «file[]» для того, чтобы PHP сразу разложил полученные файлы по массиву $_FILES. К сожалению, запрос от «Оперы» PHP понимает неверно, так как «Опера» шлёт такой запрос в формате multipart/mixed. К счастью, PHP в этом случае положит содержимое файлов одним MIME-куском прямо в $_POST['file'][0], а там его уже можно разобрать (надеюсь, директива magic_quotes_gpc у вас отключена).
Я попробовал, это несложно. Для того, чтобы разобрать MIME-секцию, я использовал PECL-модуль mailparse (есть версия для Windows):
У меня ожидается, что содержимое файлов будет передано как параметр «file[]» (в $_POST это будет $_POST['file'][0]), но пример несложно переделать на любое другое имя или сделать это имя параметром.
Я как-то пропустил, хотя сам участвовал в голосовании за эту фичу, что бете FF 3.6 появилась возможность выбрать несколько файлов при загрузке (это часть стандарта WebForms 2). Простой пример использования:
Ещё более интересно, что в свежей бете (№4) этого браузера есть возможность (как я понял) получить доступ к выбранным файлам из веб-приложения.
Попробовал посмотреть как выгдядит прикрепление нескольких файлов со стороны PHP, оказалось всё просто — достаточно сказать PHP, что из входящих данных нужно сделать массив и всё работает (например, указать name="input[]"): в каждом поле каждого элемента массива $_FILES содержится массив значений. Вот как это выглядит для двух файлов:
Конструкция работает в Chrome с версии 3.0.191.0 и в Safari с версии 4.0.1. К сожалению, в Opera 10.20 alpha 1 поддержки нет, в IE8 — тоже.
Добавлено 29 ноября 2009 23:08: оказывается, «Опера» поддерживала с версии 3.5 загрузку сразу нескольких файлов в обычном, «однофайловом» диалоге, но в 7-й версии эту возможность открутили. Так что «Опера» первый браузер, где это реализовали.
Добавлено 29 ноября 2009 23:14: «Опера» 9.0 и выше поддерживает загрузку множества файлов в одном контроле, достаточно указать параметры min и max:
Немного не повезло на въезде в город — прилетал Медведев и прямую трассу в Минск закрыли для простых смертных, зато таксист (ехали из аэропорта) сполна отработал двойной тариф, который он с нас слупил. Заехали в гостиницу «Беларусь» — чистенькую, но совковую. Совковость чувствуется во всём, в номере холодно (+6 на улице, в номере, похоже, не топят), персонал хамит, порою действует соверешенно неадекватно.
Складывается ощущение (не знаю так ли это), что ресторан «Панорама» на 22-м этаже гостиницы — самая высокая точка города, когда смотришь из окна, не видно, чтобы где-то были здания выше. Погуляли по городу, холодно, исчезающе мало кафе, но чисто и благопристойно. Много заботятся о безопасности на дорогах — большие знаки, яркие (светодиодные, плоские) светофоры, широкие дорогие, велосипедные дорожки. Общее ощущение — город скучноватый, но откуда это родилось я не решусь сказать.
Беларуский рубль — это примерно в 95 раз меньше, чем российский, что незаурядно травмирует мозг поначалу (400 тысяч за номер в отеле?! 127 тысяч за такси??!), но постепенно начинаешь незаметно убирать два нуля и испокаиваешься (сколько надо доплатить за завтрак — 32000? а! это же где-то 320 рублей).
Завтра-послезавтра мы с женой Минске, в первый день погуляем по городу и отметим день рождения жены, во второй день я на «Web Standards Days» (впрочем, все участвующие уже в курсе, из письма организаторов).
Поднимался по мраморной лестнице во внутреннем дворике «Яндекса», капли дождя, накапливаясь на верхней площадке, срываются на ступеньку ниже, и ниже, и ниже. Я — исполин, идущий по долине муравьиных водопадов.
Очень хочется импортировать сюда, в блог, свой старый ЖЖ. Конвертор давно готов (написал за пару дней ещё в феврале), но всё не решусь запустить — из-за «Яндекс.Ленты». Имеется неприятный баг, который проявляется, если использовать в RSS теги, позволяющие RSS-читалке «Яндекса» индексировать через RSS весь сайт целиком.
У меня они и используются. Если я симпортирую сюда весь ЖЖ, то пользователи «Яндекс.Ленты» увидят все эти записи (сколько их там не помню, ну пусть 800) как новые, что плохо, я такого себе позволить по отношению к читателям не могу, а что делать не знаю. Можно сделать импорт, но не показать эти записи роботу «Яндекса», тогда они не будут находиться через «Яндекс.Поиск по блогам», который я использую как поиск по своему сайту.
Куда не кинь, всюду клин.
А ещё и бы и старый сайт импортировать, с 11 ноября 2000 года по 4 июля 2003-го. Кстати, недавно было 9 лет как я веду этот сайт.