Subversion и время модификации файлов

Крайне странно что раньше я не замечал по-умолчанию директива use-commit-times ВЫКЛЮЧЕНА!.

Включить, понятное дело, можно настройкой в конфиге ~/.subversion/config.

Ну или в cli добавив параметр –config-option=config:miscellany:use-commit-times=yes

17.08.10  |  ,  | стань первым

watir и ruby1.9

В системе обновился ruby до 1.9 и после переустановки нужных gem-ов ВНЕЗАПНО обнаружилось, что watir не грузится.

/usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices/arglist-strategies.rb:152: warning: else without rescue is useless
/usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices.rb:1:in `require’: /usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices/arglist-strategies.rb:148: syntax error, unexpected ‘:’, expecting keyword_then or ‘,’ or ‘;’ or ‘\n’ (SyntaxError)
when 0: # This is not considered an error because another source

Решить «проблему» удалось редактированием нескольких файлов в /usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices/ – в arglist-stragergies.rb, conversions.rb и sources.rb необходимо все конструкции вида when XXXX : заменить на when XXXX then

10.12.09  |  ,  | 3 comments

redmine mail reader

Некоторое время назад для ведения “задачаоборота” мы c небольшой группой “единомышленников” решили использовать Redmine. Коллеги стали замечать, что волосы у нас стали шелковистыми, одежда сияет белизной, а главное – СУХО! Ну и постепенно начали вовлекаться в процесс.
Сразу же, с порога, выдвинули претензию – а почему нельзя создать задачу из письма (Слава привет!) ? Главным аргументом против магии седьмого уровня Copy-Paste было то, что им приходит множество аттачментов в письмах, которые и являются сутью поставленной задачи. Их надо сохранить на диск и лишь потом прикрепить к задаче… Неудобно, ага.

Сходу не смог найти необходимый функционал ни в самом redmine, ни в рабочих плагинах( использую redmine из trunk-а, с ним многие плагины или не работают вовсе или наполняют его “глюками” в самых неожиданных местах). Посему пришлось наваять оный плагин самостоятельно. Суть его работы такова:
В gmail-ном ящике (да в принципе любой imap-сервер подойдёт) создаются ярлыки (папки) с названиями, соответствующими идентификаторам проектов в redmine.
Rake-таск из плагина (нужно периодически запускать по cron-у) проверяет наличие писем с этими ярлыками и создаёт новые задачи, в соответствующих проектах, прикрепляя все вложения к тикету. Для защиты от всякого рода спама на всякий случай письма принимаются только от зарегистрированных пользователей.

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

Если вам такой функционал интересен, то вы можете скачать плагин себе. Установка ничем не отличается от других плагинов – распаковываем содержимое в vendor/plugins, копируем config/mail_reader.yml.example в RAILS_ROOT/config/mail_reader.yml, редактируем конфиг, рестартуем redmine, добавляем модуль в настройках проектов и добавляем в cron задачу rake mailreader:check

Для работы требуется gem tmail для корректного вытягивания имён файлов во вложениях. Да я знаю, что он (tmail) уже имеется в составе actionmailer, но я так и не сообразил как корректно его загрузить – буду рад, если кто-нибудь поможет правильно подключить этот класс.

Отзывы? Пожелания? Добро пожаловать в комментарии!

07.11.09  |  ,  | 10 comments

IE8 и currentStyle

Новость одной строкой… Когда-то я рассказал как добавить border-spacing для IE используя свойство currentStyle.

Вчера, как многие знают, вышел IE8.Собственно на этом можно было бы многозначительно пост закончить…

В общем в IE8 более этот трюк не работает. В currentStyle не попадают неизвестные браузеру свойства. Изящного решения пока не нашёл – если уж пользовались им, то просто замените непонятные буквы в css на cellSpacing = <число> вместо вычислений, которые были раньше…

Update а вот переводная статья о других особенностях IE8

commit-jabber


После прочтения статьи о том, как в last.fm используют irc для логирования всего и вся тоже захотелось как-нибудь “выпендриться”.
Мониторить сервера нам ни к чему, да и irc – поди объясни сейчас что это такое и чем оно лучше _______. Но недавно выдалась свободная минутка и я нашёл куда приложить усилия.
Решил сделать post-commit хук в svn-репозитарии, который будет высылать детали о коммите, но не на почту, как это делается в традиционных скриптах, а в jabber (cам jabber достался нам вместе с почтой от гугла) .
По-моему получилось очень удобно и за несколько дней превратилось из игрушки в удобный инструмент для своевременного обновления и обнаружения “ну и зачем ты это сделал” :)

Собственно все внутренности состоят из библиотеки XMPPHP и маленького скриптика, который вешается на post-commit.
Сам скриптик настолько маленький и бесхитростный, что комментировать его не вижу смысла – кладу как есть.
Для функционирования нужно иметь xmpphp в include_path, бинарник svn в PATH и добавить post-commit hook в ваш репозитарий.

В сложнейшем, виндовом случае это будет post-commit.cmd, который лежит в директории hooks репозитария и имеет следующее содержание:

/path/to/php.exe /path/to/svnjabber.php %1 %2

24.02.09  |  , ,  | стань первым

AJAX и проблемы с кодировкой

Вот уже полтора года в draft-ах пылился пост о надуманности проблем с кодировками и т.н. AJAX-ом.
Каждый раз, когда на форумах всплывали вопросы подобного характера, хотелось дать ссылку, на всякий всплеск заходов на блог по запросам “кодировка, ajax, проблема” хотелось его опубликовать, но мне казалось, что пост ещё не закончен, надо ещё чуть-чуть дописать…
Но вот буквально сегодня появился удивительно похожий пост – ajax, cp1251. Похожий по содержанию, но совершенно противоположный по смыслу.
Посему свой черновичок я решил удалить, а поведать свою “истину” в форме критики совета fxposter-а.

Ни для кого ни секрет, что кодировкой получаемых через Ajax данных по-умолчанию принимается UTF-8.

На самом деле это секрет. Для многих секрет. И многие не понимают почему это так.
Внутреннее представление строк (и регулярных выражений) в JavaScript для всех не-ASCII последовательностей как раз UTF-8.
Отсюда и проистекает т.н. “проблема” – если кодировка не указана явно и используется нелатиница, она будет интерпретирована как utf-8 последовательность.

Update 29.11 Свежий воздух и Давид Мзареулян остудили пыл, поэтому спешу уточнить о чём именно будет идти речь ниже.
Итак – у вас есть некий ресурс в однобайтовой кодировке (к гадалке не ходи это будет windows-1251) и вы озаботились освоить новый buzzword по имени AJAX. Немного почитав, вы делаете первые робкие шаги в этом направлении и тут же наступаете на “детские грабли”, а затем, немного отдышавшись, мчитесь на форумы с криком о помощи. И вам эту помощь окажут – переделай мол, свой ресурс на utf-8… Конечно-конечно скажете вы и пойдёте переделывать…
Я же хочу остеречь от таких опрометчивых шагов.

Cтандартное решение, которое наперебой советуют все – “используй utf-8 и нет проблем”.

И советчики правы – проблем действительно не будет.

Просто трафик увеличится “вдвое”. Те же данные, тот же результат, а трафика “в два раза” больше. Ага?

Что вы там говорите насчёт порошка?!?

Если вам этот фактор кажется мало***щим, то на этом чтение надо прекратить и начать переделывать свой проект на использование UTF-X,
остальным же оставлю несколько рецептов, которые помогут избежать проблем при использовании однобайтовых кодировок в т.н. AJAX-приложениях: (more…)

28.11.08  |  ,  | 14 comments

Cross Domain XMLHttpRequest

Задачи обмена информацией ставятся и успешно решаются каждый день. Но обмениваться можно по-разному. Кто-то дарит удобоваримый доступ к своей базе посредством распространённых обменных форматов (xml, csv, json, lisiy_chert), кто-то реализует собственные API, а кто-то идёт другими путями.

Моя задача состояла в следующем – на ресурсах-сателитах необходимо разместить сложную форму. “Сложность” формы заключается в том, что данные подгружаются с главного ресурса и не могут быть загружены единовременно(при загрузке ресурса) или доставлены на ресурс-сателит заранее (так-так данных очень много и они достаточно быстро устаревают). Всевозможные API для доступа к информации основного ресурса в настоящий момент разрабатывать нецелесообразно, поэтому было решено для сателитов предоставлять некий готовый комплекс (аля plug-n-play).

Ещё до начала разработки я тщательно изучил уже имеющиеся механизмы для межсайтового обмена данными. Первым и самым перспективным был вариант использования flash-плеера, но единственный вменяемый пример FlashXmlHttpRequest был только лишь примером, а не законченным куском кода, которым бы можно было воспользоваться. jQuery на тот момент даже не содержала функции $.getScript, JSHttpRequest с созданием тега script удачно справлялся, но POST по понятным причинам делать не мог.

Данные с главного ресурса могут подгружатся посредством динамического создания тега script jQuery.getScript, с этим казалось бы проблемы нет. Но! Но последним шагом в указанной форме нужно отправить на основной сервер внушительный объём данных, которые могут не влезть в GET (тоже кстати говоря весьма интересный вопрос – а каково ограничение на длину URL в разных браузерах? в различных веб-серверах,прокси и фильтрах? – в RFC2616 об этом не сказано). Можно конечно изобрести какие-либо механизмы, например отправлять данные небольшими порциями GET-ом, но скорости такая схема явно не прибавит, поэтому такие варианты оставлены другим изобретателям.
(more…)

03.10.08  |  ,  | 4 comments