Архив за Июнь 2011

exim4 relay на ubuntu

Очередная заметка типа how-to. Что бы в следующий раз не лазить по интернету и искать как выполнить эту же задачу, запишу лог проделанной работы сейчас.

Требуется поднять свой MTA для рассылки писем клиентам. Вот как это делается на ubuntu:

Сначала остановим стандартный sendmail и удалим его, что бы не возникло конфликтов в будущем.

$ sudo service sendmail stop
 * Stopping Mail Transport Agent (MTA) sendmail
sudo apt-get remove sendmail

Устанавливаем exim4

sudo apt-get install exim4-config exim4

Далее

Патч ejudge для algoprog

На algoprog.kz используется немного пропатченая версия ejudge.

Тестировал на версиях 2.3.16 и 2.3.17. Патч добавляет такие функции в еjudge-contests-cmd:

  • dump-languages - получить языки контеста
  • get-contest-status - получить статус контеста
  • get-contest-sched - время старта
  • get-contest-duration - длительность
  • get-contest-description - три предыдущих вместе + название контеста
  • submit-run-v2 - сабмит задачи не по short_name а по id

Дальше...

Размер папки в *nix

Как узнать размер папки из коммандной строки?

~/work$ ls -l
total 36
drwxr-xr-x  4 german german 4096 2011-01-12 17:15 android
drwxr-xr-x  5 german german 4096 2011-06-02 17:26 ant
drwxr-xr-x 13 german german 4096 2011-06-14 12:41 django
drwxr-xr-x  7 german german 4096 2011-04-14 16:59 envs
drwxr-xr-x 14 german german 4096 2011-05-24 13:30 irbisenv
drwxr-xr-x  8 german german 4096 2011-05-19 12:05 jee
drwxr-xr-x  5 german german 4096 2011-05-07 14:51 olymp
drwxr-xr-x  2 german german 4096 2011-06-03 14:56 python
drwxr-xr-x 14 german german 4096 2011-05-08 17:28 sandbox

Если так, то размера папки мы не узнаем. Всегда пишется одно и то же: 4096.

Вот одно из решений:

~/work$ du -sh django/
1.3G    django/

Когда файлов много это дело занимает несколько секунд.

Первый скринкаст

Мой первый скринкаст.

Создание простого проекта на Django.

SSP2011: Введение в Django

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

Я лишь приведу понравившеюся мне цитату из блога Романа Ворушина:

Если есть языки программирования, фреймворки, технологические подходы, позволяющие вместо 10000 строк писать, отлаживать и поддерживать всего 1000 строк, то это может быть огромным преимуществом, даже если более компактный язык менее распространен или менее производителен. Проектов, умерших от того, что они не справились с наплывом пользователей, намного меньше, чем тех, что угасли, так и не дойдя до бета-версии.

Читать дальше

SSP2011: программирование CGI

Перед тем как начать изучать различные web платформы было бы неплохо понять как делаются сайты без них. Скажем на голом python. В этой записи опишу маленький эксперимент с CGI на различных языках программирования.

Переходим в рабочую папку(у меня /home/german/work/python) и создаем текстовый test_python.cgi файл и пишем туда следующее:

#!/usr/bin/env python
print "Content-Type: text/html"
print
print """
<html><head></head><body><h1>Hello world!</h1></body></html>
"""

Если у вас Windows, то в начале файла должно быть путь к python.exe, например так #!C:\Python27\python.exe -u вместо #!/usr/bin/env python. На Windows я этого делать не пробовал, но думаю должно делаться аналогично.

Не уверен что это требуется, но делаем файл executable. В Windows так сделать нельзя.

chmod a+x ./test_python.cgi

Мы сделали запускаемый скрипт. Можно его запустить в командной строке. На выводе получим следующее.

Content-Type: text/html

<html><head></head><body><h1>Hello world!</h1></body></html>

Теперь нам как-то надо прикрутить этот скрипт к сайту, а точнее сделать этот скрипт доступным по какому-то url. При каждом обращении по какому-то url будет выполняться данный скрипт, а вывод будет отправляться клиенту.

Далее...

mysql-python в virtualenv

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

Всегда бывает нужен байндинг mysql-python. Если устанавливать с использованием pip надо чтобы в убунту были установлены пакеты libmysqlclient-dev и python-cxx-dev

sudo apt-get install python-cxx-dev
sudo apt-get install libmysqlclient-dev