Пока компилится GEOS

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

И это дает свободу - какие проекты выбирать, а какие - нет, с кем работать, а с кем - нет, какие инструменты использовать, а какие - нет. И это прекрасная свобода! Не давят амбиции - “Смогу ли я сделать этот мега-крутой проект???”. Не давит страх потерять единственного работодателя. Не нужно выбирать самую популярную и востребованную технологию на рынке.

И если у кого-то еще проскакивало такое ощущение и такая мысль, то я очень рад!

Первым делом, первым делом самолеты

Я программирую с 13 лет. Когда я познакомился с этой областью, то весь мир разделился для меня на две части: волнующий “настоящий” мир логики, цифр, технологий, объектов, фукнций, кристально четкого мышления, быстрого самообучения и вес остальной “обыденный мир” - штаны заштопать, душ принять. Я немного утрирую, потому что была и любовь, и всякие боевые искусства, и танцы, и много еще всего. Тем не менее было очень четкое такое разделение: это важно, перспективно, интересно, а это - не важно. Поэтому я научился варить какао два года назад, получил права год назад, а чинить водопроводные краны научился только вчера.

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

Подробнее о Celery

Пока проверял как Celery работает с MySQL в качестве брокера, материала набежало на большую статью. Сергей Лебедев, спасибо за этот замечательный вопрос!

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

django-compressor

Есть 2 задачи, связанные с .css и .js файлами, которые возникают при регулярном деплойменте веб-проектов. Первая - минимизация размера. Есть много утилит, позволяющих убрать комментарии и лишние пробелы, тем самым сократив размер файла, который скачивает браузер клиента. Вторая - версионирование. Если у вас файл со стилями доступен по ссылке /media/css/main.css, то при его обновлении многие клиенты продолжат пользоваться старой версией файла, сохраненной в кеше браузера.

Меня особо заботила именно вторая задача - я менял css в этом блоге, а он не обновлялся у посетителей до тех пор, пока они не нажимали в своих браузерах Ctrl+R (Cmd+R). Я нашел отличное django-приложение django-compressor, которое решает эту задачу следующим образом:

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

Celery - task queue/job queue based on distributed message passing

Определяем в питоновском коде задачи, которые должны выполняться асинхронно:

from celery.decorators import task

@task
def add(x, y):
    return x + y

Запускаем несколько обработчиков на разных серверах (все они связываются брокером, в качестве которого может выступать RabbitMQ, Stomp, Redis и большинство современных СУБД)

Запускаем задачу на асинхронное выполнение:

result = add.delay(4, 4)

Изначально celery создавался как специфическое django-app, а сейчас хорошо работает с любым питоновским проектом. Есть также поддержка “задач по расписанию” (cron-like).

Документация по celery на GitHub - http://ask.github.com/celery/getting-started/introduction.html

Удаленная работа

Я всегда был за работу в офисе. И коммуникации лучше, и общее поле команды, и разговоры за чаем, позволяющие наткнуться на нужную мысль. Когда мы делали Рисоваську, то сидели все в одном уютном офисе и нечеловечески трудились (нас даже начали называть киборгами, потому что не парились, не переживали, а дружно работали и выдавали гарантированно высокий результат). Все за исключением Стаса - он живет в Нижнем Новгороде (как мы шутили - в нижнем мире) и приезжал пару раз в месяц, а остальное время работал из дома. Я на Стаса немного хмурился - “вот тоже мне, все тут пашут, а он дома сидит”.

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

Sorting with keys

И снова цитата из Code Like a Pythonista:

Python 2.4 introduced an optional argument to the sort list method, “key”, which specifies a function of one argument that is used to compute a comparison key from each list element. For example:

def my_key(item):
    return (item[1], item[3])

to_sort.sort(key=my_key)

The function my_key will be called once for each item in the to_sort list.

You can make your own key function, or use any existing one-argument function if applicable:

str.lower to sort alphabetically regarless of case.
len to sort on the length of the items (strings or containers).
int or float to sort numerically, as with numeric strings like "2", "123", "35".

Чем это лучше написания собственной функции сравнения? Это быстрее на длинных списках. Потому что функция сравнения будет вызываться и соответственно вычисляться O(n*logn) раз, а key будет вычисляться O(n) раз и вызываться уже вычисленный O(n*logn) раз. Т.е. это как бы собственная функция сравнения с кешированием - сортировка ест чуть больше памяти, но выполняется чуть быстрее.

Нужно больше творить

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

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

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

Pip, virtualenv и virtualenvwrapper

В мейл-конференции Python-Dev всерьез обсуждают включение фукнциональности virtualenv в Python. Это очень удобный инструмент питониста, позволяющий легко работать на одной машине с разными версиями библиотек (например, с django 1.0.4 и django из транка), быстро передавать список зависимостей проекта другим разработчикам (а они смогут поставить все библиотеки одной командой), упрощают деплоймент.

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

Python quotes

Есть такой замечательный ресурс Python Quotes - 10 страниц отборных цитат из переписки в python-dev, вот некоторые из них:

This is Python! If we didn’t care what code looked like, most of us would probably be hacking in some version of Lisp – which already covered most of Python’s abstract semantics way back when Guido was just a wee snakelet frolicking in the lush Amsterdam jungle.
Tim Peters, 24 Apr 1998

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

Динамические формы Django

Неделю-две назад понадобилось мне сделать динамическую форму на Django - чтобы её поля создавались и настраивались в зависимости от данных, передаваемых в конструктор. Изучив исходники, я обнаружил, что сделать это легче легкого:

class DynamicForm(forms.Form):        
    def __init__(self, some_data, *args, **kwargs):
        super(DynamicForm, self).__init__(*args, **kwargs)
        for i, requisite in enumerate(some_data.requisites_list):
            regex = requisite['regexp']
            label = requisite['name']
            self.fields['requisite_%s' % i] = forms.RegexField(regex=regex, label=label)

Ключевой элемент это словарь self.fields - в нем хранятся все поля, которые были перечислены при объявлении класса формы.

PS. Написал это отдельным постом, потому что не первый раз вижу в Google Analytics, что на мой блог попадают люди по поисковой фразе “динамические формы джанго”.

Декораторы Python

В питоне есть 2 очень мощных инструмента мета-программирования: декораторы и метаклассы. Декораторы применяются к функциям, метаклассы - к классам. Хочу подробно остановиться на декораторах.

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

Ищу проекты

Успешно заканчивается очередной проект и я ищу новые проекты. В этот раз хочу поработать вне офиса - я готов приходить на 1-2 дня в неделю в офис на собрания, а остальное время работать удаленно.

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

Идея - регулярные встречи разработчиков в Москвe

Ребята, я тут подумал - а что если раз в месяц собираться на чашечку кофе и делиться опытом разработки, рассказывать про новые технологии и языки, про решение актуальных задач? Особенно интересны аспекты разработки с использованием динамических языков - Python, Ruby, Javascript. Мне это интересно тем, что можно познакомиться друг с другом, перенять опыт, узнать про новые вещи, позадавать вопросы.

Для начала можно встретиться в какой-то кафешке или коворкинге. Продолжительность 2-3 часа. Формат - небольшое знакомство, индивидуальные доклады, вопросы-ответы.

Кому-то еще это интересно, актуально?

Рассказ "Отпуск"

Скачал OmmWriter. Это Mac-only программа, которая разворачивается на весь монитор, включает спокойную музыку и дает тебе возможность писать тексты, не отвлекаясь на интернет-раздражители. Попробовал его в действии, получился мини-рассказ “Отпуск”.

###Отпуск

Шли как-то два зеленых человечка и шли. Радостно, без нервов. Шли и улыбались друг другу время от времени. Улыбнется один другому, другой это заметит, чуть улыбнется в ответ и глаза его чуть засияют. И дальше идут.

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

Блог-итоги 2009

17 ноября запустил свой программистский блог vorushin.ru. Главный результат - я с удовольствием пишу на профессиональные темы и получаю фидбек. Очень интересно писать все более длинные и красивые статьи, а не просто слепки мыслей-состояний того, что есть в голове. Как отмечали многие интервьюируемые в Coders at Work, самый полезный навык для программиста - умение хорошо писать на человеческом языке (русском, английском). С удовольствием заметил, что самыми читаемыми являются записи, которые просто не можешь не написать. Возникает идея, думаешь - надо будет как-нибудь про это написать, понимаешь что нужно писать прямо сейчас, пишешь в блокноте или текстовом редакторе, выкладываешь в блог, добавляешь ссылки и правишь ошибки, а потом видишь в Google Analytics, что на статью приходят уже из твиттера Ивана Сагалаева.

###Цифры за эти неполные полтора месяца

Самые читаемые статьи этого года:

За что вы любите программирование?

“За что вы любите программирование?”. Этот вопрос я задавал вчера друзьям-киборгам, а потом снова и снова задавал его себе. Я помню, что с самого детства мне нравились инструменты, которыми можно делать всякие забавные штуки. Как-то мама принесла с работы калькулятор, с такими красными циферками, который работал от сети. Как я к нему рвался! Вычислял суммы, произведения, брал квадратные корни!!! Магия цифр завораживала: если 1111 умножить на 1111, получалось 1234321; дробь 1/3 выглядела забавно с бесконечным числом троек; квадратные корни имели очень забавный вид (нерациональные числа).

Потом для меня начал открываться мир компьютеров - сначала это была цветастая книжка про то, как мальчик залез в компьютер и начал по нему путешествовать. О, как мне хотелось хотя бы потрогать настоящий компьютер, не говоря уже о том, чтобы что-то на нем поделать. Это был класс шестой (1992 год) и компьютеров ни у кого из знакомых не было, начинали только появляться игровые приставки Dendy. В самом начале девятого класса мы с друзьями наконец-то нашли место с двумя компьютерными классами. Сначала за компьютерами сидели по трое, потом кто-то отсеялся и мы уже сидели по двое, а через какое-то время мы перешли в следующий программистский поток и там уже у каждого был свой компьютер.

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

10 причин любить Python

  1. Не нужно ставить точки с запятыми и фигурные скобки повсюду (радует еще больше, чем при переходе с begin-end Паскаля к фигурным скобкам C).
  2. Очень легко читать чужой код (из-за п.1, стандартизированных отступов, компактности языка, а также благодаря специальному упору на читаемость в дизайне языка). По сравнению с C/C++, код Python читать в 10 раз легче.
  3. Google тоже его любит (GAE, Unladen Swallow, …)
  4. Язык все еще активно развивается (хоть и вышел в 1991 году)
  5. Вокруг языка образовалось очень активное и интересное сообщество
  6. На Python написан прекрасный веб-фреймворк Django
  7. Есть библиотеки на любой вкус (в отличии от, например, Erlang’a)
  8. Метаклассы и декораторы позволяют писать красивый декларативный код
  9. Богатые структурные и функциональные возможности позволяют делать очень многое без помощи ООП
  10. Язык спроектирован для того, чтобы человеку было приятно на нем программировать (а не только для того, чтобы машине было удобно его исполнять). Приятно, когда о тебе заботятся! А о машинах пусть позаботится Intel!

Контроль в широком смысле

Перевод свежего поста из блога Signals vs. Noise Control in its wider sense:

Многие компании стараются контролировать сотрудников. У них есть руководства и предписания. Они мониторят электронную почту. У них есть четкие правила - что разрешено и что запрещено.

Но “контроль” - непростая штука. Чем больше ограничения, тем скорее создается среда недоверия. Появляется противостояние Мы-Они. Люди начинают попытки обыграть систему.

Поэтому менеджерам, которые стремятся к “контролю”, стоит прислушаться к совету Шунрю Судзуки (Shunryu Suzuki), который он приводит в книге Zen Mind, Beginner’s Mind:

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

Язык программирования Python создан специально для киборгов

Эта тайна была раскрыта с помощью Google Image Swirl, вот ссылка на доказательство - http://image-swirl.googlelabs.com/html?q=python#377.

Страница: 4 из 5