Показаны сообщения с ярлыком Сисадмину. Показать все сообщения
Показаны сообщения с ярлыком Сисадмину. Показать все сообщения

Pandoc: швейцарский нож для преобразования текста

Не единожды при создании текстов (особенно технических документов) в Microsoft Word, да и в других WYSIWYG редакторах, ловил себя на том, что оформление документа отнимает внимание и не даёт полностью сосредоточиться. Постоянно хотелось разделить задачи написания содержания и оформления, но не было подходящего инструмента: хотелось чего-то очень простого и понятного, и чтобы не надо переключаться между клавиатурой и мышью, и чтобы ещё и не переучиваться, и чтобы всё работало быстро.



Графитовые графики в консоли


Случайно наткнулся на чудесный консольный скрипт,- spark умеет в консоли псевдографикой рисовать некое подобие картинки из входных значений. Примерно так, как на изображении, ага. Красота.


А ещё волшебным образом можно показать статистику из Graphite, например так:

$ curl -s "https://graphite/render/?target=metric.foo&from=-30min&format=json" | \
python -mjson.tool | grep ',' | grep -v '\]' | spark
▂▅▇▃▆▆▅▇▂▁▂▁▂▁▁▅▇▃▃▃▂▂▂▁▂▂▃▁▂▃▁▁▁▂▃▅▂▁▂▂▃▃▃▂▆▃

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

Учебник GIT

Логотип Git
Вот вам сразу ссылка: Учебник GIT.

Впервые столкнулся по работе с git (это такая распределённая SCM ака система контроля версий. Из тех, что доводилось использовать раньше,- похоже на Mercurial). Википедия говорит, что git придумал Линус Торвальдс, чего-то ему не хватало в имеющихся на тот момент (в 2005 году) системах контроля версий при разработке ядра linux:

Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года.

Та-же википедия говорит, что git затачивали под использование в скриптах, поэтому якобы система команд и ключей продумана и оптимизирована под скритпы. После Hg переучиваться тяжело, у git (как и у всех других SCM) своя волшебная философия,- мнемоника отдельная от всего и совершенно своя. Как с этим бороться,- понятно: мануалы почитать :-) Собственно, сайт проекта git содержит всё необходимое,- дистрибутивы для разных ОС, исходники и книжки на нескольких языках, в том числе на русском. Перевод весьма достойный, читается легко и всё понятно. Вообщем,- рекомендую.

Console Colors: Сделать цветную консоль за 3 шага

Пример раскраски вывода ls
в 
online-конфигураторе
Очень часто делаю что-то в консоли, и в десктопном маке и на удалённых серверах. Использую bash. И, очень часто, выводит из себя отсутствие раскрашивания, как минимум в выводе листинга директорий. Сел разбираться,- оказывается, чтобы сделать консоль цветной, нужно сделать 3 простых шага:

Во-первых, надо удостовериться, что в переменных окружения стоит правильная консоль xterm (xterm-color или даже xterm-256color). Смотрим на вывод команды env:


    $ env
    SHELL=/usr/local/bin/bash
    TERM=xterm-256color
    PAGER=more
    BLOCKSIZE=K
    EDITOR=vi
    ...
Если тип консоли указан неправильно,- надо исправить (и добавить соответствующую строку в ~/.profile):

    $ TERM="xterm"; export TERM

Во-вторых, надо разрешить консоли использовать цвета:
    $ CLICOLOR="YES"; export CLICOLOR
И, наконец, настроить цветовую схему для вывода ls. Цветовая схема для ls задаётся переменной окружения LSCOLORS (или LS_COLORS, зависит от системы). Формат описания цветовой схемы тоже зависит от системы, чтобы не искать документацию, можно воспользоваться простеньким online-конфигуратором (позволяет задать только базовые 8 цветов). Набросал для примера вот такую схему, и добавил описание в env:
    LSCOLORS="ExGxFxdxCxDxDxhbadExEx"; export LSCOLORS

Уровни DEBUG

Надоело уже путаться какие уровни дебага какие типы сообщений пропускают. Проверил на Python 2.x с использованием стандартного модуля logging, получается такая таблица:

Уровень сообщения в логе
Уровень лога  DEBUG   INFO   WARNING   ERROR   CRITICAL 
DEBUG
V
V
V
V
V
INFO
V
V
V
V
WARNING
V
V
V
ERROR
V
V
CRITICAL
V

Получается, что если хочется самый чистый лог,- ставим уровень в CRITICAL и видим только критичные события в логе. Надо чуть подробнее,- ставим ERROR, видим сообщения типа ERROR и CRITICAL, и так далее. Самый подробный уровень DEBUG показывает все типы сообщений от самых низкоуровневых DEBUG до CRITICAL. Почему-то у меня никак не уложится в голове, что INFO идёт сразу за DEBUG

Страсти вокруг du -h

В очередной раз столкнулся с нехваткой дискового пространства на тестовом Linux-сервере,- значит пора чистить конюшни, то есть разобрать, наконец, завалы дистрибутивов "на всякий случай", бэкапы поудалять и вообще.

Обычный способ,- посмотреть сколько места занимает каждая папочка начиная с рута, зайти в самые толстые, найти вредителей и уничтожить,- и так рекурсивно пока df -h не начнёт показывать приемлимые цифры. Но перфекционизму нет предела,- хочется "чтобы одной командой", да "отсортировать по размеру", да ещё и в человекочитаемом формает, т.е. занимаемое место показывать в Гига-\ Мега- \Кило- байтах. Поигрался с du -h и sort'ом: не вытанцовывается, полез гуглить.

Набрёл на прекрасный топик с кучей рекомендаций, начиная от улучшенной версии coreutils >= 7.5, в которой sort умеет сортировать выдаваемые du -h значения, заканчивая половыми извращениями в виде Python-овских скриптов или вставок awk или Perl в командной строке. Но самое изящное решение оказалось простым, как Unix:

du -scBM * | sort -rn

Показывает отсортированные по убыванию размера папки и файлы в текущей директории. Размер приводится в мегабайтах, чего, вообщем-то, вполне достаточно для оценки,- стоит ли в папке искать залежи мусора, или пусть живёт?

Рамблер-Контакты

Пропустил новость, что в июле 2011 года появился новый IM-клиент "Рамблер-Контакты". Поддерживает протоколы Jabber, MMP (Mail.ru Agent), GoogleTalk, ICQ, умеет подключаться к FaceBook, вКонтакте, Яндекс.Онлайн и QIP. Сейчас (в ноябре 2011) всё ещё в статусе бета, оно и понятно,- при установке ругается на отсутствие прав, показывает какие-то каракули, однако устанавливается. После установки пытается запуститься и падает с грохотом. Ручной запуск удаётся,- однако,- для входа требуется логин на Рамблере, дальше не пошёл. Дизайн явно навеян макосью, но достаточно приятный, по крайней мере не такой кривой, как у мультифона.

Дождёмся стабильной версии?

СМИ: Слишком Много Информации

Прежде чем разрабатывать систему защиты системы, убедись, что система не работает против тебя. Очень часто, система авторизации возвращает слишком много информации в случае неуспешного логина. Например, в абстрактной системе (веб-сайт, или FTP-сервер или SIP-софтсвич) пытается авторизоваться злоумышленник, используя случайный логин vasya.pupkin и пароль 123456. Система ищет в списке пользователя vasya.pupkin и пытается сверить хеш пароля (вы же не храните пароли в базе данных открытом виде, правда?). Система быстро убеждается в том, что пользователя с таким именем не существует и отправляет ответ, что-то вроде “Invalid Username”(Неправильное имя пользователя) или “Username Does Not Exist”(Пользователь не найден). Вот Вам прекрасный пример принципа СМИ,- слишком много информации.

Почему?

Apple Autoingestion.class и прокси. Загрузка отчёта с помощью curl

Собираю статистику по загрузкам своих приложений из Apple AppStore. Яблочники не так давно выпустили утилиту для загрузки отчётов, да вот беда,- не работает эта утилита через прокси, а у моего сервера другого доступа, кроме как через корпоративный прокси-сервер и нет. Пробовал устанавливать переменные окружения HTTP_PROXY и FTP_PROXY,- не помогает.

Ctrl-S и vi


У системных администраторов и программистов бывают плохие привычки. Одна из таких привычек,- работать попеременно в разных редакторах, например в редакторе mc и vi в консоли, да ещё и в Notepad++, к примеру. Сам по себе факт работы в разных редакторах ни плох, ни хорош, но вот следствия бывают не очень приятными. Например, привычные сочетания клавиш под разными системами могут приводить к разной реакции. Одно из таких комбинаций CTRL+S. Во множестве десктопных редакторов, в особенности в Windows, такое сочетание зарезервировано для сохранения текущего документа, в редакторе mc это же самое сочетание клавиш включает и выключает подсветку кода.

А вот при работе по ssh в терминальном окне Putty это сочетание клавиш приводит к зависанию сессии. Ну, то есть, множество раз мне казалось, что сессия зависла и приходилось попросту подключаться заново к серверу, пока я не решил разобраться.

Оказалось, что на самом деле CTRL+S включает режим XOFF, в котором терминал принимает нажатия клавиш, но не выводит в ответ ничего. Визуально кажется, что сессия умерла, но это не так. А если есть режим XOFF, то есть режим XON. Режим XON включается обратно при помощи CTRL+Q.

Вот так-то.

Colspan=100%

Много раз сталкивался с ситуацией, когда надо сделать ячейку таблицы, объединяющую все столбцы (например для подзаголовка группы строк или как footer для всей таблицы). Если наперёд знаешь сколько столбцов,- не проблема, есть стандартный атрибут colspan, указываешь количество объединяемых ячеек, например colspan="2", всё работает.

А если страница выводится скриптом и количество столбцов наперёд неизвестно? И нет возможности посчитать в шаблонизаторе? В последний раз такая задача возникла при использовании Django, там шаблоны очень удобные, но с математикой там туго, а писать собственный template tag или filter казалось излишеством. Выкручивался либо изменением шаблона (чтобы такое объединение ячеек вообще не было нужно) либо городил в коде дополнительный подсчёт количества столбцов, пока не надоело. А когда надоело,- полез гуглить.

Оказалось, что не я один "хочу странного", куча народу уже сталкивалась с такой-же проблемой. Пробуют добавлять в свойства таблицы colspan="all" или colspan="0", - не во всех браузерах работает. На stackoverflow нашлось решение,- рекомендуют писать colspan="100%".

Попробовал на доступных браузерах,- работает везде.

Yealink VP-2009 Keyboard Test and Factory Reset

На забугорных форумах нашёл информацию о том, что в телефоне при наборе *#5702000# включается режим Keyboard Test (ну это проверка клавиатуры по-нашему). Проверил, - действительно запускается. Такой текстово-гравический экранчик с крупными буквами, просит нажимать последовательно F1, F2 и т.д. Каждая кнопка нажимается по 2 раза, после этого переходим к следующей кнопке. Дошёл до кнопки Ok, нажал два раза,- телефон ушёл в ребут. Правильно, ведь на этом забугорном форуме было написано, что для Factory Reset'а надо дважды нажать Ok в режиме тестирования клавиатуры :-). Вот только как проверить оставшиеся клавиши после Ok? Правильно, второй раз нажимать другую клавишу :-)

Собственно сброс забытого администраторского пароля так и происходит.

wxPython в Windows7

Поставил portablePython для тестирования и разработки в недружественных корпоративных условиях (да-да, на моём рабочем компьютере у меня нет администраторских прав). При тестах простейшего графического приложения с использованием wxPython выявилась неприятная особенность,- при MouseOver над окном приложения puthon.exe тупо умирает. Думал,- какое-то событие неправильно обрабатывается, пробовал перехватывать,- результата не дало. Гугление показало, что проблема в версии Python,- в 2.5.x всё работает, а в ветке 2.6 ошибка проявляется. Обещают починить в 2.8.10. Пока откатился на 2.5.4.

Полный список параметров SIP

Обнаружил полезный документ,- полный список заголовков SIP и других параметров (Session Initiation Protocol (SIP) Parameters):
В документе описаны:

Registries included below:
- Заголовки (Header Fields)
- Протоколы причин (Reason Protocols)
- Опциональные теги (Option Tags)
- Коды уведомлений (Warning Codes (warn-codes))
- Методы и коды ответов (Methods and Response Codes)
- Значения приватных заголовков (SIP Privacy Header Values)
- Имена механизмов безопасности (Security Mechanism Names)
- Схемы сжатия (Compression Schemes)
- Параметры URI (SIP/SIPS URI Parameters)
- Параметры и значения полей заголовков (Header Field Parameters and Parameter Values)
- Назначения и форматы URI (URI purposes)
- Пространства имён приоритетов (Resource-Priority Namespaces)
- Значения приоритетов (Resource-Priority Priority-values)
- Параметры идентификационной информации (Identity-Info Parameters)
- Параметры алгоритма идентификационной информации (Identity-Info Algorithm Parameter Values)
- Параметры настройки User-Agent (SIP Forum User Agent Configuration Parameters)

PyLDAP: Авторизация в AD

Наткнулся на вредную багу при авторизации в ActiveDirectory: после успешного ldap.bind() получал ошибку "In order to perform this operation a successful bind must be completed on the connection". Решение нашлось в официальном FAQ python-ldap:

When searching from the domain level MS AD returns referrals (search continuations) for some objects to indicate to the client where to look for these objects. Client-chasing of referrals is a broken concept since LDAPv3 does not specify which credentials to use when chasing the referral. Windows clients are supposed to simply use their Windows credentials but this does not work in general when chasing referrals received from and pointing to arbitrary LDAP servers.
Therefore per default libldap automatically chases the referrals internally with an anonymous access which fails with MS AD.


Если по русски,- иногда AD-сервер возвращает ссылки на дополнительные сервера, на которых могут быть дополнительные результаты поиска. По умолчанию libldap пытается получить результаты с помощью анонимного доступа, в случае с Active Directory этот номер не проходит.
Решается добавлением l.set_option(ldap.OPT_REFERRALS,0) после ldap.initialize().


l = ldap.initialize('ldap://foobar')
l.set_option(ldap.OPT_REFERRALS,0)

Голосовые кодеки в VoIP

Чтоб не потерять, собрал в одну табличку голосовые кодеки для VoIP.











































Схема сжатияСкорость, Кбит/сКачество голоса
G.711 PCM64Отличное
G.723 MP-MLQ6.4 - 5.3Хорошее(6.4), плохое(5.3)
G.726 ADPCM40, 32, 24Хорошее(40),плохое(24)
G.728 LD-CELP16Хорошее
G.729 CS-ACELP8Хорошее
iLBC15.20 - 13.33Хорошее
IPCMWB13Хорошее

Skype: SDK и аудиокодек SILK

 Оказывается Skype ещё в марте открыл спецификации своего аудио кодека SILK для некоммерческого использования. Краткая информация по кодеку доступна на странице для разработчиков, оттуда же доступны ссылки на весьма интересный драфт драфт RFC и описание формата RTP payload с отсылками к RFC 3550 и нескольким другим. Ощущение такое, что изначально всё базировалось на SIP.

И ещё срочно в номер: появился SkypeKit SDK, который позволяет любым программам и устройствам использовать сеть Skype для обмена сообщениями, контроля статуса, аудио и видео-связи без необходимости установки проприетарного клиента.

XLRD - читалка Excel для Python

Понадобилось по работе забивать данные из нескольких разноформатных файлов Excel в одну единообразную базу MySQL. Данных было много, вручную вбивать,- долго, да и ошибок можно наделать (ага, тот самый человеческий фактор). Естественным образом появилось желание автоматизировать этот ужос. Встроенный в MS Office VisualBasic показался некошерным по нескольким причинам: во-первых,- я его не очень хорошо знаю, а во-вторых,- не кроссплатформенно. Из других доступных языков под руками только Java и Python. Полез искать, что у нас есть в питоне для чтения Excel и нашёл чудесную совершенно библиотеку XLRD. Работает на любой платформе, где есть Python, легко читает всё что нужно. Небольшая проблема,- не читает формат xlsx (MS Office 2007), особо не вникал в чём проблема.

За запись Excel в Python отвечает парный пакет XLWT

Yeaphone - USB-трубки Yealink (SkypeMate) под Linux

По наводке с хабра наткнулся на сайт Thomas Reitmayr со страницами Yeaphone. По словам автора, основная цель проекта,- создать интерфейс взаимодействия с USB-трубками Yealink (USB-P1K / P1KH / P4K) для Linphone, чтобы монитор и клавиатура были больше не нужны. Это позволит использовать трубки во встроенных системах (Embedded Device). В качестве основного устройства автор использует Linksys NSLU2 с альтернативной прошивкой, делающей железку полноценным линуксом. В добавок ко всему, автор предлагает использовать трубку совместно с Asterisk со всеми его расширениями, автоответчиками, планами нумерации и прочими полезняшками.

Потенциально на такой связке можно построить собственную небольшую АТС-ку размером с базу для DECT-овской трубки.

Grandstream lpf file format

Попал тут в руки SIP-телефон Grandstream, оказался без русской прошивки. На сайте есть Language Pack, в котором много всего, даже турецкий,- но русского нет. Проблема в том, что файлы локализации представляют собой нечто бинарное, с расширение .lpf. Полез смотреть хексом,- ба!, какая знакомая картинка: