Subscribe to GRead Subscribe to GRead's comments

cron for drupal

Если у вас есть сайт сделанный на Drupal, то вам наверно приходиться периодически заходить в админку и запускать на исполнение крон, файлик что исполняет набор обязательных периодических задач – очиска логов, индексирование материала и других. Но для уменьшения труда предлагаю такой маленький скринптик на Питоне(цель которого именно показать, что автоматизация зачастую простая задача, а с Питоном она просто сверх-простая ;) )

sites = (
   'http://screencast.org.ua/cron.php',
   'http://tutamc.com/cron.php'
)

from twill.commands import *

for site in sites:
   go(site)

Осталось лишь поставить у себя в задачах автоматический запуск данного скрипта раз в сутки или больше – это уже зависит от вашего друпаловского сайта.
Как видим, что для доступа к страницам использую библиотеку twill – она мне так понравилась, что я без нее сейчас почти не обхожусь, даже в таких миниатюрных проектах.

Когда какой-то вещью иногда мы не пользуемся хоть даже не большой строк – инфа о ней сразу забывается. И чтобы освежить в памяти основы очень хорошо подходит простой перечень всех возможных команд. Такой файлик я сделал для Mercurial, чтобы при необходимости вспомнить все команды. Надеюсь он вам также поможет:

Глобальные настройки
Файл – C:\Users\Spirit\.hgrc

[ui]
username = Roman Khomenko

#enable fetch
[extensions]
fetch =

Создание репозитария

$ hg clone https://presidentua@bitbucket.org/jespern/django-piston/
$ hg clone rep_from rep_to
$ hg init myproject

Read more »

Отладка в Django – одно удовольствие. Но есть один маленький почти незаметный минус, и заключается в том, что в окне где запущен отладочный сервер постоянно отвлекают сообщения о том что Django грузит медия-ресурсы. За эти сообщения отвечают такие строчки в файле django/core/servers/basehttp.py:

def log_message(self, format, *args):
    # Don't bother logging requests for admin images or the favicon.
    if self.path.startswith(self.admin_media_prefix) \
                      or self.path == '/favicon.ico':
        return
    sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format % args))

Конечно патчить ядро не очень красиво, но посколько это ни на что не влияет и для домашнего использования сойдет. Так что меняем эту функцию на следующую:

def log_message(self, format, *args):
    # Don't bother logging requests for admin images or the favicon.
    if self.path.startswith(self.admin_media_prefix) \
                          or self.path == '/favicon.ico':
        return
    if self.path.startswith('/media/') \
                          or self.path.startswith('/__debug__/'):
        return
    sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format % args))

Я по этой фишке также написал тикет в Джанго, может когда-то такую возможность добавлять в админку.

Django and Redis

Последнее время резко возник интерес к базам данных вида key-value. Я причину этого пока что не вывел. Но, все равно пошел в ногу моде, и пока не пожалел.

База данных key-value, эта та которая не поддерживает ничего кроме записи значения по ключу и доставания этого значения. Тоесть мы можем написать: по ключу “а” записать “123″, а потом указать: отдай мне то что лежит по ключу “а”. Вот и все. Лишь 2 простейшие операции. И с ними иногда несколько труднее, ведь нету сортировок, выборок, групировок и других радостей жизни и любимого SQL. Но не спеши кричать свое Фу, пока не рассмотрели плюсы.

Вот пусть у тебя есть система где 1000 пользователь онлайн, и тогда ты понимаеш смысл маштабирования и оптимизации. Но ведь количество пользователь может расти. А маштабирование обычной SQL базы не тривиальное задание и скоро можеш впереться в стенку, дальше которой не перепрыгнеш. Этот пределе конечно далеко, но все же…

И при достижении этого предела подумай о key-value база данных и очень класном представителе Redis. Преимуществам которого есть константое время ответа, тоесть независимо от количесва обьема ответ будет в одного и тоже очень малое время. Второе преимущество это маштабируемость – если нагрузка увеличилась – ставим еще один сервер. Еще увеличилась – еще один. А Redis уже сам автоматически все маштабирует без какой либо помощи.
Read more »

DVCS for Python

Сейчас наверно трудно найти человека не слишавшего о системе контроля версий. Но в большинстве фирмы используют SVN и не спешат переходить на распределенные системы, а может они просто не могут определиться какую систему контроля версий использовать… И где-то год назад это был сложный выбор, но не сейчас. Ведь из распределенных систем контроля версий сейчас популярны лишь Mercurial и Git. И выбор стоить именно между ними.

Я в своей практике использовал обе системы и существенных различий между ними нету, но учтем некоторые факты:
1. Mercurial, написан на Питоне.
2. Гугл на Google Code поддерживаем именно Mercurial.
3. Mercurial несколько проще в обучении и использовании.

Так что если вы еще колеблитесь то учите и используйте Mercurial, а при необходимости перейти на Git не составить труда.

В ближайшее время я напишу маленькое руководство о том как правильно пользоваться Mercurial.

Python and Alarm

Я человек снолюбимый, и с утра меня тяжело разбудить. Понимаю, что это плохая привычка, но все же не могу от нее отказаться. Впрочем чаще всего мне и не нужно никуда спешить, но просыпаться каждый день в 12 часов, тоже как-то лиш лишняя трата времени. Посему будильник нужен, но его подобрать было тяжело.
Сперва заюзал советский будильник. Он конечно будил, но я понял, что если будет будить хотя бы неделю – начну заикаться ;) .
Дальше использовал телефон, и где-то несколько недель все было супер, вроде и не сильно резко будил, но это все очень быстро прошло, и снова меня никакая мелодия с телефона уже не будила.
И только после всех этих мучения я вспомнил о Питоне и немного полазил нашел библиотеку для управления ВинАмпом(кстати, АИМПом также нормально управляется) – http://www.shalabh.com/software/about_winamp_py.html.
И уже через минут 10 был готов такой скриптик на Python:

import time
import os
import winamp

print 'Good Morning'

#открываем плайлист, чем запускаем винамп
print '# start playing'
os.startfile(r'D:\musik\Futurama\futurama.PLC')
#ждем пока он запустится
time.sleep(3)

#подключаемся к винампу
w = winamp.winamp()
#плавно увеличиваем громкость
for i in xrange(0,255,5):
    print '# set volume on %s' % i
    w.setVolume(i)
    time.sleep(5)

Итак, этот скрипт сначала запускаем мой плейлист и устанавливает громкость в 0. А дальше понемножку его увеличиваем, чем обеспечиваем мне спокойный подьем.

Сегодня продолжим знакомство с Django и наконец то рассмотрим базовый кирпич, а именно приложение(application) на примере создания приложения contact, для отсылки каких-то сообщений администрации. Причем напомню что этот цикл практический, в нем я почти не рассказываю почему, лишь говорю как, потому что я все равно не напишу лучше чем в документации: http://docs.djangoproject.com/en/dev/

Разработка каждого приложения начинается с команды:

manage.py startapp contact

Где contact – названия приложения.
В результате будет создана папка contact со следующими файлами:

- models.py
- views.py
- __init___.py

Read more »

После двух частей мы уже можем сделать простой статической сайт. И сегодня поговорим как залить все это добро на сервак и настроить его. Правда сервак настроим на легком уровне, без оптимизаций и т.д. Главное запустить, а потом уже можно допиливать по ходу

Итак, имеем SSH доступ к серверу Ubuntu 8.04. Сперва перейдем в root и обновим все пакеты


su root
apt-get update
apt-get upgrade

Read more »

Вторая часть туториала о Django, где опять буду расказывать как создается полнофункциональный сайт. Это не подробнейшее руководство – за этим смотрите документацию на djangoproject.com и читайте книгу djangobook.com (на русском — djbook.ru). Это всего лишь практический туториал. И сегодня расскажу о:

  • статические файлы
  • статические страницы — flatpages
  • шаблоны
  • google_analytics
  • debug_toolbar

Read more »

Все Django туториалы хороши для ознакомления, но чтобы сделать полностью рабочий проект на Django размером больше чем блог – такого туториала я не встречал. И посему в серии небольших статтей напишу о приблизительно таком:

  • создание проекта и его настройка
  • админка
  • flatpages, их использование
  • шаблоны
  • установка дополнительных снипетов
  • модель, работа с БД
  • мини-блог сайта
  • работа с формами
  • регистрация обычная
  • регистрация OpenID
  • управления контентом юзера
  • настройка все на продакшине

Это некие основные пункты о которых буду рассказывать. Для понимания материала нужно понимание основ Python, Web-разработки.
Read more »