Производственная необходимость (да и любопытство) требует изучения сетевых возможностей python. Наткнулся на фреймворк Twisted, значительно упрощающий асинхронное сетевое программирование. Ням-нямка.
PS: Отдельное спасибо программистам IBM за добротные статьи, позволяющие быстро въехать в новую технологию.
понедельник, 6 декабря 2010 г.
Простой пингер с использованием джанго
Задача: периодически пинговать N произвольно заданных серверов, статус их доступности публиковать в вебе.
За добавление/редактирование/удаление хостов будет отвечать джанго с ее удобной админкой. Создаю джанго-приложение dpinger, в нем создаю две простые модели:
Для Host еще создаем простую админку, для Report она не нужна. Так же делаю простой view, выводящий последние N сообщений для каждого хоста:
Дальше немного интереснее - собственно пингер.
Джанго позволяет создавать собственные команды для manage.py, что является очень вкусной фичей, т.к. позволяет использовать всю мощь джанго в обычном скрипте.
В приложение dping создаем директорию management, в ней еще одну - commands, а там уже создаем скрипт ping.py. Соответственно команда наша будет называться ping и будет вызываться так:
python /path/to/project/manage.py ping
В ping.py обязательно должен быть класс Command, наследник BaseCommand, а в нем должен быть определен метод handle(), собственно срабатывающий при вызове команды.
Теперь нужно как-то отправлять пинги до хостов. В питоне реализован raw ICMP, но если пойти этим путем, то скрипту потребуются права рута (например, setuid root). Это меня несколько не устраивает, потому что ситуации разные бывают, да и помнить про это требование не хочется. Поэтому пошел более простым путем: вызываю комманду ping и читаю ее вывод.
Вот такой вот получился простенький пингер. Надеюсь кому-то эта информация окажется полезной.
За добавление/редактирование/удаление хостов будет отвечать джанго с ее удобной админкой. Создаю джанго-приложение dpinger, в нем создаю две простые модели:
class Host(models.Model):
domain_or_ip = models.CharField(u'Доменное имя или IP-адрес', max_length=255)
desc = models.TextField(u'Краткое описание')
full_desc = models.TextField(u'Полное описание', null = True, blank = True)
class Meta:
verbose_name = u'хост'
verbose_name_plural = u'хосты'
#сообщения о доступности хостов
class Report(models.Model):
host = models.ForeignKey(Host)
status = models.CharField(u'Статус', max_length=255)
date = models.DateTimeField(u'Дата/Время', auto_now = True)
class Meta:
verbose_name = u'сообщение'
verbose_name_plural = u'сообщения'
Для Host еще создаем простую админку, для Report она не нужна. Так же делаю простой view, выводящий последние N сообщений для каждого хоста:
from django.shortcuts import render_to_response
from django.db.models import Q
from models import *
def lastreports(request, count):
hcount = int(count) * Host.objects.count()
reports = Report.objects.all().order_by('-date')[:hcount]
return render_to_response('lastreports.html', {'reports' : reports, 'count' : hcount})
Дальше немного интереснее - собственно пингер.
Джанго позволяет создавать собственные команды для manage.py, что является очень вкусной фичей, т.к. позволяет использовать всю мощь джанго в обычном скрипте.
В приложение dping создаем директорию management, в ней еще одну - commands, а там уже создаем скрипт ping.py. Соответственно команда наша будет называться ping и будет вызываться так:
python /path/to/project/manage.py ping
В ping.py обязательно должен быть класс Command, наследник BaseCommand, а в нем должен быть определен метод handle(), собственно срабатывающий при вызове команды.
Теперь нужно как-то отправлять пинги до хостов. В питоне реализован raw ICMP, но если пойти этим путем, то скрипту потребуются права рута (например, setuid root). Это меня несколько не устраивает, потому что ситуации разные бывают, да и помнить про это требование не хочется. Поэтому пошел более простым путем: вызываю комманду ping и читаю ее вывод.
# -*- coding:utf-8 -*-
from django.core.management.base import BaseCommand, CommandError
from dping.dpinger.models import Host, Report
import subprocess
class Command(BaseCommand):
args = 'None'
help = 'Ping hosts and write reports'
def ping(self, domain_or_ip):
all_is_good = " 0% packet loss"
all_is_bad = "100% packet loss"
dns_error = "ping: unknown host"
ping = subprocess.Popen(
["ping", "-c", "1", domain_or_ip],
stdout = subprocess.PIPE,
stderr = subprocess.PIPE
)
out, error = ping.communicate()
if all_is_good in out:
return u'Все отлично'
elif all_is_bad in out or dns_error in out:
return u'Невозможно достучаться'
else:
return u'Куда-то пропадают пакеты'
def handle(self, *args, **options):
hosts = Host.objects.all()
for host in hosts:
report = Report.objects.create(host=host, status='')
report.status = self.ping(host.domain_or_ip)
print host.domain_or_ip + ": " + report.status #на всякий случай
report.save()
Вот такой вот получился простенький пингер. Надеюсь кому-то эта информация окажется полезной.
среда, 14 июля 2010 г.
Subclipse
Решил попробовать использовать Subclipse (плагин Eclipse для работы с Subversion). Хорошая вещь. Консоль - это круто, но гуй часто может быть нагляднее, проще и доступнее. В общем буду пользоваться.
пятница, 2 июля 2010 г.
Вебнутый мир
В принципе я использую практически только веб-утилиты и стараюсь и дальше двигать себя инертного в этом направление (уж очень нравится быть независимым от места пребывания). Онлайн-Гимп и серьезная среда разработки онлайн - вот чего мне не хватает для счастливой жизни (ну и канала потолще и подешевле ;)). Очень жду Bespin.
вторник, 22 июня 2010 г.
Галерея (друпал + image + jquery_lightbox)
Задача: к материалам сайта (нодам в терминологии друпала) прикрепляется минигалерея, отображающаяся вместе с самим материалом. Это все работает в Drupal.
В первую очередь я наткнулся на модуль Image, который позволяет прикреплять к ноде изображения, составляющие наши минигалереи. Но функционала этого модуля оказалось недостаточно, потому что он не давал возможности быстро переключаться между изображениями, прикрепленными к одной ноде (назад/далее), плюс клики на иконки ведут к нодам изображений, а мне нужно было просто открывать оригинальное изображение в новом окне.
В принципе такой функционал дает другой друпаловский модуль - Lightbox2, но я понятия не имею как достаточно простым образом прикрепить его галереи к другим нодам. Так что я воспользовался тоже lightbox'ом, но не друпаловским модулем, а плагином к jquery.
Короткий код:
Плюс чуток ковыряния в коде lightbox'а: почему-то его создатели посчитали, что кнопки навигации, появляющиеся только при наведение курсора - это круто, хотя лично мне кажется, что большинство леммингов, зашедших на этот сайт в первый момент оказалось бы в жестком ступоре.
Вот и получилась прикрепляемая галерея.
В первую очередь я наткнулся на модуль Image, который позволяет прикреплять к ноде изображения, составляющие наши минигалереи. Но функционала этого модуля оказалось недостаточно, потому что он не давал возможности быстро переключаться между изображениями, прикрепленными к одной ноде (назад/далее), плюс клики на иконки ведут к нодам изображений, а мне нужно было просто открывать оригинальное изображение в новом окне.
В принципе такой функционал дает другой друпаловский модуль - Lightbox2, но я понятия не имею как достаточно простым образом прикрепить его галереи к другим нодам. Так что я воспользовался тоже lightbox'ом, но не друпаловским модулем, а плагином к jquery.
Короткий код:
$('document').ready(function(){
$('.all-attached-images a').each(function(){
$(this).attr('href', replace_string($(this).children('img').attr('src'), 'thumbnail.', ''));
});
$('.all-attached-images a').lightbox();
});
Плюс чуток ковыряния в коде lightbox'а: почему-то его создатели посчитали, что кнопки навигации, появляющиеся только при наведение курсора - это круто, хотя лично мне кажется, что большинство леммингов, зашедших на этот сайт в первый момент оказалось бы в жестком ступоре.
Вот и получилась прикрепляемая галерея.
среда, 16 июня 2010 г.
Без бумажки ты какашка
Вопросы к службе поддержки Microsoft:
1. Возможно ли восстановить сертификаты подлинности СОА для трех
компьютеров?
2. Если утеряны сертификаты подлинности СОА, то использование уже
активированных ОС Win XP HE SP3 на этих компьютерах нарушают ли условия
лицензии? И как можно доказать легальность этих ОС в случае проверок?
3. В случае если допускается использование ОС Win XP HE SP3 на этих трех
компьютерах без сертификата подлинности СОА, то переустановка ОС на
компьютерах недопустима (из-за отсутствия наклейки с ключом)?
Ответ:
Сертификаты подлинности являются уникальными. Они могут быть восстановлены только в том случае, если были повреждены сборщиком системы во время предустановки или во время доставки до клиента. При повреждении сертификата подлинности по вине конечного пользователя, восстановить СОА невозможно.
В том случае, если СОА утерян или очень сильно поврежден, программное обеспечение считается не лицензионным, необходимо приобретать новую лицензию.
Хорошо хоть пока что, если потерял паспорт, не надо сразу идти вешаться. Так же радует, что если ты потерял документы на телевизор/утюг/холодильник/стиралку, то это пока еще не означает сразу же, что ты их украл.
1. Возможно ли восстановить сертификаты подлинности СОА для трех
компьютеров?
2. Если утеряны сертификаты подлинности СОА, то использование уже
активированных ОС Win XP HE SP3 на этих компьютерах нарушают ли условия
лицензии? И как можно доказать легальность этих ОС в случае проверок?
3. В случае если допускается использование ОС Win XP HE SP3 на этих трех
компьютерах без сертификата подлинности СОА, то переустановка ОС на
компьютерах недопустима (из-за отсутствия наклейки с ключом)?
Ответ:
Сертификаты подлинности являются уникальными. Они могут быть восстановлены только в том случае, если были повреждены сборщиком системы во время предустановки или во время доставки до клиента. При повреждении сертификата подлинности по вине конечного пользователя, восстановить СОА невозможно.
В том случае, если СОА утерян или очень сильно поврежден, программное обеспечение считается не лицензионным, необходимо приобретать новую лицензию.
Хорошо хоть пока что, если потерял паспорт, не надо сразу идти вешаться. Так же радует, что если ты потерял документы на телевизор/утюг/холодильник/стиралку, то это пока еще не означает сразу же, что ты их украл.
среда, 9 июня 2010 г.
Если я не видел радио-волн, то значит их нет
Наша система высшего образования далека от совершенства, а преподаватели зачастую далеки от профессионального знания их предмета, увы.
Делал пару работ (мудловские модули) для студентов моего ВУЗа и моей кафедры, защищающихся в этом году. Завкафедры (Владимир Феохарович, привет!) сделал пару "весомых" замечаний:
- что такое Quanta 3.5+ и Dia он не знает, а значит они в дипломе не должны упоминаться;
- его не устраивает x вместо номера минорного релиза в версии требуемого ПО (например, ему не понравилось: MySQL 5.0.x).
ппц
Делал пару работ (мудловские модули) для студентов моего ВУЗа и моей кафедры, защищающихся в этом году. Завкафедры (Владимир Феохарович, привет!) сделал пару "весомых" замечаний:
- что такое Quanta 3.5+ и Dia он не знает, а значит они в дипломе не должны упоминаться;
- его не устраивает x вместо номера минорного релиза в версии требуемого ПО (например, ему не понравилось: MySQL 5.0.x).
ппц
вторник, 1 июня 2010 г.
На сладкое
В детстве нас вечно заставляют съесть сначала что-то невкусное, а только потом допускают до сладкого. Вот и я сейчас в таком же положение: есть куча неинтересных проектов (верстка под цмс), есть интересный проект, который наконец-то позволит мне написать что-то полностью свое на джанго, но пока неинтересные не закончу за него браться возможности нет :(
пятница, 28 мая 2010 г.
Антипатия
При одном только упоминании Joomla у меня начинает подергиваться глаз. Я терпеть не могу эту CMS, хоть мне и приходится с ней работать.
Я считаю, что у этой системы просто ужасное юзабилити. Самый страшный, для меня, пример - пункт меню создается в 6-7 кликов. Я понимаю, что наш мир не идеален, но так не должно быть. Я даже интересовался на русскоязычном джумлофоруме по этому поводу: я дурак или лыжи не едут. Нет, ну мне предложили несколько вариантов, которые удобоваримы, когда создаешь действительно много пунктов меню. (В том числе предложили все делать на локалхосте, ибо быстрее). Ок, подумал я, это иногда может упростить жизнь, но почему все же не сделан нормальный способ создания пункта меню? ...
Еще мне непонятно почему при схожем наборе функционала друпал аплоадится на порядок быстрее? Нет, ну т.е. мне понятно технически почему это происходит, меня скорее интересует философская сторона вопроса :)
PS: SOAD продолжает лидировать в качестве ночной музыки, но надо искать что-то еще.
Я считаю, что у этой системы просто ужасное юзабилити. Самый страшный, для меня, пример - пункт меню создается в 6-7 кликов. Я понимаю, что наш мир не идеален, но так не должно быть. Я даже интересовался на русскоязычном джумлофоруме по этому поводу: я дурак или лыжи не едут. Нет, ну мне предложили несколько вариантов, которые удобоваримы, когда создаешь действительно много пунктов меню. (В том числе предложили все делать на локалхосте, ибо быстрее). Ок, подумал я, это иногда может упростить жизнь, но почему все же не сделан нормальный способ создания пункта меню? ...
Еще мне непонятно почему при схожем наборе функционала друпал аплоадится на порядок быстрее? Нет, ну т.е. мне понятно технически почему это происходит, меня скорее интересует философская сторона вопроса :)
PS: SOAD продолжает лидировать в качестве ночной музыки, но надо искать что-то еще.
понедельник, 24 мая 2010 г.
Две головы лучше одной...
... а два буфера обмена лучше одного.
Иногда задумываюсь о том, как же бедные пользователи Windows живут без возможности скопировать что-то щелчком средней кнопки мыши, да еще и обходятся одним буфером обмена. Когда же попадаю за машину с виндой, начинаю чертыхаться из-за невозможности вставить текст так, как я привык его вставлять :)
PS: При этом я прекрасно понимаю, что пользователям Windows глубоко плевать на эти мои переживания, они живут себе и без второго буфера обмена, причем многие живут даже припеваючи. Но это заметка для меня, а не агитация для публики :)
Иногда задумываюсь о том, как же бедные пользователи Windows живут без возможности скопировать что-то щелчком средней кнопки мыши, да еще и обходятся одним буфером обмена. Когда же попадаю за машину с виндой, начинаю чертыхаться из-за невозможности вставить текст так, как я привык его вставлять :)
PS: При этом я прекрасно понимаю, что пользователям Windows глубоко плевать на эти мои переживания, они живут себе и без второго буфера обмена, причем многие живут даже припеваючи. Но это заметка для меня, а не агитация для публики :)
воскресенье, 23 мая 2010 г.
Django. Первые сумбурные впечатления
Вроде нравится. Мне, правда, особо не с чем сравнивать, до того писал модули для Drupal и Moodle, но это совсем другое. Про первые самописные php-скрипты и написанную "cms" вспоминать вообще не хочется :)
Естественно в ходе обучения и попутно работы над одним проектом много гуглю. Поражает насколько много полезной русскоязычной инфы попадается на http://softwaremaniacs.org, просто таки кладезь мудрости. Иван Сагалаев молодец. Думаю ему все равно, что я о нем думаю, но мне хотелось бы это отметить для себя. Кстати, мне понравились его "эльфы", которых он выдает зарегавшимся посетителям.
Питон и Джанго хотел изучить давно, а тут мне попался заказ на доработку сайта, на джанго. Там был выбор: то ли переносить все на уже знакомый мне drupal, то ли в спешном порядке и на ходу изучать django и python. Я выбрал второе, ибо это интереснее. Плюс поставил перед собой задачу не торопиться и не рожать в спешке костылей. А то у меня такое бывает: тороплюсь, что-то надо срочно сделать, и я вместо того, что бы все же почитать доки и сделать правильно, делаю быстро (ну или якобы быстро). Получается так, что потом очень за себя стыдно. Кстати, так написан мой модуль для мудла, все надеюсь его переписать с нуля, да руки не доходят.
Естественно в ходе обучения и попутно работы над одним проектом много гуглю. Поражает насколько много полезной русскоязычной инфы попадается на http://softwaremaniacs.org, просто таки кладезь мудрости. Иван Сагалаев молодец. Думаю ему все равно, что я о нем думаю, но мне хотелось бы это отметить для себя. Кстати, мне понравились его "эльфы", которых он выдает зарегавшимся посетителям.
Питон и Джанго хотел изучить давно, а тут мне попался заказ на доработку сайта, на джанго. Там был выбор: то ли переносить все на уже знакомый мне drupal, то ли в спешном порядке и на ходу изучать django и python. Я выбрал второе, ибо это интереснее. Плюс поставил перед собой задачу не торопиться и не рожать в спешке костылей. А то у меня такое бывает: тороплюсь, что-то надо срочно сделать, и я вместо того, что бы все же почитать доки и сделать правильно, делаю быстро (ну или якобы быстро). Получается так, что потом очень за себя стыдно. Кстати, так написан мой модуль для мудла, все надеюсь его переписать с нуля, да руки не доходят.
Рабочая музыка и немного утренней романтики
Заметил, что лучше всего мне работается ночью под System of a Down. Не засыпаю. Под Металлику, например, засыпаю, причем даже кофе надолго не спасает.
И еще. Недавно видел рассвет. Это красиво. Сто лет его не видел. Чем-то он отличается от заката. Закат, наверное, несколько эмоционально более грустный что-ли. А рассвет прямо таки бодрит.
И еще. Недавно видел рассвет. Это красиво. Сто лет его не видел. Чем-то он отличается от заката. Закат, наверное, несколько эмоционально более грустный что-ли. А рассвет прямо таки бодрит.
Подписаться на:
Сообщения (Atom)