Время от времени занимаюсь модификацией используемого внутри компании инструмента «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 лет как я веду этот сайт.
Олег, братишка, ты помнишь программу «KeyRus»? Отличный русификатор для DOS, им вся страна пользовалась, компактный, мощный, функциональный. Наше самонадеянное желание сделать меньший по размеру? Что мы тогда знали о сжатии и работе видеоадаптера? Помнишь как удивлялись, что после беты восьмой версии мы не могли найти релиз? 1994-й год, последняя версия, я ещё в техникуме учился, а интернет я увидел только через два или три года, браузер Lynx в текстовом терминале 286-го, подключенного через telnet под DOS к Unix-машине.
Случайно зашёл на страницу «кейруса» в Википедии, оказалось, что её автор Дмитрий Гуртяк умер в 1998-м, от саркомы мозга.
Видимо, в последние годы ему было не до «кейруса», мда.