Учиться тяжело
Хорошее обучение - это выход за границы возможного, делание того, чего не делал раньше. Можно каждый день бегать 3 километра в комфортном режиме и не особо прогрессировать (иногда это нормально, если цель - расслабление после дневной "вахты" за компьютером), а можно каждый раз стараться пробежать немного быстрее и это непросто ...
Сегодня мне очень удачно попался замечательный комментарий про ощущение себя самым умным и про то, как решать действительно сложные задачи. Эти два вопроса очень важны для меня в последнее время, поэтому воспользуюсь таким прекрасным поводом поделиться своими находками.
Быть "самым умным"
Я закончил школу с отличием. И институт тоже. Побеждал ...
Этой осенью я обычно просыпаюсь в 5-6 часов утра, чтобы учиться в ai-class.com и ml-class.org. Позади 6 из 10-ти учебных недель. Уже десяток раз я восклицал "Ну почему же я не начал так учиться год назад?!". Эти курсы изменили меня - открыли новые интересные предметные области и помогли вспомнить ...
С большим удовольствием читаю книгу "Programmers at work", выпущенную в 1989 году. Думаю, что она понравится всем тем, кому понравилась книга "Coders at work" (также известная как "Кодеры за работой"). Ниже - некоторые цитаты, которые я уже подчеркнул (а я еще в самом начале книги).
SIMONYI:
I think the listing gives ...

Понедельничной ночью 1-го августа, примерно в 03:30 пять человек потихоньку укладывали ноутбуки в свои рюкзаки и выходили из офиса чтобы разъехаться по домам. Кто-то на такси, кто-то на своей машине. Еще трое ушли несколькими часами раньше. Закончились двое суток напряженного труда над созданием проектов в рамках конкурса Django Dash ...
Вчера Лев рассказывал про то, что отличает Силиконовую долину от России-Украины и что нам делать чтобы появилась среда, благоприятная для стартапов.
Горизонтальная коммуникация
Первым большим сдерживающим фактором на постсоветском пространстве является остутствие горизонтальной коммункации.
Вертикальная коммуникация: разработчик - менеджер - сейлз - клиент.
Горизонтальная: программист компании Luxoft - программист компании Grammarly - студент университа - программист ...
Вчера ходили с @vseloved и @matveym на выступление Льва Валкина про функциональное программирование в целом и Erlang в частности. Кратко запишу основные тезисы, которые мне очень актуальны.
Новый набор инженерных принципов, непривычных для императивных языков
Функциональные языки дают возможность поработать с другими способами построения программных систем. Эти новые способы позволяют ...
Меня давно интересует вопрос "Стоит ли мне работать руководителем?". В прошлую пятницу я был в Москве и разговаривал там с моим одноклассником Костей Кузнецовым. Много лет назад он был для меня проводником в мир компьютеров. Костя сам является отличным программистом, а сейчас руководит командой из 20 человек и скоро станет ...
Вчера начал работать над новым большим проектом. В нем понятно что нужно получить на выходе, но совершенно не понятно как это сделать. Очень много нетехнических задач, исследований, экспериментов. И я чувствую страх. Страх, что "вот, блин, непонятно что-именно программировать, нужно самому все придумывать".
Но у меня есть опыт таких проектов ...
Django Dash - международный конкурс, в котором компактные спецназ-команды за 48 часов создают полноценный проект. Правила простые:
- бОльшая часть кода должна использовать django
- никакого кода до соревнования (только идеи и бумажные прототипы)
- команда не больше 3 человек
- git или mercurial для хранения исходных кодов
- ваш проект должен быть open source
- можно ...
Недавно я писал про то, как работать с документами LibreOffice из питона. Я сейчас работаю над исследовательским проектом, в котором django application обращается к LibreOffice через pyuno. В этом проекте натолкнулся на неприятную ошибку - ./manage.py shell при выполнении любых связанных с pyuno методов выдает сообщение "SystemError: pyuno runtime is ...
Вчера в разговоре с коллегой пришел образ гармоничного движения к большой цели. Утром каждого дня нужно находить/создавать интересный маршрут на сегодня. Такой чтобы:
- продвигаться в сторону большой цели,
- к ночи прийти в хорошее, удобное для ночлега место,
- получать удовольствие от самого маршрута.
Всё как в хорошем походе. У тебя ...
В проекте Grammarly Handbook, про который я писал вчера, грамматические карточки из формата MS Word нужно было конвертировать в какой-то внутренний формат, чтобы в этом формате было легко добавлять новые карточки и редактировать существующие. Кроме того, нужно было ограничить функционал редактора карточек, чтобы не было чрезмерного разнообразия форматирования и, как ...
Пару недель назад для проекта Grammarly Handbook понадобилось импортировать много форматированного текста из документов MS Word. Текст находился в 40 файлах размером от одной до двадцати страниц. Первые несколько страниц я перенес вручную и несколько утомился - механическая работа меня не очень радует. Начал искать возможность читать вордовские документы из Питона ...
А старый добрый способ форматирования строк с помощью % в Python 3000 всё-таки оставили!
~ > workon python3
(python3)~ > ipython
Python 3.2 (r32:88445, Feb 28 2011, 11:06:14)
In [1]: 'Good old %s still works in Python 3!' % 'string formatting'
Out[1]: 'Good old string formatting still works in Python ...
Python - самый популярный язык программирования после Java, C, C++ (именно в таком порядке).


Источник - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Наконец-то я понял, почему пишут так
def item_view(request, id):
item = get_object_or_404(Item, id=id)
if request.method == 'POST':
form = ItemForm(request.POST, instance=answer)
if form.is_valid():
form.save()
return HttpResponseRedirect(item.get_absolute_url())
else:
form = ItemForm(instance=item)
return render('item.html', {'item': item, 'form': form})
и не пишут ...
Я наблюдаю разительное отличие между блогами программистов и блогами других людей. Независимо от первоначальных причин по которым программисты начали вести блог, главное что они делают через блоги - говорят с другими программистами.
Не выражают свои эмоции, не самовыражаются, не зарабатывают, не продвигают, не продают. А продолжают традицию обмена новыми идеями, полученным ...
Блог
- Написал 31 статью (эта - юбилейная 32-я) и 96 постов со ссылками
- Пришли почитать 13700 человек, начитали около 50000 просмотров страниц
- 258 человек читают /feeds/entries/ через Google Reader
- Переехал из Amazon EC2 в Linode (с восточного побережья США в Лондон), странички должны открываться заметно быстрее
Жизнь
Первый use-case использования документоориентированных БД, который не дает мне покоя.
Relational Solution
- Use a relational database, with a normalized or semi-normalized schema.
- When rendering a response, run a handful of queries and then aggregate the data for the object.
- Cache the resultant aggregate object either on a TTL or do ...
http://codeascraft.etsy.com/ - компания Etsy делится своим опытом в разработке, мониторинге и прочих областях
http://www.laughingmeme.com/ - когда-то был архитектором Flickr'a, а теперь работает VP of Engineering at Etsy
Короткая мысль:
Базовых принципов построения сложных систем немного. MVC, разделение на шаблоны и логику, разделение на сервера приложений и сервера данных, ... А вот инструментов для реализации каждого из принципов очень много. Много редакторов, шаблонных языков, key-value datastores, веб-фреймворков, инструментов тестирования разного уровня, систем контроля версий, языков программирования.
Мало пользы в ...
Внес небольшие изменения в код этого блога. Заметил, что Akismet (сервис проверки на спам, которым обрабатывались все входящие комментарии) перестал пропускать однострочные короткие комментарии. Отключил проверку на спам, вместо этого добавил Recaptcha. Если есть какие-то замечания - пишите в комментарии к этому посту или на roman.vorushin@gmail.com.
В новом проекте я много работаю в роли дизайнера-юзабилиста-фронтендщика. Пишу html, css, javascript. Думаю страницами, действиями, приоритетами. Хочу поделиться тем, что я успел увидеть глазами дизайнера в оформлении шаблонов страниц сайта.
Не уходить далеко от html, css
В случае статического сайта каждая страница - это один html файл. Это очень удобно ...
У меня есть больной вопрос, мои уважаемые читатели.
Я давно читаю блог команды 37signals Signal vs. Noise и я завидую тому, как много внимания они уделяют дизайну. Они рекомендуют использовать команды из 1 дизайнера и 2 программистов. Причем дизайнер сам правит шаблоны.
Я никогда еще не работал с такими дизайнерами ...
Знакомые ищут team lead для нового проекта в Москве. Python, lean development, agile. Проект околосоциально-политический, использующий краудсорсинг. Нужно набрать небольшую мобильную команду (2-3 человека) и сделать прототип за 1.5 месяца. Зарплата + equity. Обращайтесь к alex.shevchenko@sciworth.com (один из основателей Sciworth Labs, в которой я сейчас работаю).
Акио Морито - руководитель и со-основатель компании SONY. Интересная история жизни удивительного человека. Я даже задумался - а не купить ли следующим ноутбуком Sony Vaio (вместо макбука, который служит мне уже третий год).
Вот пара цитат про путешествия. Семейный подход к образованию (притом что большинство детей училось в лучших университетах):
Мой отец ...
Пожалуй самый известный мне мощный ход в стартап-проектах - "компактные спецназ-команды". Компактные = не больше 10 человек. Спецназ - где каждый участник десятерых стоит. Примеры: серверная команда youtube из 9 человек (на момент покупки гуглом), reddit (3 человека), github (их было вначале от 2 до 4 человек), stackoverflow (всех победили втроем, после получения ...
"Три мушкетера", дуэль д'Артаньяна и де Жюссака
Эта борьба в конце концов вывела де Жюссака из терпения. Разъяренный тем, что ему не удается справиться с противником, которого он счел юнцом, он разгорячился и начал делать ошибку за ошибкой. Д'Артаньян, не имевший большого опыта, но зато помнивший теорию, удвоил ...
Неделю назад приехали в Киев из Крыма, все это время обустраивались, только сегодня я выбрался поработать в гостеприимный офис Comindwork. Киев очень радует - красивые улыбчивые люди, мало пробок и толкучки, всё близко.
Последние две недели я не программировал (неделю жили в палатке, неделю обустраивались), и сегодня наблюдал постепенный набор скорости ...
Пару дней назад увидел в комментариях на хабре фразу "И тогда я понял, что умными рождаются, а не становятся". Мне эта фраза близка тем, что сейчас, к примеру, я читаю блоги действительно умных талантливых программистов, некоторых знаю лично. И ощущение - между нашими способностями лежит огромная пропасть. Я толком ничего не ...
Если вы давно хотели попробовать писать юнит-тесты для своих проектов, но не могли пересилить лень, стремление к простоте или что-то еще, то у меня есть совет для вас. Попробуйте написать юнит-тесты для API - тех вьюх, которые не открыть в браузере, не протестить глазами и мышкой. Особенно это касается API, которое ...
Цитата из "Автобиографии" Ганди:
"Such service can have no meaning unless one takes pleasure in it. When it is done for show or for fear of public opinion, it stunts the man and crushes his spirit. Service which is rendered without joy helps neither the servant nor the served. But ...
Все больше пишу на Javascript - сначала jQuery для всяких формочек, потом Google/Yandex Maps, сейчас большой проект с Canvas. Среди друзей больше всего работал с JS Дима Смолин, на днях обсуждали с ним слабые места Javascript:
объявление переменных через var приводит к страшным ошибкам в коде (если забудешь var)
итераторы ...
В конце весны мы отвезли все пожитки на склад, оставили только то, что влезет в нашу небольшую машину и уехали из Москвы в Крым. Поселились в Новом Свете (это красивый поселок у моря, окруженный горами и заповедником с можжевеловой рощей). Планируем жить тут до середины сентября. А поскольку валяться на ...
Пока компилится GEOS, расскажу мысль, которая мелькает вот уже полчаса или час в моей голове. Я в последнее время начинаю чувствовать спокойную уверенность, что я могу сделать любой или почти любой сложный проект, решить любую или почти любую сложную задачу. И что для моего фриланса уже сейчас заказов достаточно, я ...
Я программирую с 13 лет. Когда я познакомился с этой областью, то весь мир разделился для меня на две части: волнующий "настоящий" мир логики, цифр, технологий, объектов, фукнций, кристально четкого мышления, быстрого самообучения и вес остальной "обыденный мир" - штаны заштопать, душ принять. Я немного утрирую, потому что была и любовь ...
Пока проверял как Celery работает с MySQL в качестве брокера, материала набежало на большую статью. Сергей Лебедев, спасибо за этот замечательный вопрос!
Проблемная область
В каждом более-менее крупном веб-проекте появляются задачи, которые не укладываются в короткий цикл запроса-ответа HTTP. Отправка уведомлений по почте - сервер может не отвечать 20 секунд, зачем ...
Есть 2 задачи, связанные с .css и .js файлами, которые возникают при регулярном деплойменте веб-проектов. Первая - минимизация размера. Есть много утилит, позволяющих убрать комментарии и лишние пробелы, тем самым сократив размер файла, который скачивает браузер клиента. Вторая - версионирование. Если у вас файл со стилями доступен по ссылке /media/css/main ...
Определяем в питоновском коде задачи, которые должны выполняться асинхронно:
from celery.decorators import task
@task
def add(x, y):
return x + y
Запускаем несколько обработчиков на разных серверах (все они связываются брокером, в качестве которого может выступать RabbitMQ, Stomp, Redis и большинство современных СУБД)
Запускаем задачу на асинхронное выполнение:
result ...
Я всегда был за работу в офисе. И коммуникации лучше, и общее поле команды, и разговоры за чаем, позволяющие наткнуться на нужную мысль. Когда мы делали Рисоваську, то сидели все в одном уютном офисе и нечеловечески трудились (нас даже начали называть киборгами, потому что не парились, не переживали, а дружно ...
И снова цитата из 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 ...
Когда я начинал работать на компьютере, то из развлечений были только игры и то их нужно было писать самому, потому что профессиональные игры нам загружали только по большим праздникам. Мы писали тогда на MSX-Basic всякую всячину - бесконечные стрелялки, логические игры, головоломки.
Чуть позже, когда у меня появился персональный компьютер, я ...
В мейл-конференции Python-Dev всерьез обсуждают включение фукнциональности virtualenv в Python. Это очень удобный инструмент питониста, позволяющий легко работать на одной машине с разными версиями библиотек (например, с django 1.0.4 и django из транка), быстро передавать список зависимостей проекта другим разработчикам (а они смогут поставить все библиотеки одной командой ...
Есть такой замечательный ресурс 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 ...
Неделю-две назад понадобилось мне сделать динамическую форму на Django - чтобы её поля создавались и настраивались в зависимости от данных, передаваемых в конструктор. Изучив исходники, я обнаружил, что сделать это легче легкого:
class DynamicForm(forms.Form):
def __init__(self, some_data, *args, **kwargs):
super(DynamicForm, self).__init__(*args, **kwargs)
for i, requisite ...
В питоне есть 2 очень мощных инструмента мета-программирования: декораторы и метаклассы. Декораторы применяются к функциям, метаклассы - к классам. Хочу подробно остановиться на декораторах.
Что это такое
Классический пример декоратора - render_to:
def render_to(template):
def renderer(func):
def wrapper(request, *args, **kw):
output = func(request, *args, **kw)
if isinstance(output, (list ...
Успешно заканчивается очередной проект и я ищу новые проекты. В этот раз хочу поработать вне офиса - я готов приходить на 1-2 дня в неделю в офис на собрания, а остальное время работать удаленно.
Какие проекты меня интересуют
- активно взаимодействующие с аудиторией (особенно crowdsourcing)
- создающие что-то новое
- использующие open-source технологии
Больше ...
Ребята, я тут подумал - а что если раз в месяц собираться на чашечку кофе и делиться опытом разработки, рассказывать про новые технологии и языки, про решение актуальных задач? Особенно интересны аспекты разработки с использованием динамических языков - Python, Ruby, Javascript. Мне это интересно тем, что можно познакомиться друг с другом, перенять ...
Скачал OmmWriter. Это Mac-only программа, которая разворачивается на весь монитор, включает спокойную музыку и дает тебе возможность писать тексты, не отвлекаясь на интернет-раздражители. Попробовал его в действии, получился мини-рассказ "Отпуск".
Отпуск
Шли как-то два зеленых человечка и шли. Радостно, без нервов. Шли и улыбались друг другу время от времени. Улыбнется ...
17 ноября запустил свой программистский блог vorushin.ru. Главный результат - я с удовольствием пишу на профессиональные темы и получаю фидбек. Очень интересно писать все более длинные и красивые статьи, а не просто слепки мыслей-состояний того, что есть в голове. Как отмечали многие интервьюируемые в Coders at Work, самый полезный навык ...
"За что вы любите программирование?". Этот вопрос я задавал вчера друзьям-киборгам, а потом снова и снова задавал его себе. Я помню, что с самого детства мне нравились инструменты, которыми можно делать всякие забавные штуки. Как-то мама принесла с работы калькулятор, с такими красными циферками, который работал от сети. Как я ...
- Не нужно ставить точки с запятыми и фигурные скобки повсюду (радует еще больше, чем при переходе с begin-end Паскаля к фигурным скобкам C).
- Очень легко читать чужой код (из-за п.1, стандартизированных отступов, компактности языка, а также благодаря специальному упору на читаемость в дизайне языка). По сравнению с C/C ...
Перевод свежего поста из блога Signals vs. Noise Control in its wider sense:
Многие компании стараются контролировать сотрудников. У них есть руководства и предписания. Они мониторят электронную почту. У них есть четкие правила - что разрешено и что запрещено.
Но "контроль" - непростая штука. Чем больше ограничения, тем скорее создается среда недоверия ...

Эта тайна была раскрыта с помощью Google Image Swirl, вот ссылка на доказательство - http://image-swirl.googlelabs.com/html?q=python#377.
from memcache import Client
c = Client(('127.0.0.1:11211',))
c.flush_all()
В django есть хорошее встроенное приложение comments с поддержкой модерации. Сегодня написал AkismetModerator - крохотный класс, который фильтрует спам в комментариях с помощью сервиса Akismet:
from akismet import Akismet
from django.contrib.comments.moderation import CommentModerator, moderator
from django.utils.encoding import smart_str
class AkismetModerator(CommentModerator):
def moderate(self, comment, content_object ...

Это замечательную книгу я начал читать по рекомендации Anatoly Vorobey. Автор провел 15 интервью с выдающимися программистами нашего времени: от Бреда Фитцпатрика (создатель ЖЖ и, насколько я знаю, самый молодой из интервьюируемых) до Дональда Кнута.
Типичная беседа строилась следующим образом - первую половину составляли расспросы о том как люди начинали свою ...
Сегодня получил письмо от Михаила:
Если есть такая возможность, напишите про Erlang. Как я понял, в "Рисоваське" он используется. Просто в Интернете катастрофически мало статей об Erlang-е на русском языке. А у Вас, наверняка, есть, чем поделиться. )
Про наш опыт использования Erlang Толик Востряков уже написал две статьи: Erlang в ...

В джанге многое сразу покорило мое сердце - прекрасные модели, мощный URLconf, красивые шаблоны. Но вот джанго-формы открылись для меня во всей красе лишь недавно. Я быстро научился верстать и обрабатывать формы руками, поэтому не было надобности вникать в довольно большой посвященный им раздел документации (10 разделов!). В новом большом django-проекте ...
Потребовалось мне на днях сделать сериализацию простого Python-dictionary в XML. Элементы словаря - списки и прочие объекты. Готового сниппета я не нашел, написал свой компактный (меньше 30 строчек) сериализатор.
from StringIO import StringIO
from xml.etree.cElementTree import Element, ElementTree
try:
from django.utils.encoding import smart_unicode as unicode
except:
pass ...
В одном из проектов необходимо регулярно выкладывать код из ветки stage на staging сервер. Начали делать это вручную - входишь через ssh, делаешь git push origin stage, если нужно - обновляешь базу и затем перезапускаешь apache. К концу этой недели решили, что хорошо бы все эти действия выполнять одной командой. Я прошерстил ...
Краткий перевод обсуждения Recommendation against Python?:
kng
Я слышал, что сотрудникам Google не рекомендуют использовать Python для новых проектов, что мне кажется глупым, учитывая как много питоновского кода и поддержки самого языка Python исходит из Google. Я начал поиски информации, но ничего не нашел. Вы знаете что-то об этом или ...
Поскольку часть моих постов заключается в том, чтобы "дать ссылку на интересную статью", то сегодня я создал отдельный раздел блога "Интересные ссылки" (справа на главной странице). Часть постов я сконвертировал в статьи-ссылки и из-за этого вы могли получить в свои RSS-ридеры несколько старых записей. Сорри :))))

Я регулярно отслеживаю у себя желание достичь результата одним прыжком - одним удачным выбором технологии (супер-язык или супер-база-данных), выбором супер-идеи, которая перевернет мир, одним программистским запоем, в котором я напишу всё-превсё за выходные. Порой это действительно приводит к прорывам, но чаще это приносит много боли. И чем опытнее становлюсь, тем больше ...
9 ноября я беседовал с ребятами из kamblog.ru, рассказывал про свой опыт перехода из сытой тёплой корпорации в свой рискованный стартап, где нужно было все делать самому и пули буквально свистели над головой :)))) Эту беседу-интервью ребята записали на видео. Разговор получился длинным - больше часа. Ниже я запишу основные тезисы ...
Один из создателей GitHub, Chris Wanstrath, выступил на конференции Ruby Hoedown 2008. Особенно порадовали слова о том, каким нужно быть (а точнее что нужно делать), чтобы начать делать интересные проекты с самыми лучшими разрабочиками со всего мира:
In fact, stop worrying so much about other people. Every time I've ...
3 года назад я завел себе ЖЖ, основной функцией которого было отвечать на вопрос "Как дела?", который многочисленные друзья из разных городов задавали мне по аське с завидной регулярностью. Большинство моих постов были на личные темы, а редкие программерские посты не привлекали особого внимания.
В этом году я снова стал ...