Oct 20, 2011

Expire page from cache

from django.core.cache import cache
from django.http import HttpRequest
from django.utils.cache import get_cache_key

def expire_page(path):
    request = HttpRequest()
    request.path = path
    key = get_cache_key(request)
    if cache.has_key(key):   
        cache.delete(key)
http://djangosnippets.org/snippets/936/

Oct 19, 2011

Django servers benchmarks

fcgi vs. gunicorn vs. uWSGI
Benchmark of Python WSGI Servers

A Django setup

Using Nginx and Gunicorn
http://senko.net/en/django-nginx-gunicorn/

Using Nginx and uWsgi
http://grokcode.com/784/how-to-setup-a-linux-nginx-uwsgi-python-django-server/
http://www.eshlox.net/en/2012/09/11/nginx-uwsgi-virtualenv-and-django-ubuntu-1204/

A skeleton Django project

http://senko.net/en/django-quickstart-skeleton-project/
https://github.com/senko/dj-skeletor

DJ Skeletor is a skeleton Django project handy for bootstrapping new empty projects.

The repository contains an empty, relocatable Django project with South, Django Debug Toolbar and Sentry apps set, and with provisions for test and production settings.

HTML5 Boilerplate

http://html5boilerplate.com/ - A rock-solid default for HTML5 awesome.

Bootstrap, from Twitter

http://twitter.github.com/bootstrap/

Bootstrap is a toolkit from Twitter designed to kickstart development of webapps and sites.It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more.

Модель акторов

http://jodal.github.com/pykka/
http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2


Модель акторов исходит из такой философии, что всё вокруг является акторами. Это похоже на философию объектно-ориентированного программирования, где всё вокруг является некоторыми объектами, но отличается тем, что в объектно-ориентированном программировании программы, как правило, выполняются последовательно, в то время как в модели акторов вычисления по своей сути совпадают по времени.

Актор является вычислительной сущностью, которая в ответ на полученное сообщение может одновременно:
  • отправить конечное число сообщений другим акторам;
  • создать конечное число новых акторов;
  • выбрать тип поведения, которое будет использоваться для следующего сообщения в свой адрес.

Может существовать произвольная последовательность вышеописанных действий, и все они могут выполняться параллельно.

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

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

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

Oct 16, 2011

Virtualenv + pip

Install easy_install, pip, virtualen

sudo apt-get install python-setuptools python-virtualenv python-pip

Create virtual environment

$ virtualenv --no-site-packages env # from version 1.7 --no-site-packages default behavior
$ source env/bin/activate

(env)$ export PYTHONPATH=  # sometimes required
(env)$ pip install django
# ...
(env)$ pip freeze > requirements.txt
(env)$ deactivate

$ virtualenv --no-site-packages env2
$ source env2/bin/activate
(env2)$ pip install -r requirements.txt

Pip

# concrete package version
(env)$ pip install ipython==0.11

# archive link
(env)$ pip install -f http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.0/matplotlib-1.0.0.tar.gz matplotlib

# install for concrete python interpreter version
sudo pip install ipython -E python2.5

Bonuses

List all packages with requirements:
pip list --local | awk '{print $1}' | xargs pip show | grep -v -e '^Location' -e '^Requires: $'
yolk - list installed packages
(env2)$ pip install yolk
(env2)$ yolk -l
vanity - list available versions
(env2)$ pip install vanity
(env2)$ vanity django -v

PyCharm

If you use PyCharm you’ll want to set up your virtualenv there for your project. Edit your project settings. Select Python Interpreter -> Add -> Specify Other… Add python from your virtual_env (env/bin/python)