About | Blog | xapy

Couchdb — первые шаги

Последний год то тут, то там появляются посты/новости о couchdb — одной из многих реализаций нереляционных, или документо-ориентированных СУБД. Основной идеей, и главным отличием от традиционных, реляционных, систем является отсутствие строго определённой структуры данных, хранимых в базе. В этом посте попробую рассмотреть идею нереляционных БД в общем, и пример использования couchdb совместно с питоном для хранения некоторых данных.

 continue reading

ropevim: vim, на шаг ближе к IDE

У всех пользователей vim, пишущих python-код в этом редакторе, рано или поздно возникает потребность в функциональности, знакомой по “большим” IDE. Многие в поиске решений останавливаются на встроенных возможностях вроде дополнения ключевых слов, встретившихся в открытом файле, встроенный go-to-defintion и другие, применение которых ограничивается их универсальностью. В этом посте рассмотрим инструмент, заточенный под работу с python-кодом, предназначенный для рефакторинга кода, и, одновременно, предоставляющий возможности более “умного” автодополнения, перехода в определению идентификатора и др.

Далее идёт собственная интерпретация довольно лаконичной документации, выполненная в виде небольшого howto.

 continue reading

Приручение py-rrdtool

Как говорится в одной древней мудрости: можно вечно наблюдать три вещи: как горит огонь, как течёт вода и как рисует графики rrdtool. Этот пост как раз о последнем. И так, что же такое rrdtool? rddtool — замечательная утилита, которая позволяет управлять данными, хранимыми в формать rrd (round-robin database). Данный формат примечателен тем, что изначально предназначен для хранения периодичной информации, причём так, что размер самой БД получается фиксированным (довольно небольшим) независимо от количества данных. При этом сохраняется возможность получать отчёты за продолжительные отрезки времени с произвольной точностью. Наибольшее распространение данная система нашла в системах мониторинга, где, как говорится, лучше один раз увидеть картинку, чем 7 раз прочитать логи. В конце статьи Вы сможете получить нечто, похожее на

пример

 continue reading

xapy — ещё один chat-бот

Когда-то, в начале своего изучения языка Python, для большей наглядности пытался реалиpовать полученные навыки, портируя простейшего irc-бота с php. Со временем код развивался и вырос в так же небольшого, но уже мультипротокольного бота, с системой плагинов, которого тут и представляю. Основными идеями являются: простота использования/расширения, мультипротокольность, абстракция плагинов: пиши однажды, используй везде. На данный момент успешно работает в IRC, XMPP (Jabber) сетях, доступно пару десятков функциональных плагинов, благодаря которым можно внести в работу всю мощь и гибкость языка Python, на котором и написано ядро приложения. На этом первое знакомство завершу, остаётся линк на страничку: xapy + hg репозиторий

Первые впечатления о E-ten Glofiish X800

Пока я нахожусь в ожидании usb-кабеля для своего ipaq-a (для продолжения исследования Angstrom linux), решил обновить себе моб. телефон. Так как это происходит довольно редко, решил сразу брать железку, которой бы хватило на ближайшие несколько лет, потому выбор пал на сабжевый коммуникатор, обладающий всеми распространёнными функциями, которые сегодня можно найти в гаджетах такого плана: кроме, уже банальных, bluetooth, wifi, разработчики также одарили его gps-приёмником, gsm-модулем третьего поколения (тот самый распиаренный 3G) и другими вкусностями, вроде камеры, 640х480 экрана и пр. Далее — о первых шагах работы с новой машинкой + скриншот + пару фото.

 continue reading

Angstrom Linux + iPAQ h5450

Очередная попытка подружить мой кпк HP iPAQ 5450 с ОС Linux. Последняя попытка установки дстрибутива Familiar Linux хоть и увенчалась успехом, была отменена в виду его сырости по отношению к моей железке. На сей раз, встретив в сети The Ångström дистр решил попробовать взгромоздить его.

 continue reading

Запуск Matlab в xmonad

Короткая заметка о запуске Matlab в xmonad wm. Проблема, с которой я столкнулся чётко описана в xmonad FAQ. В кратце, заключается в невозможности отображения граф. интерфейса приложений на Java в xmonad. Много решений предлагается в инете, но мне помогло следующее — использование jre1.7. Скачал его с java.net, собрал в /tmp/jdk1.7. Самая хитрая часть — запуск Matlab после этого. Короче, export MATLAB_JAVA=/tmp/jdk1.7.0/jre && matlab. Надеюсь это кому-то будет полезно и поможет сэкономить время.

Настройка iptables на домашнем роутере-сервере

Компьютеры, со временем нахождения дома, имеют отвратительное свойство размножаться. Не успел оглянуться, как в квартире стало 2 десктопа + ноут, что неизбежно потянуло за собой организацию доманей сети. Сеть со временем эволюционировала и сегодня основным звеном является заделанная гейтвеем-файрволом машинка с gentoo linux на борту. Дабы не пропадало наличие внешнего ip-адреса, этот же комп, с другой стороны — небольшой домашний сервак. Перечислить все функции, выполняемые этим сервером довольно не просто, но основные — это веб-сервер, почтовик, ssh, хранилище личных репозиториев, сетевой гейтвей-файрвол, безпроводная точка доступа и ещё пару :) При настройке сервера, далеко не последним критерием был уровень безопасности, т.к. опыт показывает, что не смотря на хвалённую защищённость unix-подобных систем, небрежный пользователь может продать всю систему сам того не зная. Один из ключевых барьеров в системе безопасности — файрвол, о настройке которого дальше идёт речь.

Дальше будут подробности настройки iptables, которые в результате позволят нам:

  1. Раздать интернет в локальной сети всем по маске подсети и по вайфай — по mac-адресам.
  2. Защитить ssh сервер от брут-форс атак
  3. Прокинуть порты снаружи внутрь сети
  4. Открыть соответствующий доступ к сервисам, предназначеным для внутреннего и внешнего пользования.
  5. Ограничить исходящий доступ лишь используемыми портами
  6. Обрабатывать некорректные пакеты/бродкасты
  7. Вести лог подозрительных операций
  8. Всё, что не попало под разрешённые категории — блокировать и п. 7
 continue reading

Django ManyToMany field со своими именами колонок

Некоторое время назад столкнулся с задачей, близкой к описанной в джанговской доке Integrating with a legacy database. В контексте общей задачи, прикрутить джанго-админку к существующей БД, возник небольшой вопрос, ответ на который в Сети тогда так и не нашёл. Итак, вопрос: имеем табличку с many-to-many маппингом model1 <-> model2. Хочется это описать в терминах привычных для django отношений между моделями. Разумеется, описывалось бы это лучше всего стандартным полем ManyToManyField, если бы не одно “но” — по умолчанию такое поле создаёт таблицу (её название настраиваемо с помощью keyword-argument db_table) с полями, названными соответственно model1_id и model2_id. Так как схема БД задана заранее и не подлежит изменению, а названия полей в нашей таблице, разумеется, с упомянутыми не совпадают, потребовалось слегка нестандартное решение. Т.о. постановка задачи: есть модель Product с полем guid и модель Category с полем id. По умолчанию имеем таблицу с полями product_id, category_id, хотим: guid, manual_classification. И, собственно, простое решение:

class ManyToManyFieldWithCustomColumns(models.ManyToManyField):
    def _get_m2m_column_name(self, related):
        return related.model._meta.pk.db_column
    def _get_m2m_reverse_name(self, related):
        return self.db_column

После этого в модели Product определяем нужное поле в виде:

categories = ManyToManyFieldWithCustomColumns(Category,db_column='manual_classification',              
                                              db_table='product_classification')

Уверен, должно найтись и более элегантное решение, например усовершенствование в сторону имени колонки, обозначающей ключ текущей модели (в моём случае взял db_column от ключа, не меняя). Кто может предложить — велкам в коменты :)

pastebin под рукой

Простенький скрипт для отправки файлов в пастбин. Может кому пригодится. Код — внутри

 continue reading