Система Orphus

четверг, 7 мая 2009 г.

Маленький однострочник на баше для получения погоды в консольку (на 3 дня)



wget -q -O - http://wap.gismeteo.ru/26702.wml |\
sed -e '/^<br\/>.*\|<\/\?p>\|<a href.*\|(c).*\|.*wapstart.ru.*\|.*wml.*\|.*?xml.*\|<\/card>/d;s/^.*title="\(.*\)">/\1\n\n/;s/<br\/>//g;s/<img src=.*alt="\(.*\)"\/> <b>\(.*\) .*<\/b>/\1 - \2/g'
Описание:

Чтобы получить погоду на свой город, идем по линку http://wap.gismeteo.ru/, жмем линк "Другие города", дальше находим свой город и смотрим его адрес, для Калининграда это http://wap.gismeteo.ru/wap2/towns/26702.wap2, вот тут нам нужно число, которое стоит перед ".wap2". Запоминаем его и вписываем в скрипт перед ".wml". Все :)


ЗЫЖ-1 Кстати, мой скрипт выводит инфу не на 3 дня, а на 9 кварталов (квартал = 6 часов, т.е. утро, день, вечер, ночь). Ошибся когда писал пост. Просто чтобы получить прогноз на 3 дня, надо еще одну страницу парсить, чего я не стал просто делать.

ЗЫЖ-2 Благодаря блогу Unix way из поста Погода в консоли узнал про хорошую утилитку weatherget написанную на питоне. Погоду она утягивает с http://xoap.weather.com/.
Пример использования:
weatherget -s RSXX0058 -m -e 3
В консольке будет погодка на 3 дня для Калининграда.



UPD: Есть обновочка :)


среда, 6 мая 2009 г.

Подушка для тех, кто даже спит с ноутбуком



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



[]

вторник, 5 мая 2009 г.

GLPI: Подтверждаем закрытие заявки (пример установки плагина)

Оказывается для GLPI есть замечательный плагин имя которому Tickets Validation. А замечателен он тем, что после его установки появляется возможность отправить юзеру запрос удовлетворен ли он выполнением заявки или нет.

В этом посте я расскажу как установить, настроить и руссифицировать плагины на примере сегодняшнего "героя" :)

Для начала надо скачать сам плагин с сайта GLPI (на данный момент самая свежая версия 0.2):
wget http://glpi-project.org/IMG/gz/glpi-validation-0.2.tar.gz
Теперь его нужно извлеч из тарбола:
cd /var/www/plugins/
tar xzf ~/glpi-validation-0.2.tar.gz
Теперь лонинемся в нашем GLPI, если ты уже залогинен, то надо выйти и снова войти, и идем в Установки > Плагины, там находим ссылку "Validation" и переходим по ней. Жмем следующую ссылку "Install Tickets Validation plugin 0.2" (имя ссылки написала по памяти). Следующая ссылка - "Manage profiles", заходим по ней и выбираем профили, из под которых можно будет отправлять юзеру запрос удовлетворен ли он выполнением заявки или нет.

С настройкой готово. Теперь расскажу как использовать его.
В Поддержка > Отслеживание открываем любую заявку. Вверху появилась еще одна маленькая "панелька" "Плагины", между "Заявка ХХХ" и "Добавить ответ". Если навести мышку на "Плагины", то появится "менюшка", в которой будет пункт "Validation", щелкаем по нему. Теперь идем в самый низ страницы и видим там раздел "Send a validation request". В поле "Пользователь" выбираем нужного юзера, а в поле "Примечание" вводим какое-либо примечание :) и жмем кнопку "Send". Юзеру будет отправлено сообщение с ссылкой, по которой ему надо перейти, чтобы подтвердить закрытие заявки. А там уже и так все понятно :)

Все сделали, плагин работает, юзеры довольны, волки, т.е. мы - админы, сыты :) Но(!) плагин не знает, что такое великий и могучий русский язык. Не хорошо, не хорошо... Надо его поучить уму разуму. Чем мы сейчас и займемся :)

Идем в папку /var/www/plugins/validation/locales/, там есть файлик en_GB.php, копируем его в ru_RU.php, конвертируем полученный файл в utf-8 и правим его на русский язык (да, да, а вы что халявы хотели?):
cd /var/www/plugins/validation/locales/
sudo cp -v en_GB.php ru_RU.php
iconv -f cp1251 -t utf-8 ru_RU.php | sudo tee ru_RU.php
sudo vim ru_RU.php



Чего унылый такой? :) Перевод халявный не дали? :) Держи ru_RU.php :)
Вся критика и замечания по переводу с радостью принимаются :)



ЗЫЖ Я что-то проглядел плагин, когда смотрил весь большой список на сайте GLPI, а узнал из этого комментария за что frolin'у огромное спасибо :)

суббота, 2 мая 2009 г.

Zyb.com: Сихронизируем мобилы в on-line

Не так давно я узнал про классный сервис zyb.com, который позволяет синхронизировать данные между мобильниками (и не только). Работает он просто: с мобилы выкачиваются в твой профиль на зыбе данные (контакты, календарь) и там сохраняются, когда ты добавляешь новые контакты/записи в календаре, то снова их синхронизируешь с зыбом. А если что-то удалишь, то можешь это все забрать с зыба. Удобно? Для меня да (параноикам просьба не беспокоить :)).

В этом посте пойдет речь о том, как настроить зыб и мобилку на работу "в одной банде" на примере Sony Ericsson K790i.

Итак. Иди на сайт zyb.com и тыкай кнопку "Sign up". В выпадающем списке выбираешь название своего девайса (либо тыкаешь по соответствующей картинке выше), а ниже появятся модели, находи свою мобилку (либо вбей ее модель в поле "My phone is a") и тыкай по ней. Для меня это SonyEricsson K790i.
Теперь надо заполнить не большую анкетку (можно т.ж. перейти по ссылке "use OpenID", но я этого не делал). Думаю какое поле для чего и так понятно и комментарии тут будут излишни. Я заполнил все поля, а вот последнюю галку ставить не стал, нафиг мне эти новости? :) Заполнил анкету? Тогда жми "Continue".
Как только загрузилась следующая страница мне браузер сказал, что SSL-сертификат корявый и спросил хочу ли я ему доверить, согласился. И тут же мне пришла смс-ка с настройками, точнее сами настройки, я просто нажал на телефоне левую дисплейную клавишу, т.е. ответил "Да". Мобила запросила ввести пароль, посмотрев в монитор я увидел на странице зыба надпись "If asked for a PIN please use:" и ниже "1234" и, естественно, ввел это число в мобилу. После этого в зыбе я нажал "Continue", а в мобилке перешел в Меню -> Параметры -> Связь -> Синхронизация, там уже был создан профиль ZYB.
Давай его сразу заодно и настроим до конца. По умолчанию календарь не сихронизируется (у меня это было именно так), чтобы это исправить иди в Меню -> Параметры -> Связь -> Синхронизация, выбирай там профиль ZYB и жми правую дисплейную клавишу (Функции), а в ее меню выбирай "Измен.". Теперь иди в пункт "Приложения" и ставь в нем галочку в пункте "Календарь". Потом переходи в пункт "Парам. приложения", там выбрай "Календарь" и в параметре "Имя базы данных" пиши "./calendar". Теперь календарь тоже будет синхронизироваться :)
Далее надо указать правильный профиль подключения к инету, я выбрал "Megafon GPRS". Еще будет полезно настроить интервал синхронизации, я указал 7 дней, т.к. у меня это максимум :( А в пункте "Удал. инициализ." я поставил "С запросом", т.к. не хочу чтобы без моего ведома что-то там синхронизировалось само :)))
Все. Теперь жми "Сохранить" и "Пуск". Запускается синхронизация и через несколько секунд все твои данные из адресной книги и календаря будут на зыбе :)


На этом все. Удачи :)
Изучение доп. возможностей зыба оставляю тебе в качестве домашнего задания :)))

[]

четверг, 30 апреля 2009 г.

GLPI: Исправление глюка в центральной консоли

Вчера было замечено, что если в центральной консоли GLPI выбрать закладку "Все", то в разделе "Ваши группы" (второй прямоугольник) в пункте "Заявки в ожидании" (тот, который слева) отображаются заявки, которые по настоящему имеют статус "В процессе" и наоборот. Тоже самое будет если перейти на закладку "Ваши группы".

А лечится этот глюк правкой двух строк в файле ./inc/tracking.function.php. Значит открываем этот файл в любимом тестовом редакторе и переходим к строке 195, в которой число 16 меняем на 15:
$title=$LANG["central"][15];
А в строке 205 - наоборот, т.е. 15 на 16:
$title=$LANG["central"][16];


Вот и все :)


ЗЫЖ На всякий резервный: архив, в котором оригинальный файл, измененный и diff-патч :)

[]

среда, 29 апреля 2009 г.

GPLI: Настройка e-mail для уведомлений, без зацикливания

5 минут назад мне задал вопрос один знакомый "У меня такой вопрос по GLPI, ты как завел аккаунты для получения и ответов? Т.е. у меня есть support@xxx.ru для ответов, если использую его, то получается, что зацикливаются заявки..." Дело в том, что нельзя использовать один e-mail, т.к. действильно будет зацикливаться. Тут нужно 2 адреса. Поэтому цель этого поста рассказать как правильно настроить GLPI чтобы и уведомления ходили, и сбор почты работал и циклов не было.


Настройка занимает всего 4 шага. И так:
Шаг 1. Идем в Установки > Уведомления на закладку "Установки", там в полях "Email администратора системы" и "Обратный адрес администратора (если нужен)" надо прописать e-mail-1, у меня это helpdesk@server.ru.
Шаг 2. Переходим на закладку "Настройка уведомлений" и везде убираем "Администратор" (выделяем справа "Администратор" и нажимаем кнопку "<< Удалить"). Потом везде добавиляем "Администратор Организация" (выделяем слева "Администратор Организация" и нажимаем кнопку "Добавить >>")
Шаг 3. Теперь идем в Установки > Почтовый парсер. Тут надо добавить новый почтовый парсер, если это еще не сделано. Как настроить почтовый парсер я рассказывал в первом посте про GLPI (см. п.B). В настройках почтового парсера указать настройки для e-mail-1 (поле "Email (необязательно)" надо оставить пустым), в моем случаем это helpdesk@server.ru.
Шаг 4. Осталось самое нудное :) Нужно пройтись по каждой организации и заполнить поля "Email администратора системы" и "Обратный адрес администратора (если нужен)". В первом надо указать e-mail-2, у меня это support@server.ru - это мой основной рабочий e-mail, а во втором поле - e-mail-1, у меня это helpdesk@server.ru.

Все, теперь циклов быть не должно.


Подведем итоги... Что мы теперь имеем? Если юзер пришлет письмо на helpdesk@server.ru, автоматом создастся новая заявка и отправится уведомление юзеру, админу организации, т.е. тебе. При этом в качестве мыла отправителя будет указано твой адрес, т.е., в моем случае, support@server.ru. Если же юзер ответит на это письмо, то реально он ответит не на support@server.ru, а на helpdesk@server.ru. GLPI прикрепит его к этому запросу как комментарий и снова разошлет уведомления.
Но (!) запрос не будет никому назначен. Чтобы запросы еще и автоматом назначались тебе придется поковыряться в Администрирование > Правила > Правила для заявок. Там ничего сложного нет, но если будут вопросы пиши, постараюсь помочь.

вторник, 28 апреля 2009 г.

Ультратонкий рюкзак для ноутбука. Класс!

Вот это я понимаю рюкзак для ноута. Надо бы не забыть купить, 80 баксов всего.





Вскоре после того, как человечество изобрело ноутбук, появились специальные сумки для его переноски. Сперва они напоминали чемоданы, но затем постепенно становились все тоньше и компактнее. Заслуженной популярностью стали пользоваться рюкзаки для ноутбуков. Но обычный рюкзак – штука довольно громоздкая. Поэтому правильный выбор – ультратонкий рюкзак "Built".





[]

понедельник, 27 апреля 2009 г.

GLPI: Добавляем свои статусы для заявок.

В предыдущем посте (GLPI. Шаг за шагом.) я уже рассказывал как установить GLPI на Ubuntu Server и о "сложностях", с которыми пришлось столкуниться...
На днях пришлось сделать хак/твик, т.к. главного программиста не устроило, что в статусе заявок нет таких пунктов как "Доработка" и "Закрыто и проверено". О чем и хочу рассказать в этом посте. Хотя я все же сделал немного по своему и создал новые статусы "В процессе (доработка)" и "Закрыто (решено и проверено)", такие лучше в общий контент вписываются, имхо.

Говорю один раз, повторять не буду :)
1) все файлы, которые я изменял, были предварительно скопированы в качестве резервной копии, чего и тебе советую
2) все эти твики/хаки проводились с версией 0.71.5, хотя думаю, что для других версий это будет тоже актуально, за исключением не больших отличий, таких как номера строк, хотя точно не знаю
3) непосредственно та строка/подстрока, которая была добавлена/изменена, будет выделяться жирным шрифтом
4) все изменения будут делаться снизу-вверх по файлу, чтобы номера строк не отличались от оригинального файла
5) все пути будут указнанны относительно корневого каталога веб-сервера


Приступим =)

Для начала добавим сам текст, который будет отображаться в выпадающем списке при выборе статуса заявки. Открываем файл ./locales/ru_RU.php и находим 669 строку, а после нее добавляем две строки:
 $LANG["joblist"][28]="В процессе (доработка)";
$LANG["joblist"][29]="Закрыто (решено и проверено)";
С этим готово. Теперь сделаем так, чтобы при создании/именении заявки у нас была возможность указать новые статусы. Для этого открываем файл ./inc/dropdown.function.php и сразу после 1095 строкой пишем:
case "finalize" :
return $LANG["joblist"][28];
break;
case "verified_and_closed" :
return $LANG["joblist"][29];
break;
Тут "finalize" и "verified_and_closed" внутренние имена наших новых статусов, чтобы можно было к ним обращаться в коде GLPI. Программисты поймут, а тем кто не знает программирование поясню подробнее... Когда ты выбираешь из списка статус то видишь что-то типа "В процессе (доработка)", это не имя, как могут подумать некоторые, а значение статуса. Имя мы вибираем сами, в моем случае это "finalize". Такое имя должно быть уникально во всем коде программы. Поэтому важно выбрать внутреннее имя статуса так, чтобы оно было уникальным в программе. Надеюсь ты меня понял :)

Теперь поднимаемся еще выше до строки 1866, в которой объявлена функция dropdownStatus(). Теперь внимание: в данном месте важен порядок (!), именно в том порядке, в котором ты сюда добавишь новые строки кода, будут отображаться статусы в своем выпадающем списке при создании/именении заявок. Я решил поставить "Закрыто (решено и проверено)" сразу после "Закрыто (решено)" поэтому добавил следующий код под строкой 1874:
echo "<option value='verified_and_closed' ".($value=="verified_and_closed"?" selected ":"").">".$LANG["joblist"][29]."</option>";
А "В процессе (доработка)" - "В процессе (назначено)" и код добавлял под строкой 1871:
echo "<option value='finalize' ".($value=="finalize"?" selected ":"").">".$LANG["joblist"][28]."</option>";
Теперь уже новые статусы для запросов работают, можешь войти в GLPI и убедиться. Но пока еще не работает с новыми статусами поиск запросов, тот самый который в меню "Поддержка > Отслеживание", т.к. он про них ничего еще не знает. Значит нам надо рассказать нашему другу "Поиску", что есть новые статусы. Для этого открываем файл ./inc/tracking.function.php и... набираемся терпения, т.к. тут поработать ручками придется больше, чем в предыдущих двух файлах вместе взятых :)) Не пугайся, ничего сложного тут нет, лучше двигайся к строке 1638 и под ней пиши вот этот код:
case "verified_and_closed": $title.=$LANG["joblist"][29];break;
а теперь поднимись чуточку выше, к строке 1635 и набери под ней вот этот код:
case "finalize": $title.=$LANG["joblist"][28];break;
Тут опять же важен порядок, как я уже писал выше, но этот порядок для заголовка PDF-экспорта. Хотя может тут порядок и не важен, но я не стал заморачивать проверками и сделал именно так.
Едим дальше вверх :) до строки 1386 и вставляем под ней вот этот код:
case "finalize": $where.=" ( glpi_tracking.status = 'finalize' )"; break;
case "verified_and_closed": $where.=" ( glpi_tracking.status = 'verified_and_closed' )"; break;
Теперь идем на три шага выше, т.е. к строке 1383 и приводим ее вот к такому виду (ориентируйся по жирному шрифту):
case "old_done": $where.=" ( glpi_tracking.status = 'old_done' OR glpi_tracking.status = 'verified_and_closed' )"; break;
теперь еще выше и правим 3 строки с 1379 по 1381 (опять по жирному):
case "notold": $where.=" (glpi_tracking.status = 'new' OR glpi_tracking.status = 'plan' OR glpi_tracking.status = 'assign' OR glpi_tracking.status = 'waiting' OR glpi_tracking.status = 'finalize')"; break;
case "old": $where.=" ( glpi_tracking.status = 'old_done' OR glpi_tracking.status = 'old_notdone' OR glpi_tracking.status = 'verified_and_closed')"; break;
case "process": $where.=" ( glpi_tracking.status = 'plan' OR glpi_tracking.status = 'assign' OR glpi_tracking.status = 'finalize' )"; break;
Тремя правками выше мы рассказали нашему другу "Поиску" какие статусы к каким категориям относить. Если ты не понял о чем я, зайди в GLPI в поиск и посмотри, что есть в выпадающем списке "Статус"... Вот-вот, Эти самые все "Не закрыто" и т.п. это и есть группы, т.е. сюда попадают заявки с разными статусами, которые можно объеденить в одну логическую группу. Что-что??? Там еще нет новых статусов? Не пугайся, еще надо 4 строчки добавить в этот файлик и 1 изменить и будут видны новые статусы. Надеюсь ты еще не устал :)

Пришло время научить расширенную форму поиска видеть новые статусы. Для этого поднимаемся до строки 1103 и под ней набираем такой код:
echo "<option value='verified_and_closed' ".($status=="verified_and_closed"?"selected":"").">".$LANG["joblist"][29]."</option>";
а чуть выше, в под строкой 1100 вот такой:
echo "<option value='finalize' ".($status=="finalize"?"selected":"").">".$LANG["joblist"][28]."</option>";


Отлично. Осталось 2 строки добавить, чтобы научить простой поиск видеть новые статусы. Лезь еще выше, остановка на строке 968, под которой пиши вот этот воть код:
echo "<option value='verified_and_closed' ".($status=="verified_and_closed"?"selected":"").">".$LANG["joblist"][28]."</option>";
а под строкой 965, вот такой:
echo "<option value='finalize' ".($status=="finalize"?"selected":"").">".$LANG["joblist"][28]."</option>";
И последняя строка, в которой надо сделать правку, ее номер 317 (правь в ней код, ориентируйся по жирному):
$where = "(status = 'old_done' OR status = 'old_notdone' OR status = 'verified_and_closed')";
Этой правкой мы рассказали GLPI какие запросы считать закрытыми.

Уф... В принципе это все... Но только в принципе :) Почему? Иди GLPI и сделай новую заявку, присвой ей один из новых статусов. А теперь иди в Поддержка > Отслеживание. Что видишь? Да-да, для новых статусов нет значков :( Не хорошо получается, да? Давай это исправим :)
Иди в папку ./pics и скопируй куда-нибудь файлы new.png, assign.png, plan.png, waiting.png, old_done.png, old_notdone.png, они тебе послужат образцом. Как же надо обозвать новые файлы? Да очень просто: именно такими именами, которые мы присвоили нашим новым статусам (имеются ввиду внутренние имена), т.е. finalize.png и verified_and_closed.png соответственно для "В процессе (доработка)" и "Проверено и закрыто".

Вот теперь полностью все =)


ЗЫЖ На всякий резервный: архив, в котором оригинальные файлы, измененные, diff-патчи и иконки, которые я сделал для этих статусов =)

[]

пятница, 24 апреля 2009 г.

Собираем vnstat в ubuntu и настраиваем lighttpd для vnstati

С тех пор как я купил себе Мегафон-модем, решил поставить какую-нибудь простенькую программку для учета трафика. Выбор пал на vnstat, он работает в консольке, что очень даже хорошо (лично для меня, люблю я консоль). Но когда я увидел вебморду vnstati для vnstat, то, естественно, мне захотелось ее заиметь 8-). В репах я ее не нашел, а на оф. сайте были только сорцы... Ну это не беда подумал я и взялся за дело :)

Для начала нужно поставить libgd2-noxpm и libgd2-noxpm-dev либо libgd2-xpm и libgd2-xpm-dev (я выбрал последние):
sudo aptitude install libgd2-xpm libgd2-xpm-dev
Теперь скачаем сорцы vnstat (vnstati вместе с ними идет):
wget http://humdi.net/vnstat/vnstat-1.7.tar.gz
Распаковываем:
tar zxf vnstat-1.7.tar.gz
cd vnstat-1.7
И ставим:
sudo make all
sudo make install
Убеждаемся, что с ядром все "ок":
vnstat --testkernel
Узнаем какие фейсы можно поставить наконтроль:

vnstat --iflist
И ставим (в моем случае это ppp0):
vnstat -u -i ppp0

Теперь нажно настроить запуск демона (а зачем на через cron мониторить фейс?), для этого добавляем в файл /etc/rc.local перед "exit 0" строку:
vnstatd -d
Правим конфиг vnstat (/etc/vnstat.conf); тут надо только одну строчку поменять, а именно:
Interface "ppp0"
Наконец-то можно запустить демон:
sudo vnstatd -d

Почти все готово, осталось совсем немножко, поставить и настроить lighttpd. Ставим:
sudo aptitude install lighttpd
Включаем CGI:
sudo lighttpd-enable-mod cgi
И настраиваем его, для этого надо в файле /etc/lighttpd/conf-enabled/10-cgi.conf добавить строчку (я хочу чтобы у меня cgi выполнялся из корня вебсервера):
$HTTP["url"] =~ "^/" {
cgi.assign = ( ".cgi" => "/usr/bin/perl" )
}
Теперь скопируем в корень вебсервера cgi-скрипт:
sudo cp examples/vnstat.cgi /var/www/
И чуточку его подправим:
my $host = 'Laptop';   # Имя машины (просто для глаз)

my $cachetime = '1'; # Как часто обновлять картинки в кеше (1 раз в минуту)

my @graphs = ( # Для каких фесов генерировать статистику
{ interface => 'ppp0' },
);
Чтобы смотреть через браузер статистику нужно создать файл index.html, что и делаем:
/var/www/vnstat.cgi | sudo tee /var/www/index.html
И настраиваем права доступа (у меня от имени www-data работает lighttpd):
sudo chown -R www-data:www-data /tmp/vnstatcgi
sudo chown -R www-data:www-data /var/www


Вот теперь все, можно наслаждаться :)))
firefox -new-tab 'http://localhost/'


ЗЫ: Хоум пага проекта - http://humdi.net/vnstat/.