PHPUnit_Extensions_TicketListener_Redmine

Если вы тоже используете redmine и PHPUnit, то возможно и вам пригодится расширение для закрытия/открытия задач при удачном/неудачном прохождении теста.

Как это работает подробно написано в статье, на основе которой был написан данный класс.

Для тех кто не осилит – кратенько, в нескольких словах:

  • Скачиваете файл Redmine.php
  • Добавляете в существующий(создаёте новый) конфигурационный файл и добавляете в него содержимое phpunit-configuration.xml.example, исправив путь к файлу Redmine.php и указав адрес redmine свой ключ API (доступен на странице профиля, в сайдбаре)
  • Выбираете отчёт об ошибке из redmine-а, пишите тест, для тестового метода добавляете phpdoc-аннотацию @ticket 6666:
    class ExampleTest extends PHPUnit_Framework_TestCase {
        /**
         * @ticket 6666
         */
        public function testExampleMethod() {
            $this->assertTrue(false);
        }
    }
    
  • Запускаете phpunit, указав путь к конфигурационному xml-файлу
       phpunit --configuration phpunit-configuration.xml ExampleTest.php
    
  • Убеждаетесь в том, что задача закроется как только тест будет пройден:
    PHPUnit 3.5.2 by Sebastian Bergmann.
    
    Updating Redmine issue #6666, status: closed
    .
    
    Time: 0 seconds, Memory: 3.50Mb
    
    OK (1 test, 1 assertion)
    

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

Google tasks в трее.

Google Tasks in systrayДавно искал удобный способ управлять повседневными задачками – искал всевозможные программки, которые бы были всегда по рукой (перед глазами). Перепробовал всё от банального текстового файла на рабочем столе, до навороченных приложений с категориями, тегами, уведомлениями, шахматистками и какао… В своё время мне очень нравилась deskDo от PixelApes, но в какой-то момент момент основной сайт проекта стал недоступен и я про него позабыл, пользовался различными air-приложениями, плазмоидами типа “remember the milk”, пытался использовать basket note pads и даже приватную задачу в redmine с уставновленным плагином Issue checklist

Золотая середина между простотой и функциональностью был где-то в районе google tasks, но пользоваться им в окне (табе) браузера не очень удобно – он постоянно терялся среди десятков других и как следствие забывался…

Но пару месяцев назад я случайно наткнулся на приложение, которое решило все проблемы, оно называется treb (Treb=tray+web). Приложение позволяет “спрятать в трей” небольшой браузер (он притворяется мобильным для того чтобы отобразить оптимизированную для маленьких экранов версию веб-сайта), в котором можно открыть любую страницу.

Теперь заметки в “шаговой” доступности, всегда под рукой – одним кликом открывается удобный список, в который можно быстро что-то записать или отметить “готовность”, а сетевая природа гуглозадач позволяет иметь единый список на разных ПК.

А чем пользуетесь вы для ведения списка “мелких задачек” и “напоминаний” ?

13.01.12  |  ,  | 2 comments

Failed to initialize the NVIDIA GPU

После обновления ядра до версии 2.6.38.7 система стала работать нестабильно, переодически зависала на продолжительное время, решил не откатываться на предыдущее, не ждать милости Патрика, а собрать более свежее ядро руками (вспомнить молодость, ага).

Процесс прошёл на удивление быстро:

#"инструкция"
cd /usr/src/
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.8.tar.bz2
tar xfj linux-3.1.8.tar.bz2
rm -rf linux
ln -s /usr/src/linux-3.1.8 /usr/src/linux
cd /usr/src/linux
zcat /proc/config.gz > .config
make oldnoconfig
make menuconfig
make -j3 all
make modules_install
make install
cd /etc/rc.d
mv /boot/vmlinuz /boot/vmlinuz-3.1.8
ln -s /boot/vmlinuz-3.1.8 /boot/vmlinuz
mv /boot/System.map /boot/System.map-3.1.8
ln -s /boot/System.map-3.1.8 /boot/System.map
cp /usr/src/linux/.config /boot/config-3.1.8
rm /boot/config
ln -s /boot/config-3.1.8 /boot/config
mcedit lilo.conf
lilo
reboot

…а главное безболезненно – система загрузилась сразу.

Настал черёд пересобрать драйвера nvidia. В наличии имелся инсталлятор версии 275.09 – он работать отказался сославшись на то, что не может найти исходники ядра. Хорошо – скачал последнюю на данный момент сборку – 290.10, которая установилась без проблем. Но не тут-то было – xOrg не запустился ругнувшись:

NVIDIA: could not open the device file /dev/nvidia0 (Input/output error).
(EE) NVIDIA(0): Failed to initialize the NVIDIA GPU at PCI:1:0:0.  Please
(EE) NVIDIA(0):     check your system's kernel log for additional error
(EE) NVIDIA(0):     messages and refer to Chapter 8: Common Problems in the
(EE) NVIDIA(0):     README for additional information.
(EE) NVIDIA(0): Failed to initialize the NVIDIA graphics device

И пошло-поехало…

  • откатился до 285.05.09 – тоже самое
  • последовательно перепробовал всевозможные опции ядру, которые удалось найти в “этих ваших интернетах” и noacpi и pci=biosirq и vmalloc=XXXm – без результата.
  • перепробовал море разных опций модулю nvidia – без толку

И вот надежда уже погибла, xOrg работает через убогий nouveau и остаётся лишь установить бубунту загрузить старое ядро (и собрать ему старые драйвера nvidia). Поудалял кучу старых инсталляторов и решил скачать (раз пошла такая пьянка) 275.28 и на всякий попробовал их собрать к свежему ядру. И что удивительно – получилось! всё заработало, на первый взгляд система стала шустрее, chrome с полусотней открытых табов больше не вводит иксы в транс. На днях попробую повторить операцию “хватить тупить” на другой машине

“Такой день” (ц)

zoom-слайдер на клавиатуре в linux

После прочтения заметки о “странных кнопках ноутбука” сразу вспомнил о неработающем zoom-слайдере на клавиатуре Microsoft Microsoft® Digital Media Keyboard. Немедленно с помощью showkeys выяснил keycodes событий “слайдер вверх” – 418, слайдер вниз – 419. Перечитав ещё несколько раз заметку понял что мне она больше не поможет – xOrg в принципе не переваривает keycodes выше 255, ситуация казалось бы безвыходная, но оказалось не совсем, нашлось решение в виде evrouter – программы, которая (как видно из названия) “пробрасывает” события одних устройств на другие трансформируя согласно правилам описанным в конфигурационном файле.

После непродолжительных мытарств родился следующий ~/.evrouterrc:

#при нажатии на slider up на клавиатуре - сгенерируй событие "mousewheelup"
"Microsoft Microsoft® Digital Media Keyboard" "/dev/input/event.*" none key/418 "XButton/4"
#при нажатии на slider down на клавиатуре - сгенерируй событие "mousewheeldown
"Microsoft Microsoft® Digital Media Keyboard" "/dev/input/event.*" none key/419 "XButton/5"

Для получения необходимых прав в /dev/input в rc.local была добавлена строка:

# внимание - используйте на свой страх и риск! Слабо представляю какие подсистемы затронет такое наглое вмешательство в /dev
chgrp users /dev/input/event*

В ~/.kde/Autostart добавлен запуск /usr/bin/evrouter /dev/input/event*

Вы можете запускать evrouter через sudo (и не трогать права на /dev), но подозреваю, что с автозапуском могут быть проблемы…

После чего обнаружил что скроллинг работает, да совсем не так, как ожидалось – одно нажатие на слайдер прогручивает активное окно на три строки (как и указано в настройках KDE), но хотелось-то чтобы прокручивалось до тех пор пока слайдер не отпустишь… Снова поиск и снова решение (more…)

subversion как система резервного копирования

Понадобилось легко и непринуждённо иметь резервную копию директории с windows-сервера.

***

Первой попыткой было использование wget –mirror с ftp-сервером:

#!/bin/sh -e
unset
url="ftp://server.tld/path/to/dir/"
backup="/tmp/local-copy"

wget --no-cache -nH -c -t0 --mirror -P$backup -i- <<EOF
        $url/subfolder1
        $url/subfolder2
        $url/subfolderN
EOF

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

***

Попытался найти аналог rsync для windows, первые несколько страниц поиска содержали какие-то gui-приложения, форумы предлагали использовать cygwin и массу других тяжеловесных комбайнов…

В итоге всё решилось импортом директории в svn и добавлением в “Scheduled tasks” следующего bat-файла:

cd \path\to\dir
for /f "tokens=2*" %%i in ('\path\to\bin\svn status . ^| find "?"') do \path\to\bin\svn add "%%i"
for /f "tokens=2*" %%i in ('\path\to\bin\svn status . ^| find "!"') do \path\to\bin\svn delete "%%i"
\path\to\bin\svn commit -m "Automatic backup" .

***

Дописывая эти строки подумалось – а ведь можно было использовать dropbox (asus webstorage, ubuntu one и т.п.)… Ну да ладно – велосипед собранный своими руками милее (и прозрачнее в работе).

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

Переезды.

Переездов было несколько, конечно они все виртуальные, но нервотрёпка была “прям как настоящая”.

***

Первым делом переехали доменные имена от webst.ru.

В далёком каком-то там году в поисках варианта “подешевле” я наткнулся на упомянутого регистратора. Удивили крайне низкие цены на фоне других предложений и отсутствие всяческой бумажной волокиты (которую я многократно наблюдал например в nic.ru). Сумма была совсем небольшая и я рискнул ей, зарегистрировав домен rpz.name на один год. И процесс на удивление быстро прошёл — буквально несколько минут и я стал владельцем собственного домена. Таким образом система заработала моё доверие и в последствии я регистрировал, редактировал, переносил множество других доменов и почти не знал бед. Спустя несколько лет я расстался с windows и как следствие – с IE, в котором была возможна моментальная оплата счетов в системе webmoney transfer. Тут появились первые проблемы – один из моих доменов зарегистрирован в конце января. Каждый год в новогодние каникулы была традиция – продлить домен. Тот год был не исключением. Перевёл деньги – был честно предупреждён, что “неавтоматическом режиме” деньги идут ДО 48 часов. Время было. Волнение появилось к середине месяца – исправно поступали уведомления о том что срок регистрации домена истекает “вот-вот”. Попытки быстро связаться с Артуром (владельцем проекта webst.ru) ни к чему не привели. В конце-концов эта история закончилась благополучно, деньги зачислились, домен продлился и вроде бы даже принеслись извинения. С тех пор это стало нормой, но в общем-то не очень сильно напрягало – несколько раз в год за пару месяцев до истечения срока домена я переводил деньги и спустя какой-то терпимый промежуток времени деньги поступали по назначению.
В этом году я решил поступить иначе и решил продлить их сразу на три-четыре года, т.к. один по недосмотру уже потерял. Начать решил как раз с rpz.name – его срок выходил буквально “на днях”. Получив очередное предупреждение о том, что через 60 дней срок регистрации истечёт, я выписал счёт и перевёл требуемую сумму (около 1000 руб.). Я разумеется был готов к ежегодным “качелям” и не волновался первые недели три. Затем оставил тикет с системе поддержки – “когда мол деньги-то приедут, а?”. Спустя неделю обнаружил что тикет в состоянии “не обработан”. Написал SMS – доставлено, но осталось без ответа. И вот только после всего этого я посетил webmoney – писать на WMID. Там я и обнаружил, что в арбитраже претензий к Каримову было десятка полтора и все одного содержания – деньги перевёл н-цать дней назад, с тех пор ни ответа, ни привета. Кто-то жаловался, что вовсе потеряли домены, несмотря на то, что всё оплатили.

Я написал на WMID о своём волнении и снова забыл на несколько дней об этой “проблеме”. Потом оставил претензию в арбитраже. Через неделю обнаружил, что претензии моей просто нет в системе… отправил её повторно. А спустя ещё несколько дней стал жаловаться в арбитраж. Тут уже выяснилось что первая жалоба была неполной (хотя вторая была копи-пастом первой), а “судится” может только персонально аттестованный участник системы (забавная социальная математика – вернуть надо $30, но для это надо потратится на аттестат порядка $15-$20 реальных денег, и полдня рабочего времени). Пока я решался – бросить эту затею или “пойти на принцип”, домен потихоньку “протухал”, поэтому было решено – перенести домен к регистратору, к который не пропадёт так же как предыдущий, у которого есть настоящие офисы, в которых сидят настоящие, живые люди, количеством больше одного. В общем захотелось в случае проблем найти кого-то кому можно будет посмотреть в глаза и сказать что-нибудь непечатное. Первым на глаза попался reg.ru (его рекомендует webmoney на свои страницах). Беглый осмотр интернет-отзывов показал, что “этим людям можно верить”, и я зарегистрировался, оплатил продление и инициировал перенос домена к ним. Тут как водится тоже всё пошло не так, как хотелось бы, потребовалось около трёх недель переписки сначала с менеджерами reg.ru – они искренне наверное хотели помочь, отвечали на все мои письма и заявки, но в итоге отписались следующим:

К сожалению, пока ответ от Регистратора мы так и не получили.
В случае, если мы не получим ответа, то можно будет только отменить заявку и вернуть Вам средства.

Тогда я сам связался с Регистратором (некий 1API GmbH), объяснил ситуацию на “ломанном врунглише” и через несколько дней мне принесли извинения, домен перенесли.
Всё закончилось благополучно, спустя некоторое время Артур вернул (молча) веб-мани, на которые я перенёс (не без приключений) остальные домены.

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

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

***

Следующим “переездом” был перенос виртуального сервера, на котором крутятся мои проектики. 4-5 лет назад, когда shared-хостинг стал совсем поганым, а ютиться на серверах работодателя стало совсем “нескромно” я присмотрелся к входившим тогда в моду VDS/VPS (честное слово не знаю в чём отличия этих аббревиатур). Первый свой сервер я приобрёл в virtualserver.ru у своих давних виртуальных знакомых. И несколько лет почти не знал бед, играло ли роль наше знакомство или действительно “наши клиенты самые лучшие” как было написано в топике irc-канала на котором можно было застать поддержку, но проблем действительно не было – они все решались очень быстро, а главное – они решались. Уйти к 1gb.ru меня побудил более удобный способ оплаты – за virtualserver можно оплатить только веб-манями. В автоматическом режиме – только wmz. В какой-то момент источник wmz пересох и перед каждой оплатой приходилось посуетиться в “обменниках” или “упрашивать” принять wmr. В 1gb видимо только появились VDS на базе Hyper-V, обещали честный “делёж” ресурсов, полный доступ (вплоть до перезагрузки). И, признаюсь, всё так и было некоторое время, потом начались проблемы с диском (да, nickname, ты меня предупреждал ;) ) Пару раз, после жалоб в чат поддержки, машину переносили между физическими серверами и на какое-то время это спасало. Но последние несколько месяцев всё стало просто отвратительно, сервер мог быть запросто недоступен по два-три часа в сутки. Примечателен ответ поддержки на жалобу о недоступности сервера – “запустили создание большого количества машин, к утру нагрузка должна нормализоваться”, “разумеется” даже спустя сутки ничего не изменилось, но поддержка дипломатично промолчала… Последней каплей было “прокачивание” через этот сервер двухсотмегабайтного видео-файла. Загрузка заняла около 6 часов, а скачивание около 12… Почитав обзоры и отзывы разных хостинговых площадок я пришёл к неутешительному для российских компаний выводу – “надо валить”. Большая часть претензий пользователей в основном касается того, что наши “жадины” продают ресурсы дважды, а затем либо просто “вымогают” деньги выталкивая клиентов на более дорогие тарифные планы (хотя зачастую переход не помогает), либо просто не отвечают. На этот раз я доверился зарубежной linode.com, о которых не нашёл сильно негативных отзывов, но нашёл море позитивных. В отличии от многих других компаний тут не было “тестового периода”, всё сразу “серьёзно” – оплатил месяц виртуальной visa-картой, которую сделал в qiwi.ru, после чего получил доступ в панель управления, но это первая компания в которой мне предложили создать машину со slackware на борту, а ещё дали выбрать дата-центр в котором она будет размещена. С поддержкой мне пока столнуться не довелось, всё работает исправно, быстро, страница блога, например, теперь открывается меньше чем за две минуты!. Панель управления простая и очень функциональная.

Буду надеяться, что ситуация не изменится и на некоторое продолжительное время можно будет “осесть на обжитом месте”.

Jabber-нотификация в redmine

Просматривая статистику посещений, обратил внимание на то, что многих интересует словосочетание «redmine jabber». Пришла пора удовлетворить спрос. В начале «как обычно» небольшая предыстория о том, «как всё начиналось»:

Несколько лет назад мне удалось внедрить redmine на «производстве», коллеги потихоньку втягиваясь в процесс, затребовали «книгу отзывов и предложений». Одним из первых пожеланий была замена стандартных уведомлений по email на, успевшие уже войти в моду, jabber-уведомления, которые мы используем для нотификации о новых коммитах в svn. Я вооружился тем самым поисковым запросом, о котором упомянул и немедленно нашёл нужной функциональности готовый плагин. Помимо уведомлений, автор обещал нам некие таймеры, которые можно стартовать/останавливать посредством команд боту в чате, тем самым «точно» подсчитывать затраченное на решение задачи время. В теории это казалось очень нужной и удобной игрушкой, на деле же оказалось, что плагин был выпилен для старой версии redmine и с trunk-версией работать по полной программе отказался. Худо-бедно он иногда стартовал какие-то таймеры, иногда присылал какие-то уведомления, от полученных команд иногда впадал в ступор и потом долго игнорировал собеседника, в общем вёл себя непозволительно загадочно и непростительно таинственно, но скиллов для исправления обнаруженных проблем мне не хватало, а автор на открытые тикеты особо не реагировал. Мыши плакали, кололись и продолжали есть кактус до одного смешного стечения обстоятельств: я находился в другом городе, бессовестно тратил отпускное время на прогулки, осмотры достопримечательностей и дивных пейзажей, внезапно получил входящий звонок от коллег. Слёзно просили выручать – что-то мол случилось, трах-бах-тарарах …и всё, нет у нас больше redmine. Немного порассуждав вслух, источник проблемы вроде бы вычислили, каким-то временным образом проблему по телефону решили, но в тот же вечер, добравшись до интернета, плагин я без сожалений выкинул. Случилось следующее — при старте redmine, плагин коннектился к jabber-серверу, а уж затем поднимался сам редмайн, но в тот роковой момент соединение с интернетом пропало, от чего случился обширный exception и redmine умер не приходя в сознание.

***

Тогда стало понятно, что схема со злобным плагином не работает и уведомления надо рассылать внешним по отношению к redmine решением (здесь знатоки rails могли бы долго возражать, но уже поздно). Параллельно с этой проблемой существовали другие. (more…)

27.06.11  |  , ,  | 3 comments

Performance Optimization WordPress Plugins by W3 EDGE